001/**
002 * Copyright 2005-2016 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.krad.datadictionary;
017
018import org.apache.commons.lang.StringUtils;
019import org.kuali.rice.krad.datadictionary.validation.capability.ExistenceConstrainable;
020
021/**
022 * Common class for attribute definitions in the DataDictionary, which contains
023 * information relating to the display, validation, and general maintenance of a
024 * specific attribute of an entry. An attribute can be a simple or complex attribute.
025 *  
026 */
027public abstract class AttributeDefinitionBase extends DataDictionaryDefinitionBase implements ExistenceConstrainable{
028
029        protected String name;
030
031        protected String label;
032        protected String shortLabel;
033        protected String displayLabelAttribute;
034
035        protected String messageKey;
036    protected String constraintText;
037        protected String summary;
038        protected String description;
039        
040        protected Boolean required = Boolean.FALSE;
041        
042        public String getName() {
043                return name;
044        }
045
046        /*
047         * name = name of attribute
048         */
049        public void setName(String name) {
050                if (StringUtils.isBlank(name)) {
051                        throw new IllegalArgumentException("invalid (blank) name");
052                }
053                this.name = name;
054        }
055
056        public String getLabel() {
057                return label;
058        }
059
060        /**
061         * The label element is the field or collection name that will be shown on
062         * inquiry and maintenance screens. This will be overridden by presence of
063         * displayLabelAttribute element.
064         */
065        public void setLabel(String label) {
066                if (StringUtils.isBlank(label)) {
067                        throw new IllegalArgumentException("invalid (blank) label");
068                }
069                this.label = label;
070        }
071
072        /**
073         * @return the shortLabel, or the label if no shortLabel has been set
074         */
075        public String getShortLabel() {
076                return (shortLabel != null) ? shortLabel : getLabel();
077        }
078
079        /**
080         * @return the shortLabel directly, without substituting in the label
081         */
082        protected String getDirectShortLabel() {
083                return shortLabel;
084        }
085
086        /**
087         * The shortLabel element is the field or collection name that will be used
088         * in applications when a shorter name (than the label element) is required.
089         * This will be overridden by presence of displayLabelAttribute element.
090         */
091        public void setShortLabel(String shortLabel) {
092                if (StringUtils.isBlank(shortLabel)) {
093                        throw new IllegalArgumentException("invalid (blank) shortLabel");
094                }
095                this.shortLabel = shortLabel;
096        }
097        
098        /**
099         * The required element allows values of "true" or "false". A value of
100         * "true" indicates that a value must be entered for this business object
101         * when creating or editing a new business object.
102         */
103        public void setRequired(Boolean required) {
104                this.required = required;
105        }
106
107        @Override
108        public Boolean isRequired() {
109                return this.required;
110        }
111
112    /**
113     * Text that display a restriction on the value a field can hold
114     *
115     * <p>
116     * For example when the value must be a valid format (phone number, email), certain length, min/max value and
117     * so on this text can be used to indicate the constraint to the user. Generally displays with the control so
118     * it is visible when the user tabs to the field
119     * </p>
120     *
121     * @return String text to display for the constraint message
122     */
123    public String getConstraintText() {
124        return this.constraintText;
125    }
126
127    /**
128     * Setter for the constraint message text
129     *
130     * @param constraintText
131     */
132    public void setConstraintText(String constraintText) {
133        this.constraintText = constraintText;
134    }
135        
136        public String getSummary() {
137                return summary;
138        }
139
140        /**
141         * The summary element is used to provide a short description of the
142         * attribute or collection. This is designed to be used for help purposes.
143         */
144        public void setSummary(String summary) {
145                this.summary = summary;
146        }
147
148        public String getDescription() {
149                return description;
150        }
151
152        /**
153         * The description element is used to provide a long description of the
154         * attribute or collection. This is designed to be used for help purposes.
155         */
156        public void setDescription(String description) {
157                this.description = description;
158        }
159        
160        public String getDisplayLabelAttribute() {
161                return displayLabelAttribute;
162        }
163
164        /**
165         * The displayLabelAttribute element is used to indicate that the label and
166         * short label should be obtained from another attribute.
167         * 
168         * The label element and short label element defined for this attribute will
169         * be overridden. Instead, the label and short label values will be obtained
170         * by referencing the corresponding values from the attribute indicated by
171         * this element.
172         */
173        public void setDisplayLabelAttribute(String displayLabelAttribute) {
174                this.displayLabelAttribute = displayLabelAttribute;
175        }
176
177}