Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* anaptecs GmbH, Ricarda-Huch-Str. 71, 72760 Reutlingen, Germany
*
* Copyright 2004 - 2019. All rights reserved.
*/
package com.anaptecs.spring.base;
import java.net.URL;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import jakarta.validation.constraints.Size;
/**
* Data type represents a product definition
*
* @author JEAF Generator
* @version JEAF Release 1.4.x
*/
public class Product implements IProduct {
/**
* Constant for the name of attribute "resellers".
*/
public static final String RESELLERS = "resellers";
/**
* Constant for the name of attribute "name".
*/
public static final String NAME = "name";
/**
* Constant for the name of attribute "image".
*/
public static final String IMAGE = "image";
/**
* Constant for the name of attribute "link".
*/
public static final String LINK = "link";
/**
* Constant for the name of attribute "productID".
*/
public static final String PRODUCTID = "productID";
/**
* Constant for the name of attribute "supportedCurrencies".
*/
public static final String SUPPORTEDCURRENCIES = "supportedCurrencies";
/**
* Constant for the name of attribute "productCodes".
*/
public static final String PRODUCTCODES = "productCodes";
/**
* Constant for the name of attribute "description".
*/
@Deprecated
public static final String DESCRIPTION = "description";
/**
* Constant for the name of attribute "sortiments".
*/
public static final String SORTIMENTS = "sortiments";
/**
* Constant for the name of attribute "uri".
*/
public static final String URI = "uri";
private Set resellers;
/**
* Attribute is required for correct handling of bidirectional associations in case of deserialization.
*/
private transient boolean resellersBackReferenceInitialized;
@Size(min = 12, max = Integer.MAX_VALUE)
private String name;
/**
* Image describing the product.
*/
private byte[] image;
/**
*
* Example(s):
*
*
https://www.company.com/products/1345-345
*
*/
private URL link;
private final UUID productID;
@Size(min = 7, max = 42)
private Set supportedCurrencies;
private Set productCodes;
@Deprecated
private String description;
private transient Set sortiments;
/**
*
* Default Value:"https://products.anaptecs.de/123456789"
*/
private String uri;
/**
* Default constructor is only intended to be used for deserialization by tools like Jackson for JSON. For "normal"
* object creation builder should be used instead.
*/
protected Product( ) {
resellers = new HashSet();
// Bidirectional back reference is not yet set up correctly
resellersBackReferenceInitialized = false;
productID = null;
supportedCurrencies = new HashSet();
productCodes = new HashSet();
sortiments = new HashSet();
uri = "https://products.anaptecs.de/123456789";
}
/**
* Initialize object using the passed builder.
*
* @param pBuilder Builder that should be used to initialize this object. The parameter must not be null.
*/
protected Product( Builder pBuilder ) {
// Read attribute values from builder.
if (pBuilder.resellers != null) {
resellers = pBuilder.resellers;
// As association is bidirectional we also have to set it in the other direction.
for (Reseller lNext : resellers) {
lNext.addToProducts((Product) this);
}
}
else {
resellers = new HashSet();
}
// Bidirectional back reference is set up correctly as a builder is used.
resellersBackReferenceInitialized = true;
name = pBuilder.name;
image = pBuilder.image;
link = pBuilder.link;
productID = pBuilder.productID;
if (pBuilder.supportedCurrencies != null) {
supportedCurrencies = pBuilder.supportedCurrencies;
}
else {
supportedCurrencies = new HashSet();
}
if (pBuilder.productCodes != null) {
productCodes = pBuilder.productCodes;
}
else {
productCodes = new HashSet();
}
description = pBuilder.description;
sortiments = new HashSet();
uri = pBuilder.uri;
}
/**
* Method returns a new builder.
*
* @return {@link Builder} New builder that can be used to create new Product objects.
*/
public static Builder builder( ) {
return new Builder();
}
/**
* Convenience method to create new instance of class Product.
*
*
* @param pName Value to which {@link #name} should be set.
*
* @param pLink Value to which {@link #link} should be set.
*
* @param pProductID Value to which {@link #productID} should be set.
*
* @param pSupportedCurrencies Value to which {@link #supportedCurrencies} should be set.
*
* @param pProductCodes Value to which {@link #productCodes} should be set.
*
* @param pDescription Value to which {@link #description} should be set.
*
* @param pUri Value to which {@link #uri} should be set.
*
* @return {@link Product}
*/
public static Product of( String pName, URL pLink, UUID pProductID, Set pSupportedCurrencies,
Set pProductCodes, String pDescription, String pUri ) {
Product.Builder lBuilder = Product.builder();
lBuilder.setName(pName);
lBuilder.setLink(pLink);
lBuilder.setProductID(pProductID);
lBuilder.setSupportedCurrencies(pSupportedCurrencies);
lBuilder.setProductCodes(pProductCodes);
lBuilder.setDescription(pDescription);
lBuilder.setUri(pUri);
return lBuilder.build();
}
/**
* Class implements builder to create a new instance of class Product.
*/
public static class Builder {
private Set resellers;
@Size(min = 12, max = Integer.MAX_VALUE)
private String name;
/**
* Image describing the product.
*/
private byte[] image;
/**
*
* Example(s):
*
*
https://www.company.com/products/1345-345
*
*/
private URL link;
private UUID productID;
private Set supportedCurrencies;
private Set productCodes;
@Deprecated
private String description;
/**
*
* Default Value:"https://products.anaptecs.de/123456789"
*/
private String uri = "https://products.anaptecs.de/123456789";
/**
* Use {@link Product#builder()} instead of private constructor to create new builder.
*/
protected Builder( ) {
}
/**
* Use {@link Product#builder(Product)} instead of private constructor to create new builder.
*/
protected Builder( Product pObject ) {
if (pObject != null) {
// Read attribute values from passed object.
this.setResellers(pObject.resellers);
this.setName(pObject.name);
this.setImage(pObject.image);
this.setLink(pObject.link);
this.setProductID(pObject.productID);
this.setSupportedCurrencies(pObject.supportedCurrencies);
this.setProductCodes(pObject.productCodes);
this.setDescription(pObject.description);
this.setUri(pObject.uri);
}
}
/**
* Method sets association {@link #resellers}.
*
* @param pResellers Collection to which {@link #resellers} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
public Builder setResellers( Set pResellers ) {
resellers = pResellers;
return this;
}
/**
* Method adds the passed objects to association {@link #resellers}.
*
* @param pResellers Array of objects that should be added to {@link #resellers}. The parameter may be null.
* @return {@link Builder} Instance of this builder to support chaining. Method never returns null.
*/
public Builder addToResellers( Reseller... pResellers ) {
if (pResellers != null) {
if (resellers == null) {
resellers = new HashSet();
}
resellers.addAll(Arrays.asList(pResellers));
}
return this;
}
/**
* Method sets attribute {@link #name}.
*
* @param pName Value to which {@link #name} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
public Builder setName( String pName ) {
// Assign value to attribute
name = pName;
return this;
}
/**
* Method sets attribute {@link #image}.
*
* @param pImage Value to which {@link #image} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
public Builder setImage( byte[] pImage ) {
// Assign value to attribute
if (pImage != null) {
image = new byte[pImage.length];
System.arraycopy(pImage, 0, image, 0, pImage.length);
}
else {
image = null;
}
return this;
}
/**
* Method sets attribute {@link #link}.
*
* @param pLink Value to which {@link #link} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
public Builder setLink( URL pLink ) {
// Assign value to attribute
link = pLink;
return this;
}
/**
* Method sets attribute {@link #productID}.
*
* @param pProductID Value to which {@link #productID} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
public Builder setProductID( UUID pProductID ) {
// Assign value to attribute
productID = pProductID;
return this;
}
/**
* Method sets association {@link #supportedCurrencies}.
*
* @param pSupportedCurrencies Collection to which {@link #supportedCurrencies} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
public Builder setSupportedCurrencies( Set pSupportedCurrencies ) {
supportedCurrencies = pSupportedCurrencies;
return this;
}
/**
* Method adds the passed objects to association {@link #supportedCurrencies}.
*
* @param pSupportedCurrencies Array of objects that should be added to {@link #supportedCurrencies}. The parameter
* may be null.
* @return {@link Builder} Instance of this builder to support chaining. Method never returns null.
*/
public Builder addToSupportedCurrencies( CurrencyCode... pSupportedCurrencies ) {
if (pSupportedCurrencies != null) {
if (supportedCurrencies == null) {
supportedCurrencies = new HashSet();
}
supportedCurrencies.addAll(Arrays.asList(pSupportedCurrencies));
}
return this;
}
/**
* Method sets association {@link #productCodes}.
*
* @param pProductCodes Collection to which {@link #productCodes} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
public Builder setProductCodes( Set pProductCodes ) {
productCodes = pProductCodes;
return this;
}
/**
* Method adds the passed objects to association {@link #productCodes}.
*
* @param pProductCodes Array of objects that should be added to {@link #productCodes}. The parameter may be null.
* @return {@link Builder} Instance of this builder to support chaining. Method never returns null.
*/
public Builder addToProductCodes( ProductCode... pProductCodes ) {
if (pProductCodes != null) {
if (productCodes == null) {
productCodes = new HashSet();
}
productCodes.addAll(Arrays.asList(pProductCodes));
}
return this;
}
/**
* Method sets attribute {@link #description}.
*
* @param pDescription Value to which {@link #description} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
@Deprecated
public Builder setDescription( String pDescription ) {
// Assign value to attribute
description = pDescription;
return this;
}
/**
* Method sets attribute {@link #uri}.
*
* @param pUri Value to which {@link #uri} should be set.
* @return {@link Builder} Instance of this builder to support chaining setters. Method never returns null.
*/
public Builder setUri( String pUri ) {
// Assign value to attribute
uri = pUri;
return this;
}
/**
* Method creates a new instance of class Product. The object will be initialized with the values of the builder.
*
* @return Product Created object. The method never returns null.
*/
public Product build( ) {
return new Product(this);
}
}
/**
* Method returns association {@link #resellers}.
*
* @return {@link Set} Value to which {@link #resellers} is set. The method never returns null and the
* returned collection is unmodifiable.
*/
public Set getResellers( ) {
// Due to restrictions in JSON serialization / deserialization bi-directional associations need a special handling
// after an object was deserialized.
if (resellersBackReferenceInitialized == false) {
resellersBackReferenceInitialized = true;
for (Reseller lNext : resellers) {
lNext.addToProducts((Product) this);
}
}
// Return all Reseller objects as unmodifiable collection.
return Collections.unmodifiableSet(resellers);
}
/**
* Method adds the passed object to {@link #resellers}.
*
* @param pResellers Object that should be added to {@link #resellers}. The parameter must not be null.
*/
public void addToResellers( Reseller pResellers ) {
// Add passed object to collection of associated Reseller objects.
resellers.add(pResellers);
// The association is set in both directions because within the UML model it is defined to be bidirectional.
// In case that one side will be removed from the association the other side will also be removed.
if (pResellers != null && pResellers.getProducts().contains(this) == false) {
pResellers.addToProducts((Product) this);
}
}
/**
* Method adds all passed objects to {@link #resellers}.
*
* @param pResellers Collection with all objects that should be added to {@link #resellers}. The parameter must not be
* null.
*/
public void addToResellers( Collection pResellers ) {
// Add all passed objects.
for (Reseller lNextObject : pResellers) {
this.addToResellers(lNextObject);
}
}
/**
* Method removes the passed object from {@link #resellers}.
*
* @param pResellers Object that should be removed from {@link #resellers}. The parameter must not be null.
*/
public void removeFromResellers( Reseller pResellers ) {
// Remove passed object from collection of associated Reseller objects.
resellers.remove(pResellers);
// The association is set in both directions because within the UML model it is defined to be bidirectional.
// In case that one side will be removed from the association the other side will also be removed.
if (pResellers.getProducts().contains(this) == true) {
pResellers.removeFromProducts((Product) this);
}
}
/**
* Method removes all objects from {@link #resellers}.
*/
public void clearResellers( ) {
// Remove all objects from association "resellers".
Collection lResellers = new HashSet(resellers);
Iterator lIterator = lResellers.iterator();
while (lIterator.hasNext()) {
// As association is bidirectional we have to clear it in both directions.
this.removeFromResellers(lIterator.next());
}
}
/**
* Method returns attribute {@link #name}.
*
* @return {@link String} Value to which {@link #name} is set.
*/
public String getName( ) {
return name;
}
/**
* Method sets attribute {@link #name}.
*
* @param pName Value to which {@link #name} should be set.
*/
public void setName( String pName ) {
// Assign value to attribute
name = pName;
}
/**
* Method returns attribute {@link #image}.
* Image describing the product.
*
* @return byte[] Value to which {@link #image} is set.
*/
public byte[] getImage( ) {
byte[] lReturnValue;
if (image != null) {
lReturnValue = new byte[image.length];
System.arraycopy(image, 0, lReturnValue, 0, image.length);
}
else {
lReturnValue = null;
}
return lReturnValue;
}
/**
* Method sets attribute {@link #image}.
* Image describing the product.
*
* @param pImage Value to which {@link #image} should be set.
*/
public void setImage( byte[] pImage ) {
// Assign value to attribute
if (pImage != null) {
image = new byte[pImage.length];
System.arraycopy(pImage, 0, image, 0, pImage.length);
}
else {
image = null;
}
}
/**
* Method returns attribute {@link #link}.
*
* @return {@link URL} Value to which {@link #link} is set.
*/
public URL getLink( ) {
return link;
}
/**
* Method sets attribute {@link #link}.
*
* @param pLink Value to which {@link #link} should be set.
*/
public void setLink( URL pLink ) {
// Assign value to attribute
link = pLink;
}
/**
* Method returns attribute {@link #productID}.
*
* @return {@link UUID} Value to which {@link #productID} is set.
*/
public UUID getProductID( ) {
return productID;
}
/**
* Method returns association {@link #supportedCurrencies}.
*
* @return {@link Set} Value to which {@link #supportedCurrencies} is set. The method never returns null
* and the returned collection is unmodifiable.
*/
public Set getSupportedCurrencies( ) {
// Return all CurrencyCode objects as unmodifiable collection.
return Collections.unmodifiableSet(supportedCurrencies);
}
/**
* Method adds the passed object to {@link #supportedCurrencies}.
*
* @param pSupportedCurrencies Object that should be added to {@link #supportedCurrencies}. The parameter must not be
* null.
*/
public void addToSupportedCurrencies( CurrencyCode pSupportedCurrencies ) {
// Add passed object to collection of associated CurrencyCode objects.
supportedCurrencies.add(pSupportedCurrencies);
}
/**
* Method adds all passed objects to {@link #supportedCurrencies}.
*
* @param pSupportedCurrencies Collection with all objects that should be added to {@link #supportedCurrencies}. The
* parameter must not be null.
*/
public void addToSupportedCurrencies( Collection pSupportedCurrencies ) {
// Add all passed objects.
for (CurrencyCode lNextObject : pSupportedCurrencies) {
this.addToSupportedCurrencies(lNextObject);
}
}
/**
* Method removes the passed object from {@link #supportedCurrencies}.
*
* @param pSupportedCurrencies Object that should be removed from {@link #supportedCurrencies}. The parameter must not
* be null.
*/
public void removeFromSupportedCurrencies( CurrencyCode pSupportedCurrencies ) {
// Remove passed object from collection of associated CurrencyCode objects.
supportedCurrencies.remove(pSupportedCurrencies);
}
/**
* Method removes all objects from {@link #supportedCurrencies}.
*/
public void clearSupportedCurrencies( ) {
// Remove all objects from association "supportedCurrencies".
supportedCurrencies.clear();
}
/**
* Method returns association {@link #productCodes}.
*
* @return {@link Set} Value to which {@link #productCodes} is set. The method never returns null and the
* returned collection is unmodifiable.
*/
public Set getProductCodes( ) {
// Return all ProductCode objects as unmodifiable collection.
return Collections.unmodifiableSet(productCodes);
}
/**
* Method adds the passed object to {@link #productCodes}.
*
* @param pProductCodes Object that should be added to {@link #productCodes}. The parameter must not be null.
*/
public void addToProductCodes( ProductCode pProductCodes ) {
// Add passed object to collection of associated ProductCode objects.
productCodes.add(pProductCodes);
}
/**
* Method adds all passed objects to {@link #productCodes}.
*
* @param pProductCodes Collection with all objects that should be added to {@link #productCodes}. The parameter must
* not be null.
*/
public void addToProductCodes( Collection pProductCodes ) {
// Add all passed objects.
for (ProductCode lNextObject : pProductCodes) {
this.addToProductCodes(lNextObject);
}
}
/**
* Method removes the passed object from {@link #productCodes}.
*
* @param pProductCodes Object that should be removed from {@link #productCodes}. The parameter must not be null.
*/
public void removeFromProductCodes( ProductCode pProductCodes ) {
// Remove passed object from collection of associated ProductCode objects.
productCodes.remove(pProductCodes);
}
/**
* Method removes all objects from {@link #productCodes}.
*/
public void clearProductCodes( ) {
// Remove all objects from association "productCodes".
productCodes.clear();
}
/**
* Method returns attribute {@link #description}.
*
* @return {@link String} Value to which {@link #description} is set.
*/
@Deprecated
public String getDescription( ) {
return description;
}
/**
* Method sets attribute {@link #description}.
*
* @param pDescription Value to which {@link #description} should be set.
*/
@Deprecated
public void setDescription( String pDescription ) {
// Assign value to attribute
description = pDescription;
}
/**
* Method returns association {@link #sortiments}.
*
* @return {@link Set} Value to which {@link #sortiments} is set. The method never returns null and the
* returned collection is unmodifiable.
*/
public Set getSortiments( ) {
// Return all Sortiment objects as unmodifiable collection.
return Collections.unmodifiableSet(sortiments);
}
/**
* Method adds the passed object to {@link #sortiments}.
*
* @param pSortiments Object that should be added to {@link #sortiments}. The parameter must not be null.
*/
void addToSortiments( Sortiment pSortiments ) {
// Add passed object to collection of associated Sortiment objects.
sortiments.add(pSortiments);
}
/**
* Method adds all passed objects to {@link #sortiments}.
*
* @param pSortiments Collection with all objects that should be added to {@link #sortiments}. The parameter must not
* be null.
*/
void addToSortiments( Collection pSortiments ) {
// Add all passed objects.
for (Sortiment lNextObject : pSortiments) {
this.addToSortiments(lNextObject);
}
}
/**
* Method removes the passed object from {@link #sortiments}.
*
* @param pSortiments Object that should be removed from {@link #sortiments}. The parameter must not be null.
*/
void removeFromSortiments( Sortiment pSortiments ) {
// Remove passed object from collection of associated Sortiment objects.
sortiments.remove(pSortiments);
}
/**
* Method removes all objects from {@link #sortiments}.
*/
void clearSortiments( ) {
// Remove all objects from association "sortiments".
Collection lSortiments = new HashSet(sortiments);
Iterator lIterator = lSortiments.iterator();
while (lIterator.hasNext()) {
// As association is bidirectional we have to clear it in both directions.
this.removeFromSortiments(lIterator.next());
}
}
/**
* Method returns attribute {@link #uri}.
*
* @return {@link String} Value to which {@link #uri} is set.
*/
public String getUri( ) {
return uri;
}
/**
* Method sets attribute {@link #uri}.
*
* @param pUri Value to which {@link #uri} should be set.
*/
public void setUri( String pUri ) {
// Assign value to attribute
uri = pUri;
}
@Override
public int hashCode( ) {
final int lPrime = 31;
int lResult = 1;
lResult = lPrime * lResult + Objects.hashCode(resellers);
lResult = lPrime * lResult + Objects.hashCode(name);
lResult = lPrime * lResult + Arrays.hashCode(image);
lResult = lPrime * lResult + Objects.hashCode(link);
lResult = lPrime * lResult + Objects.hashCode(productID);
lResult = lPrime * lResult + Objects.hashCode(supportedCurrencies);
lResult = lPrime * lResult + Objects.hashCode(productCodes);
lResult = lPrime * lResult + Objects.hashCode(description);
lResult = lPrime * lResult + Objects.hashCode(uri);
return lResult;
}
@Override
public boolean equals( Object pObject ) {
boolean lEquals;
if (this == pObject) {
lEquals = true;
}
else if (pObject == null) {
lEquals = false;
}
else if (this.getClass() != pObject.getClass()) {
lEquals = false;
}
else {
Product lOther = (Product) pObject;
lEquals = Objects.equals(resellers, lOther.resellers) && Objects.equals(name, lOther.name)
&& Arrays.equals(image, lOther.image) && Objects.equals(link, lOther.link)
&& Objects.equals(productID, lOther.productID)
&& Objects.equals(supportedCurrencies, lOther.supportedCurrencies)
&& Objects.equals(productCodes, lOther.productCodes) && Objects.equals(description, lOther.description)
&& Objects.equals(uri, lOther.uri);
}
return lEquals;
}
/**
* Method returns a StringBuilder that can be used to create a String representation of this object. The returned
* StringBuilder also takes care about attributes of super classes.
*
* @return {@link StringBuilder} StringBuilder representing this object. The method never returns null.
*/
public StringBuilder toStringBuilder( String pIndent ) {
StringBuilder lBuilder = new StringBuilder();
lBuilder.append(pIndent);
lBuilder.append(this.getClass().getName());
lBuilder.append(System.lineSeparator());
lBuilder.append(pIndent);
lBuilder.append("resellers: ");
if (resellers != null) {
lBuilder.append(resellers.size());
lBuilder.append(" element(s)");
}
else {
lBuilder.append(" null");
}
lBuilder.append(System.lineSeparator());
if (resellers != null) {
for (Reseller lNext : resellers) {
lBuilder.append(lNext.toStringBuilder(pIndent + " "));
lBuilder.append(System.lineSeparator());
}
}
lBuilder.append(pIndent);
lBuilder.append("name: ");
lBuilder.append(name);
lBuilder.append(System.lineSeparator());
lBuilder.append(pIndent);
lBuilder.append("image: ");
if (image != null) {
lBuilder.append(Arrays.toString(image));
}
else {
lBuilder.append(" null");
}
lBuilder.append(System.lineSeparator());
lBuilder.append(pIndent);
lBuilder.append("link: ");
lBuilder.append(link);
lBuilder.append(System.lineSeparator());
lBuilder.append(pIndent);
lBuilder.append("productID: ");
lBuilder.append(productID);
lBuilder.append(System.lineSeparator());
lBuilder.append(pIndent);
lBuilder.append("supportedCurrencies: ");
if (supportedCurrencies != null) {
lBuilder.append(supportedCurrencies.size());
lBuilder.append(" element(s)");
}
else {
lBuilder.append(" null");
}
lBuilder.append(System.lineSeparator());
if (supportedCurrencies != null) {
for (CurrencyCode lNext : supportedCurrencies) {
lBuilder.append(lNext.toStringBuilder(pIndent + " "));
lBuilder.append(System.lineSeparator());
}
}
lBuilder.append(pIndent);
lBuilder.append("productCodes: ");
if (productCodes != null) {
lBuilder.append(productCodes.size());
lBuilder.append(" element(s)");
}
else {
lBuilder.append(" null");
}
lBuilder.append(System.lineSeparator());
if (productCodes != null) {
for (ProductCode lNext : productCodes) {
lBuilder.append(lNext.toStringBuilder(pIndent + " "));
lBuilder.append(System.lineSeparator());
}
}
lBuilder.append(pIndent);
lBuilder.append("description: ");
lBuilder.append(description);
lBuilder.append(System.lineSeparator());
lBuilder.append(pIndent);
lBuilder.append("uri: ");
lBuilder.append(uri);
lBuilder.append(System.lineSeparator());
return lBuilder;
}
/**
* Method creates a new String with the values of all attributes of this class. All references to other objects will
* be ignored.
*
* @return {@link String} String representation of this object. The method never returns null.
*/
@Override
public String toString( ) {
return this.toStringBuilder("").toString();
}
/**
* Method creates a new builder and initializes it with the data of this object.
*
* @return {@link Builder} New builder that can be used to create new Product objects. The method never returns null.
*/
public Builder toBuilder( ) {
return new Builder(this);
}
}