// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.analytics.purview.sharing.models;

import java.time.OffsetDateTime;

import com.azure.core.annotation.Fluent;
import com.azure.core.annotation.JsonFlatten;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;

/**
 * An InPlace received share kind.
 */
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "shareKind")
@JsonTypeName("InPlace")
@JsonFlatten
@Fluent
public class InPlaceReceivedShare extends ReceivedShare {
    /*
     * Location of the shared Asset.
     */
    @JsonProperty(value = "properties.assetLocation", access = JsonProperty.Access.WRITE_ONLY)
    private String assetLocation;

    /*
     * The types of asset.
     */
    @JsonProperty(value = "properties.assetStoreKind")
    private StoreKind assetStoreKind;

    /*
     * Time at which the received share was created. Represented in the standard date-time format as defined by [RFC
     * 3339](https://www.rfc-editor.org/rfc/rfc3339)
     */
    @JsonProperty(value = "properties.createdAt", access = JsonProperty.Access.WRITE_ONLY)
    private OffsetDateTime createdAt;

    /*
     * Received Share Name
     */
    @JsonProperty(value = "properties.displayName")
    private String displayName;

    /*
     * The expiration date of the received share. Represented in the standard date-time format as defined by [RFC
     * 3339](https://www.rfc-editor.org/rfc/rfc3339)
     */
    @JsonProperty(value = "properties.expirationDate", access = JsonProperty.Access.WRITE_ONLY)
    private OffsetDateTime expirationDate;

    /*
     * Email of the user/receiver who received the sent share invitation
     */
    @JsonProperty(value = "properties.receiverEmail", access = JsonProperty.Access.WRITE_ONLY)
    private String receiverEmail;

    /*
     * Name of the user/receiver who received the sent share invitation
     */
    @JsonProperty(value = "properties.receiverName", access = JsonProperty.Access.WRITE_ONLY)
    private String receiverName;

    /*
     * Tenant name of the user/receiver who received the sent share invitation
     */
    @JsonProperty(value = "properties.receiverTenantName", access = JsonProperty.Access.WRITE_ONLY)
    private String receiverTenantName;

    /*
     * Email of the sender who created the sent share invitation
     */
    @JsonProperty(value = "properties.senderEmail", access = JsonProperty.Access.WRITE_ONLY)
    private String senderEmail;

    /*
     * Name of the sender who created the sent share invitation
     */
    @JsonProperty(value = "properties.senderName", access = JsonProperty.Access.WRITE_ONLY)
    private String senderName;

    /*
     * Tenant name of the sender who created the sent share invitation
     */
    @JsonProperty(value = "properties.senderTenantName", access = JsonProperty.Access.WRITE_ONLY)
    private String senderTenantName;

    /*
     * Share description.
     */
    @JsonProperty(value = "properties.sentShareDescription", access = JsonProperty.Access.WRITE_ONLY)
    private String sentShareDescription;

    /*
     * Time at which the sent share was shared. Represented in the standard date-time format as defined by [RFC
     * 3339](https://www.rfc-editor.org/rfc/rfc3339)
     */
    @JsonProperty(value = "properties.sharedAt", access = JsonProperty.Access.WRITE_ONLY)
    private OffsetDateTime sharedAt;

    /*
     * Share status.
     */
    @JsonProperty(value = "properties.shareStatus")
    private ShareStatus shareStatus;

    /*
     * Holds details on the destination of the mapped artifact
     */
    @JsonProperty(value = "properties.sink")
    private Sink sink;

    /*
     * State of the resource
     */
    @JsonProperty(value = "properties.state", access = JsonProperty.Access.WRITE_ONLY)
    private State state;

    /**
     * Creates an instance of InPlaceReceivedShare class.
     */
    public InPlaceReceivedShare() {
    }

    /**
     * Get the assetLocation property: Location of the shared Asset.
     * 
     * @return the assetLocation value.
     */
    public String getAssetLocation() {
        return this.assetLocation;
    }

    /**
     * Get the assetStoreKind property: The types of asset.
     * 
     * @return the assetStoreKind value.
     */
    public StoreKind getAssetStoreKind() {
        return this.assetStoreKind;
    }

