/*
Anchore Engine API Server

This is the Anchore Engine API. Provides the primary external API for users of the service.

API version: 0.1.20
Contact: nurmi@anchore.com
*/

// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.

package anchore

import (
	"encoding/json"
	"time"
)

// AnalysisArchiveTransitionRule A rule for auto-archiving image analysis by time and/or tag-history
type AnalysisArchiveTransitionRule struct {
	Selector *ImageSelector `json:"selector,omitempty"`
	// Unique identifier for archive rule
	RuleId *string `json:"rule_id,omitempty"`
	// Number of images mapped to the tag that are newer
	TagVersionsNewer *int32 `json:"tag_versions_newer,omitempty"`
	// Matches if the analysis is strictly older than this number of days
	AnalysisAgeDays *int32 `json:"analysis_age_days,omitempty"`
	// The type of transition to make. If \"archive\", then archive an image from the working set and remove it from the working set. If \"delete\", then match against archived images and delete from the archive if match.
	Transition string `json:"transition"`
	// True if the rule applies to all accounts in the system. This is only available to admin users to update/modify, but all users with permission to list rules can see them
	SystemGlobal *bool `json:"system_global,omitempty"`
	CreatedAt *time.Time `json:"created_at,omitempty"`
	LastUpdated *time.Time `json:"last_updated,omitempty"`
	Exclude *AnalysisArchiveTransitionRuleExclude `json:"exclude,omitempty"`
	// This is the maximum number of image analyses an account can have. Can only be set on system_global rules
	MaxImagesPerAccount *int32 `json:"max_images_per_account,omitempty"`
}

// NewAnalysisArchiveTransitionRule instantiates a new AnalysisArchiveTransitionRule object
// This constructor will assign default values to properties that have it defined,
// and makes sure properties required by API are set, but the set of arguments
// will change when the set of required properties is changed
func NewAnalysisArchiveTransitionRule(transition string) *AnalysisArchiveTransitionRule {
	this := AnalysisArchiveTransitionRule{}
	this.Transition = transition
	return &this
}

// NewAnalysisArchiveTransitionRuleWithDefaults instantiates a new AnalysisArchiveTransitionRule object
// This constructor will only assign default values to properties that have it defined,
// but it doesn't guarantee that properties required by API are set
func NewAnalysisArchiveTransitionRuleWithDefaults() *AnalysisArchiveTransitionRule {
	this := AnalysisArchiveTransitionRule{}
	return &this
}

// GetSelector returns the Selector field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetSelector() ImageSelector {
	if o == nil || o.Selector == nil {
		var ret ImageSelector
		return ret
	}
	return *o.Selector
}

// GetSelectorOk returns a tuple with the Selector field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetSelectorOk() (*ImageSelector, bool) {
	if o == nil || o.Selector == nil {
		return nil, false
	}
	return o.Selector, true
}

// HasSelector returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasSelector() bool {
	if o != nil && o.Selector != nil {
		return true
	}

	return false
}

// SetSelector gets a reference to the given ImageSelector and assigns it to the Selector field.
func (o *AnalysisArchiveTransitionRule) SetSelector(v ImageSelector) {
	o.Selector = &v
}

// GetRuleId returns the RuleId field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetRuleId() string {
	if o == nil || o.RuleId == nil {
		var ret string
		return ret
	}
	return *o.RuleId
}

// GetRuleIdOk returns a tuple with the RuleId field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetRuleIdOk() (*string, bool) {
	if o == nil || o.RuleId == nil {
		return nil, false
	}
	return o.RuleId, true
}

// HasRuleId returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasRuleId() bool {
	if o != nil && o.RuleId != nil {
		return true
	}

	return false
}

// SetRuleId gets a reference to the given string and assigns it to the RuleId field.
func (o *AnalysisArchiveTransitionRule) SetRuleId(v string) {
	o.RuleId = &v
}

// GetTagVersionsNewer returns the TagVersionsNewer field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetTagVersionsNewer() int32 {
	if o == nil || o.TagVersionsNewer == nil {
		var ret int32
		return ret
	}
	return *o.TagVersionsNewer
}

// GetTagVersionsNewerOk returns a tuple with the TagVersionsNewer field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetTagVersionsNewerOk() (*int32, bool) {
	if o == nil || o.TagVersionsNewer == nil {
		return nil, false
	}
	return o.TagVersionsNewer, true
}

