/* * #%L * BroadleafCommerce CMS Module * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ package org.broadleafcommerce.cms.field.domain; import org.broadleafcommerce.common.copy.CreateResponse; import org.broadleafcommerce.common.copy.MultiTenantCopyContext; import org.broadleafcommerce.common.enumeration.domain.DataDrivenEnumeration; import org.broadleafcommerce.common.enumeration.domain.DataDrivenEnumerationImpl; import org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyTransform; import org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyTransformMember; import org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyTransformTypes; import org.broadleafcommerce.common.extensibility.jpa.copy.ProfileEntity; import org.broadleafcommerce.common.presentation.AdminPresentation; import org.broadleafcommerce.common.presentation.AdminPresentationClass; import org.broadleafcommerce.common.presentation.PopulateToOneFieldsEnum; import org.broadleafcommerce.common.presentation.RequiredOverride; import org.broadleafcommerce.common.presentation.client.SupportedFieldType; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; /** * Created by bpolster. */ @Entity @Inheritance(strategy = InheritanceType.JOINED) @Table(name = "BLC_FLD_DEF") @Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region="blCMSElements") @DirectCopyTransform({ @DirectCopyTransformMember(templateTokens = DirectCopyTransformTypes.SANDBOX, skipOverlaps=true), @DirectCopyTransformMember(templateTokens = DirectCopyTransformTypes.MULTITENANT_SITE) }) @AdminPresentationClass(populateToOneFields = PopulateToOneFieldsEnum.FALSE) public class FieldDefinitionImpl implements FieldDefinition, ProfileEntity { private static final long serialVersionUID = 1L; @Id @GeneratedValue(generator = "FieldDefinitionId") @GenericGenerator( name="FieldDefinitionId", strategy="org.broadleafcommerce.common.persistence.IdOverrideTableGenerator", parameters = { @Parameter(name="segment_value", value="FieldDefinitionImpl"), @Parameter(name="entity_name", value="org.broadleafcommerce.cms.field.domain.FieldDefinitionImpl") } ) @Column(name = "FLD_DEF_ID") protected Long id; @Column (name = "NAME") @AdminPresentation(fieldType = SupportedFieldType.HIDDEN) protected String name; @Column (name = "FRIENDLY_NAME") @AdminPresentation(friendlyName = "FieldDefinitionImpl_friendlyName", order = 2000, prominent = true, gridOrder = 2000) protected String friendlyName; @Column (name = "FLD_TYPE") @AdminPresentation(fieldType = SupportedFieldType.BROADLEAF_ENUMERATION, broadleafEnumeration = "org.broadleafcommerce.common.presentation.client.DynamicSupportedFieldType", prominent = true, gridOrder = 3000, order = 1000, requiredOverride = RequiredOverride.REQUIRED, friendlyName = "FieldDefinitionImpl_fieldType") protected String fieldType; @Column (name = "SECURITY_LEVEL") protected String securityLevel; @Column (name = "HIDDEN_FLAG") protected Boolean hiddenFlag = false; @Column (name = "VLDTN_REGEX") protected String validationRegEx; @Column (name = "VLDTN_ERROR_MSSG_KEY") protected String validationErrorMesageKey; @Column (name = "MAX_LENGTH") protected Integer maxLength; @Column (name = "COLUMN_WIDTH") protected String columnWidth; @Column (name = "TEXT_AREA_FLAG") protected Boolean textAreaFlag = false; @Column(name = "REQUIRED_FLAG") @AdminPresentation(friendlyName = "FieldDefinitionImpl_requiredFlag", order = 4000,gridOrder = 4000, defaultValue = "false") protected Boolean requiredFlag = false; @ManyToOne(targetEntity = DataDrivenEnumerationImpl.class) @JoinColumn(name = "ENUM_ID") protected DataDrivenEnumeration dataDrivenEnumeration; @Column (name = "ALLOW_MULTIPLES") protected Boolean allowMultiples = false; @ManyToOne(targetEntity = FieldGroupImpl.class) @JoinColumn(name = "FLD_GROUP_ID") protected FieldGroup fieldGroup; @Column(name="FLD_ORDER") @AdminPresentation(friendlyName = "FieldDefinitionImpl_fieldOrder", order = 3000) protected Integer fieldOrder = 0; @Column (name = "TOOLTIP") protected String tooltip; @Column (name = "HELP_TEXT") protected String helpText; @Column (name = "HINT") protected String hint; @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } @Override public String getName() { return (name != null) ? name : ""; } @Override public void setName(String name) { this.name = name; } @Override public SupportedFieldType getFieldType() { if (fieldType == null) { return null; } if (fieldType.startsWith(SupportedFieldType.ADDITIONAL_FOREIGN_KEY.toString() + '|')) { return SupportedFieldType.ADDITIONAL_FOREIGN_KEY; } return SupportedFieldType.valueOf(fieldType); } @Override public String getAdditionalForeignKeyClass() { if (fieldType == null || !fieldType.startsWith(SupportedFieldType.ADDITIONAL_FOREIGN_KEY.toString() + '|')) { return null; } return fieldType.substring(fieldType.indexOf('|') + 1); } @Override public void setAdditionalForeignKeyClass(String className) { if (fieldType == null || !SupportedFieldType.ADDITIONAL_FOREIGN_KEY.toString().equals(fieldType)) { throw new IllegalArgumentException("Cannot set an additional foreign key class when the field type is not ADDITIONAL_FOREIGN_KEY"); } this.fieldType = SupportedFieldType.ADDITIONAL_FOREIGN_KEY.toString() + '|' + className; } @Override public void setFieldType(SupportedFieldType fieldType) { this.fieldType = fieldType!=null?fieldType.toString():null; } @Override public String getSecurityLevel() { return securityLevel; } @Override public void setSecurityLevel(String securityLevel) { this.securityLevel = securityLevel; } @Override public Boolean getHiddenFlag() { return hiddenFlag == null ? false : hiddenFlag; } @Override public void setHiddenFlag(Boolean hiddenFlag) { this.hiddenFlag = hiddenFlag; } @Override public String getValidationRegEx() { return validationRegEx; } @Override public void setValidationRegEx(String validationRegEx) { this.validationRegEx = validationRegEx; } @Override public Integer getMaxLength() { return maxLength; } @Override public void setMaxLength(Integer maxLength) { this.maxLength = maxLength; } @Override public String getColumnWidth() { return columnWidth; } @Override public void setColumnWidth(String columnWidth) { this.columnWidth = columnWidth; } @Override public Boolean getTextAreaFlag() { return textAreaFlag; } @Override public void setTextAreaFlag(Boolean textAreaFlag) { this.textAreaFlag = textAreaFlag; } @Override public Boolean getRequiredFlag() { return requiredFlag; } @Override public void setRequiredFlag(Boolean requiredFlag) { this.requiredFlag = requiredFlag; } @Override public Boolean getAllowMultiples() { return allowMultiples; } @Override public void setAllowMultiples(Boolean allowMultiples) { this.allowMultiples = allowMultiples; } @Override public String getFriendlyName() { return friendlyName; } @Override public void setFriendlyName(String friendlyName) { this.friendlyName = friendlyName; } @Override public String getValidationErrorMesageKey() { return validationErrorMesageKey; } @Override public void setValidationErrorMesageKey(String validationErrorMesageKey) { this.validationErrorMesageKey = validationErrorMesageKey; } @Override public FieldGroup getFieldGroup() { return fieldGroup; } @Override public void setFieldGroup(FieldGroup fieldGroup) { this.fieldGroup = fieldGroup; } @Override public int getFieldOrder() { if (fieldOrder == null) { return 0; } return fieldOrder; } @Override public void setFieldOrder(int fieldOrder) { this.fieldOrder = fieldOrder; } @Override public DataDrivenEnumeration getDataDrivenEnumeration() { return dataDrivenEnumeration; } @Override public void setDataDrivenEnumeration(DataDrivenEnumeration dataDrivenEnumeration) { this.dataDrivenEnumeration = dataDrivenEnumeration; } @Override public String getTooltip() { return tooltip; } @Override public void setTooltip(String tooltip) { this.tooltip = tooltip; } @Override public String getHelpText() { return helpText; } @Override public void setHelpText(String helpText) { this.helpText = helpText; } @Override public String getHint() { return hint; } @Override public void setHint(String hint) { this.hint = hint; } @Override public <G extends FieldDefinition> CreateResponse<G> createOrRetrieveCopyInstance(MultiTenantCopyContext context) throws CloneNotSupportedException { CreateResponse<G> createResponse = context.createOrRetrieveCopyInstance(this); if (createResponse.isAlreadyPopulated()) { return createResponse; } FieldDefinition cloned = createResponse.getClone(); cloned.setName(name); cloned.setFriendlyName(friendlyName); cloned.setFieldType(getFieldType()); cloned.setSecurityLevel(securityLevel); cloned.setHiddenFlag(hiddenFlag); cloned.setValidationRegEx(validationRegEx); cloned.setValidationErrorMesageKey(validationErrorMesageKey); cloned.setMaxLength(maxLength); cloned.setColumnWidth(columnWidth); cloned.setTextAreaFlag(textAreaFlag); cloned.setRequiredFlag(requiredFlag); if (dataDrivenEnumeration != null) { cloned.setDataDrivenEnumeration(dataDrivenEnumeration.createOrRetrieveCopyInstance(context).getClone()); } cloned.setAllowMultiples(allowMultiples); if (fieldGroup != null) { cloned.setFieldGroup(fieldGroup.createOrRetrieveCopyInstance(context).getClone()); } cloned.setFieldOrder(fieldOrder); cloned.setTooltip(tooltip); cloned.setHelpText(helpText); cloned.setHint(hint); return createResponse; } }