    /**
     * Set the assetStoreKind property: The types of asset.
     * 
     * @param assetStoreKind the assetStoreKind value to set.
     * @return the InPlaceReceivedShare object itself.
     */
    public InPlaceReceivedShare setAssetStoreKind(StoreKind assetStoreKind) {
        this.assetStoreKind = assetStoreKind;
        return this;
    }

    /**
     * Get the createdAt property: Time at which the received share was created. Represented in the standard date-time
     * format as defined by [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339).
     * 
     * @return the createdAt value.
     */
    public OffsetDateTime getCreatedAt() {
        return this.createdAt;
    }

    /**
     * Get the displayName property: Received Share Name.
     * 
     * @return the displayName value.
     */
    public String getDisplayName() {
        return this.displayName;
    }

    /**
     * Set the displayName property: Received Share Name.
     * 
     * @param displayName the displayName value to set.
     * @return the InPlaceReceivedShare object itself.
     */
    public InPlaceReceivedShare setDisplayName(String displayName) {
        this.displayName = displayName;
        return this;
    }

    /**
     * Get the expirationDate property: The expiration date of the received share. Represented in the standard
     * date-time format as defined by [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339).
     * 
     * @return the expirationDate value.
     */
    public OffsetDateTime getExpirationDate() {
        return this.expirationDate;
    }

    /**
     * Get the receiverEmail property: Email of the user/receiver who received the sent share invitation.
     * 
     * @return the receiverEmail value.
     */
    public String getReceiverEmail() {
        return this.receiverEmail;
    }

    /**
     * Get the receiverName property: Name of the user/receiver who received the sent share invitation.
     * 
     * @return the receiverName value.
     */
    public String getReceiverName() {
        return this.receiverName;
    }

    /**
     * Get the receiverTenantName property: Tenant name of the user/receiver who received the sent share invitation.
     * 
     * @return the receiverTenantName value.
     */
    public String getReceiverTenantName() {
        return this.receiverTenantName;
    }

    /**
     * Get the senderEmail property: Email of the sender who created the sent share invitation.
     * 
     * @return the senderEmail value.
     */
    public String getSenderEmail() {
        return this.senderEmail;
    }

    /**
     * Get the senderName property: Name of the sender who created the sent share invitation.
     * 
     * @return the senderName value.
     */
    public String getSenderName() {
        return this.senderName;
    }

    /**
     * Get the senderTenantName property: Tenant name of the sender who created the sent share invitation.
     * 
     * @return the senderTenantName value.
     */
    public String getSenderTenantName() {
        return this.senderTenantName;
    }

    /**
     * Get the sentShareDescription property: Share description.
     * 
     * @return the sentShareDescription value.
     */
    public String getSentShareDescription() {
        return this.sentShareDescription;
    }

    /**
     * Get the sharedAt property: Time at which the sent share was shared. Represented in the standard date-time format
     * as defined by [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339).
     * 
     * @return the sharedAt value.
     */
    public OffsetDateTime getSharedAt() {
        return this.sharedAt;
    }

    /**
     * Get the shareStatus property: Share status.
     * 
     * @return the shareStatus value.
     */
    public ShareStatus getShareStatus() {
        return this.shareStatus;
    }

    /**
     * Set the shareStatus property: Share status.
     * 
     * @param shareStatus the shareStatus value to set.
     * @return the InPlaceReceivedShare object itself.
     */
    public InPlaceReceivedShare setShareStatus(ShareStatus shareStatus) {
        this.shareStatus = shareStatus;
        return this;
    }

    /**
     * Get the sink property: Holds details on the destination of the mapped artifact.
     * 
     * @return the sink value.
     */
    public Sink getSink() {
        return this.sink;
    }

    /**
     * Set the sink property: Holds details on the destination of the mapped artifact.
     * 
     * @param sink the sink value to set.
     * @return the InPlaceReceivedShare object itself.
     */
    public InPlaceReceivedShare setSink(Sink sink) {
        this.sink = sink;
        return this;
    }

    /**
     * Get the state property: State of the resource.
     * 
     * @return the state value.
     */
    public State getState() {
        return this.state;
    }
}