// HasTagVersionsNewer returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasTagVersionsNewer() bool {
	if o != nil && o.TagVersionsNewer != nil {
		return true
	}

	return false
}

// SetTagVersionsNewer gets a reference to the given int32 and assigns it to the TagVersionsNewer field.
func (o *AnalysisArchiveTransitionRule) SetTagVersionsNewer(v int32) {
	o.TagVersionsNewer = &v
}

// GetAnalysisAgeDays returns the AnalysisAgeDays field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetAnalysisAgeDays() int32 {
	if o == nil || o.AnalysisAgeDays == nil {
		var ret int32
		return ret
	}
	return *o.AnalysisAgeDays
}

// GetAnalysisAgeDaysOk returns a tuple with the AnalysisAgeDays field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetAnalysisAgeDaysOk() (*int32, bool) {
	if o == nil || o.AnalysisAgeDays == nil {
		return nil, false
	}
	return o.AnalysisAgeDays, true
}

// HasAnalysisAgeDays returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasAnalysisAgeDays() bool {
	if o != nil && o.AnalysisAgeDays != nil {
		return true
	}

	return false
}

// SetAnalysisAgeDays gets a reference to the given int32 and assigns it to the AnalysisAgeDays field.
func (o *AnalysisArchiveTransitionRule) SetAnalysisAgeDays(v int32) {
	o.AnalysisAgeDays = &v
}

// GetTransition returns the Transition field value
func (o *AnalysisArchiveTransitionRule) GetTransition() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.Transition
}

// GetTransitionOk returns a tuple with the Transition field value
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetTransitionOk() (*string, bool) {
	if o == nil {
		return nil, false
	}
	return &o.Transition, true
}

// SetTransition sets field value
func (o *AnalysisArchiveTransitionRule) SetTransition(v string) {
	o.Transition = v
}

// GetSystemGlobal returns the SystemGlobal field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetSystemGlobal() bool {
	if o == nil || o.SystemGlobal == nil {
		var ret bool
		return ret
	}
	return *o.SystemGlobal
}

// GetSystemGlobalOk returns a tuple with the SystemGlobal field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetSystemGlobalOk() (*bool, bool) {
	if o == nil || o.SystemGlobal == nil {
		return nil, false
	}
	return o.SystemGlobal, true
}

// HasSystemGlobal returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasSystemGlobal() bool {
	if o != nil && o.SystemGlobal != nil {
		return true
	}

	return false
}

// SetSystemGlobal gets a reference to the given bool and assigns it to the SystemGlobal field.
func (o *AnalysisArchiveTransitionRule) SetSystemGlobal(v bool) {
	o.SystemGlobal = &v
}

// GetCreatedAt returns the CreatedAt field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetCreatedAt() time.Time {
	if o == nil || o.CreatedAt == nil {
		var ret time.Time
		return ret
	}
	return *o.CreatedAt
}

// GetCreatedAtOk returns a tuple with the CreatedAt field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetCreatedAtOk() (*time.Time, bool) {
	if o == nil || o.CreatedAt == nil {
		return nil, false
	}
	return o.CreatedAt, true
}

// HasCreatedAt returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasCreatedAt() bool {
	if o != nil && o.CreatedAt != nil {
		return true
	}

	return false
}

// SetCreatedAt gets a reference to the given time.Time and assigns it to the CreatedAt field.
func (o *AnalysisArchiveTransitionRule) SetCreatedAt(v time.Time) {
	o.CreatedAt = &v
}

// GetLastUpdated returns the LastUpdated field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetLastUpdated() time.Time {
	if o == nil || o.LastUpdated == nil {
		var ret time.Time
		return ret
	}
	return *o.LastUpdated
}

// GetLastUpdatedOk returns a tuple with the LastUpdated field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetLastUpdatedOk() (*time.Time, bool) {
	if o == nil || o.LastUpdated == nil {
		return nil, false
	}
	return o.LastUpdated, true
}

// HasLastUpdated returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasLastUpdated() bool {
	if o != nil && o.LastUpdated != nil {
		return true
	}

	return false
}

// SetLastUpdated gets a reference to the given time.Time and assigns it to the LastUpdated field.
func (o *AnalysisArchiveTransitionRule) SetLastUpdated(v time.Time) {
	o.LastUpdated = &v
}

// GetExclude returns the Exclude field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetExclude() AnalysisArchiveTransitionRuleExclude {
	if o == nil || o.Exclude == nil {
		var ret AnalysisArchiveTransitionRuleExclude
		return ret
	}
	return *o.Exclude
}

