class ProductSkuSearchResultDTOImpl implements ProductSkuSearchResultDTO {

    @Override
    public ProductSkuSearchResultDTOImpl copy() {

        final ProductSkuSearchResultDTOImpl copy = new ProductSkuSearchResultDTOImpl();
        copy.setId(this.id);
        copy.setProductId(this.productId);
        copy.setCode(this.code);
        copy.setManufacturerCode(this.manufacturerCode);
        copy.setFulfilmentCentreCode(this.fulfilmentCentreCode);
        copy.setName(this.name);
        if (this.displayName != null) {
            copy.setDisplayName(this.displayName.copy());
        }
        copy.setDescription(this.description);
        if (this.displayDescription != null) {
            copy.setDisplayDescription(this.displayDescription.copy());
        }
        copy.setDefaultImage(this.defaultImage);
        copy.setCreatedTimestamp(this.createdTimestamp);
        copy.setUpdatedTimestamp(this.updatedTimestamp);
        copy.setAvailablefrom(this.availablefrom);
        copy.setAvailableto(this.availableto);
        copy.setReleaseDate(this.releaseDate);
        copy.setRestockDate(this.restockDate);
        if (this.restockNotes != null) {
            copy.setRestockNotes(this.restockNotes.copy());
        }
        copy.setAvailability(this.availability);
        if (this.qtyOnWarehouse != null) {
            copy.setQtyOnWarehouse(new HashMap<>(this.qtyOnWarehouse));
        }
        copy.setFeatured(this.featured);
        copy.setMinOrderQuantity(this.minOrderQuantity);
        copy.setMaxOrderQuantity(this.maxOrderQuantity);
        copy.setStepOrderQuantity(this.stepOrderQuantity);
        copy.setTag(this.tag);
        if (this.attributes != null) {
            copy.setAttributes(new StoredAttributesDTOImpl(this.attributes.toString()));
        }
        return copy;
    }

}