/**
* Copyright (c) 2009 - 2016 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package org.candlepin.model.dto;
import org.candlepin.model.Content;
import org.candlepin.model.ProductContent;
import io.swagger.annotations.ApiModel;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlRootElement;
/**
* DTO representing a product content mapping exposed to the API and adapter layers. Unlike the
* ProductContent entity, this DTO does not contain a reference to the product. Instead, it is
* implied by attaching it to a ProductData instance.
*
* <pre>
* {
* "content" : {
* ...
* },
* "enabled" : false
* }
* </pre>
*/
@ApiModel(parent = CandlepinDTO.class)
@XmlRootElement
public class ProductContentData implements Cloneable, Serializable {
public static final long serialVersionUID = 1L;
private ContentData content;
private Boolean enabled;
/**
* Initializes a new ProductContentData instance with null values.
*/
public ProductContentData() {
// Intentionally left empty
}
public ProductContentData(ContentData content, Boolean enabled) {
this.setContent(content);
this.setEnabled(enabled);
}
/**
* Initializes a new ProductContentData instance using the data contained by the given DTO.
*
* @param source
* The source DTO from which to copy data
*
* @throws IllegalArgumentException
* if source is null
*/
public ProductContentData(ProductContentData source) {
if (source == null) {
throw new IllegalArgumentException("source is null");
}
this.populate(source);
}
/**
* Initializes a new ProductContentData instance using the data contained by the given entity.
*
* @param source
* The source entity from which to copy data
*
* @throws IllegalArgumentException
* if source is null
*/
public ProductContentData(ProductContent source) {
if (source == null) {
throw new IllegalArgumentException("source is null");
}
this.populate(source);
}
/**
* Retrieves the content of the content data represented by this DTO. If the content has not
* yet been defined, this method returns null.
*
* @return
* the content of this DTO, or null if the content has not yet been defined
*/
public ContentData getContent() {
return this.content;
}
/**
* Sets the content of the product content represented by this DTO.
*
* @param content
* The content of the product represented by this DTO
*
* @throws IllegalArgumentException
* if content is null
*
* @return
* a reference to this DTO
*/
public ProductContentData setContent(ContentData content) {
if (content == null) {
throw new IllegalArgumentException("content is null");
}
this.content = content;
return this;
}
/**
* Retrieves the enabled flag of the content data represented by this DTO. If the enabled flag
* has not yet been defined, this method returns null.
*
* @return
* the enabled flag of this DTO, or null if the enabled flag has not yet been set
*/
public Boolean isEnabled() {
return this.enabled;
}
/**
* Sets the enabled flag of the product content represented by this DTO.
*
* @param enabled
* The enabled flag of the product content represented by this DTO, or null to clear the
* enabled flag
*
* @return
* a reference to this DTO
*/
public ProductContentData setEnabled(Boolean enabled) {
this.enabled = enabled;
return this;
}
@Override
public String toString() {
return String.format("ProductContentData [content: %s, enabled: %s]", this.content, this.enabled);
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof ProductContentData)) {
return false;
}
if (obj == this) {
return true;
}
ProductContentData that = (ProductContentData) obj;
EqualsBuilder builder = new EqualsBuilder()
.append(this.content, that.content)
.append(this.enabled, that.enabled);
return builder.isEquals();
}
@Override
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder(7, 17)
.append(this.content)
.append(this.enabled);
return builder.toHashCode();
}
@Override
public Object clone() {
ProductContentData copy;
try {
copy = (ProductContentData) super.clone();
}
catch (CloneNotSupportedException e) {
// This should never happen.
throw new RuntimeException("Clone not supported", e);
}
copy.content = this.content != null ? (ContentData) this.content.clone() : null;
return copy;
}
/**
* Populates this DTO with the data from the given source DTO.
*
* @param source
* The source DTO from which to copy data
*
* @throws IllegalArgumentException
* if source is null
*
* @return
* a reference to this DTO
*/
public ProductContentData populate(ProductContentData source) {
if (source == null) {
throw new IllegalArgumentException("source is null");
}
this.content = source.content;
this.enabled = source.enabled;
return this;
}
/**
* Populates this DTO with data from the given source entity.
*
* @param source
* The source entity from which to copy data
*
* @throws IllegalArgumentException
* if source is null
*
* @return
* a reference to this DTO
*/
public ProductContentData populate(ProductContent source) {
if (source == null) {
throw new IllegalArgumentException("source is null");
}
Content content = source.getContent();
this.content = content != null ?
(this.content != null ? this.content.populate(content) : content.toDTO()) :
null;
this.enabled = source.isEnabled();
return this;
}
}