// GetExcludeOk returns a tuple with the Exclude field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetExcludeOk() (*AnalysisArchiveTransitionRuleExclude, bool) {
	if o == nil || o.Exclude == nil {
		return nil, false
	}
	return o.Exclude, true
}

// HasExclude returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasExclude() bool {
	if o != nil && o.Exclude != nil {
		return true
	}

	return false
}

// SetExclude gets a reference to the given AnalysisArchiveTransitionRuleExclude and assigns it to the Exclude field.
func (o *AnalysisArchiveTransitionRule) SetExclude(v AnalysisArchiveTransitionRuleExclude) {
	o.Exclude = &v
}

// GetMaxImagesPerAccount returns the MaxImagesPerAccount field value if set, zero value otherwise.
func (o *AnalysisArchiveTransitionRule) GetMaxImagesPerAccount() int32 {
	if o == nil || o.MaxImagesPerAccount == nil {
		var ret int32
		return ret
	}
	return *o.MaxImagesPerAccount
}

// GetMaxImagesPerAccountOk returns a tuple with the MaxImagesPerAccount field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *AnalysisArchiveTransitionRule) GetMaxImagesPerAccountOk() (*int32, bool) {
	if o == nil || o.MaxImagesPerAccount == nil {
		return nil, false
	}
	return o.MaxImagesPerAccount, true
}

// HasMaxImagesPerAccount returns a boolean if a field has been set.
func (o *AnalysisArchiveTransitionRule) HasMaxImagesPerAccount() bool {
	if o != nil && o.MaxImagesPerAccount != nil {
		return true
	}

	return false
}

// SetMaxImagesPerAccount gets a reference to the given int32 and assigns it to the MaxImagesPerAccount field.
func (o *AnalysisArchiveTransitionRule) SetMaxImagesPerAccount(v int32) {
	o.MaxImagesPerAccount = &v
}

func (o AnalysisArchiveTransitionRule) MarshalJSON() ([]byte, error) {
	toSerialize := map[string]interface{}{}
	if o.Selector != nil {
		toSerialize["selector"] = o.Selector
	}
	if o.RuleId != nil {
		toSerialize["rule_id"] = o.RuleId
	}
	if o.TagVersionsNewer != nil {
		toSerialize["tag_versions_newer"] = o.TagVersionsNewer
	}
	if o.AnalysisAgeDays != nil {
		toSerialize["analysis_age_days"] = o.AnalysisAgeDays
	}
	if true {
		toSerialize["transition"] = o.Transition
	}
	if o.SystemGlobal != nil {
		toSerialize["system_global"] = o.SystemGlobal
	}
	if o.CreatedAt != nil {
		toSerialize["created_at"] = o.CreatedAt
	}
	if o.LastUpdated != nil {
		toSerialize["last_updated"] = o.LastUpdated
	}
	if o.Exclude != nil {
		toSerialize["exclude"] = o.Exclude
	}
	if o.MaxImagesPerAccount != nil {
		toSerialize["max_images_per_account"] = o.MaxImagesPerAccount
	}
	return json.Marshal(toSerialize)
}

type NullableAnalysisArchiveTransitionRule struct {
	value *AnalysisArchiveTransitionRule
	isSet bool
}

func (v NullableAnalysisArchiveTransitionRule) Get() *AnalysisArchiveTransitionRule {
	return v.value
}

func (v *NullableAnalysisArchiveTransitionRule) Set(val *AnalysisArchiveTransitionRule) {
	v.value = val
	v.isSet = true
}

func (v NullableAnalysisArchiveTransitionRule) IsSet() bool {
	return v.isSet
}

func (v *NullableAnalysisArchiveTransitionRule) Unset() {
	v.value = nil
	v.isSet = false
}

func NewNullableAnalysisArchiveTransitionRule(val *AnalysisArchiveTransitionRule) *NullableAnalysisArchiveTransitionRule {
	return &NullableAnalysisArchiveTransitionRule{value: val, isSet: true}
}

func (v NullableAnalysisArchiveTransitionRule) MarshalJSON() ([]byte, error) {
	return json.Marshal(v.value)
}

func (v *NullableAnalysisArchiveTransitionRule) UnmarshalJSON(src []byte) error {
	v.isSet = true
	return json.Unmarshal(src, &v.value)
}


