org.kuali.rice.kns.datadictionary.control.ControlDefinitionBase.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.rice.kns.datadictionary.control.ControlDefinitionBase.java

Source

/**
 * Copyright 2005-2014 The Kuali Foundation
 *
 * Licensed under the Educational Community 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.opensource.org/licenses/ecl2.php
 *
 * 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.
 */
package org.kuali.rice.kns.datadictionary.control;

import org.apache.commons.lang.ClassUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.kuali.rice.core.api.util.ClassLoaderUtils;
import org.kuali.rice.krad.bo.BusinessObject;
import org.kuali.rice.krad.datadictionary.DataDictionaryDefinitionBase;
import org.kuali.rice.krad.datadictionary.control.ControlDefinition;
import org.kuali.rice.krad.datadictionary.exception.ClassValidationException;
import org.kuali.rice.krad.datadictionary.exception.CompletionException;
import org.kuali.rice.krad.keyvalues.KeyValuesFinder;

/**
 * A single HTML control definition in the DataDictionary, which contains information relating to the HTML control used to realize a
 * specific attribute. All types of controls are represented by an instance of this class; you have to call one of the is* methods
 * to figure out which of the other accessors should return useful values.
 *
 * @deprecated Only used by KNS classes, use KRAD.
 */
@Deprecated
public abstract class ControlDefinitionBase extends DataDictionaryDefinitionBase implements ControlDefinition {
    private static final long serialVersionUID = 4372435175782501152L;

    protected boolean datePicker;
    protected boolean expandedTextArea;
    protected String script;
    protected String valuesFinderClass;
    protected String businessObjectClass;
    protected String keyAttribute;
    protected String labelAttribute;
    protected Boolean includeBlankRow;
    protected Boolean includeKeyInLabel;
    protected Integer size;
    protected Integer rows;
    protected Integer cols;
    protected boolean ranged;

    public ControlDefinitionBase() {
        ranged = true;
    }

    public boolean isDatePicker() {
        return datePicker;
    }

    /** Whether this control should have a date picker button next to the field.
     *  Valid for text fields.
     *  
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#setDatePicker(boolean)
     */
    public void setDatePicker(boolean datePicker) {
        this.datePicker = datePicker;
    }

    public boolean isExpandedTextArea() {
        return expandedTextArea;
    }

    /** Whether this control should have a expanded text area button next to the field.
     *  Valid for textarea fields.
     *  
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#setExpandedTextArea(boolean)
     */
    public void setExpandedTextArea(boolean eTextArea) {
        this.expandedTextArea = eTextArea;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isCheckbox()
     */
    public boolean isCheckbox() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isHidden()
     */
    public boolean isHidden() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isRadio()
     */
    public boolean isRadio() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isSelect()
     */
    public boolean isSelect() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isSelect()
     */
    public boolean isMultiselect() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isText()
     */
    public boolean isText() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isTextarea()
     */
    public boolean isTextarea() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isCurrency()
     */
    public boolean isCurrency() {
        return false;
    }

    /**
     *
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isKualiUser()
     */
    public boolean isKualiUser() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isWorkgroup()
     */
    public boolean isWorkflowWorkgroup() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isFile()
     */
    public boolean isFile() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isLookupHidden()
     */
    public boolean isLookupHidden() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isLookupReadonly()
     */
    public boolean isLookupReadonly() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isButton()
     */
    public boolean isButton() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isLink()
     */
    public boolean isLink() {
        return false;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#setKeyValuesFinder(java.lang.String)
     */
    public void setValuesFinderClass(String valuesFinderClass) {
        if (valuesFinderClass == null) {
            throw new IllegalArgumentException("invalid (null) valuesFinderClass");
        }

        this.valuesFinderClass = valuesFinderClass;
    }

    /**
     * @return the dataObjectClass
     */
    public String getBusinessObjectClass() {
        return this.businessObjectClass;
    }

    /**
     * Used by a PersistableBusinessObjectValuesFinder to automatically query and display a list
     * of business objects as part of a select list or set of radio buttons.
     * 
     * The keyAttribute, labelAttribute, and includeKeyInLabel are used with this property.
     * 
     * @param businessObjectClass the dataObjectClass to set
     */
    public void setBusinessObjectClass(String businessObjectClass) {
        if (businessObjectClass == null) {
            throw new IllegalArgumentException("invalid (null) dataObjectClass");
        }

        this.businessObjectClass = businessObjectClass;
    }

    /**
     * @return the includeBlankRow
     */
    public Boolean getIncludeBlankRow() {
        return this.includeBlankRow;
    }

    /**
     * @return the includeBlankRow
     */
    public void setIncludeBlankRow(Boolean includeBlankRow) {
        this.includeBlankRow = includeBlankRow;
    }

    /**
     * @return the includeKeyInLabel
     */
    public Boolean getIncludeKeyInLabel() {
        return this.includeKeyInLabel;
    }

    /**
     * Whether to include the key in the label for select lists and radio buttons.
     */
    public void setIncludeKeyInLabel(Boolean includeKeyInLabel) {
        this.includeKeyInLabel = includeKeyInLabel;
    }

    /**
     * @return the keyAttribute
     */
    public String getKeyAttribute() {
        return this.keyAttribute;
    }

    /**
     * Attribute of the given dataObjectClass to use as the value of a select list
     * or set of radio buttons. 
     */
    public void setKeyAttribute(String keyAttribute) {
        this.keyAttribute = keyAttribute;
    }

    /**
     * @return the labelAttribute
     */
    public String getLabelAttribute() {
        return this.labelAttribute;
    }

    /**
     * Attribute of the given dataObjectClass to use as the displayed label on a select list
     * or set of radio buttons. 
     */
    public void setLabelAttribute(String labelAttribute) {
        this.labelAttribute = labelAttribute;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#getKeyValuesFinder()
     */
    public String getValuesFinderClass() {
        return valuesFinderClass;
    }

    /**
     * Size of a text control.
     * 
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#setSize(int)
     */
    public void setSize(Integer size) {
        this.size = size;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#getSize()
     */
    public Integer getSize() {
        return size;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#hasScript()
     */
    public boolean hasScript() {
        return false;
    }

    /**
     * Number of rows to display on a text-area widget.
     * 
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#setRows(int)
     */
    public void setRows(Integer rows) {
        this.rows = rows;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#getRows()
     */
    public Integer getRows() {
        return rows;
    }

    /**
     * Number of columns to display on a text-area widget.
     * 
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#setCols(int)
     */
    public void setCols(Integer cols) {
        this.cols = cols;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#getCols()
     */
    public Integer getCols() {
        return cols;
    }

    /**
     * Directly validate simple fields.
     *
     * @see org.kuali.rice.krad.datadictionary.DataDictionaryDefinition#completeValidation(java.lang.Class, java.lang.Object)
     */
    public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass) {
        if (!isCheckbox() && !isHidden() && !isRadio() && !isSelect() && !isMultiselect() && !isText()
                && !isTextarea() && !isCurrency() && !isKualiUser() && !isLookupHidden() && !isLookupReadonly()
                && !isWorkflowWorkgroup() && !isFile() && !isButton() && !isLink()) {
            throw new CompletionException("error validating " + rootBusinessObjectClass.getName()
                    + " control: unknown control type in control definition (" + "" + ")");
        }
        if (valuesFinderClass != null) {
            try {
                Class valuesFinderClassObject = ClassUtils.getClass(ClassLoaderUtils.getDefaultClassLoader(),
                        getValuesFinderClass());
                if (!KeyValuesFinder.class.isAssignableFrom(valuesFinderClassObject)) {
                    throw new ClassValidationException(
                            "valuesFinderClass is not a valid instance of " + KeyValuesFinder.class.getName()
                                    + " instead was: " + valuesFinderClassObject.getName());
                }
            } catch (ClassNotFoundException e) {
                throw new ClassValidationException(
                        "valuesFinderClass could not be found: " + getValuesFinderClass(), e);
            }
        }
        if (businessObjectClass != null) {
            try {
                Class businessObjectClassObject = ClassUtils.getClass(ClassLoaderUtils.getDefaultClassLoader(),
                        getBusinessObjectClass());
                if (!BusinessObject.class.isAssignableFrom(businessObjectClassObject)) {
                    throw new ClassValidationException(
                            "dataObjectClass is not a valid instance of " + BusinessObject.class.getName()
                                    + " instead was: " + businessObjectClassObject.getName());
                }
            } catch (ClassNotFoundException e) {
                throw new ClassValidationException(
                        "dataObjectClass could not be found: " + getBusinessObjectClass(), e);
            }
        }
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#getScript()
     */
    public String getScript() {
        return script;
    }

    /**
     * JavaScript script to run when a select control's value is changed.
     * 
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#setScript()
     */
    public void setScript(String script) {
        this.script = script;
    }

    /**
     * @see org.kuali.rice.krad.datadictionary.control.ControlDefinition#isRanged()
     */
    public boolean isRanged() {
        return this.ranged;
    }

    /**
     * Sets the control as a ranged (from and to) date field if true, or a single date field if false
     * 
     * @param ranged boolean true for a ranged control, false for a single date field
     */
    public void setRanged(boolean ranged) {
        this.ranged = ranged;
    }

    /**
      * @see java.lang.Object#equals(Object)
      */
    public boolean equals(Object object) {
        if (!(object instanceof ControlDefinitionBase)) {
            return false;
        }
        ControlDefinitionBase rhs = (ControlDefinitionBase) object;
        return new EqualsBuilder().append(this.cols, rhs.cols)
                .append(this.businessObjectClass, rhs.businessObjectClass)
                .append(this.valuesFinderClass, rhs.valuesFinderClass).append(this.rows, rhs.rows)
                .append(this.script, rhs.script).append(this.size, rhs.size).append(this.datePicker, rhs.datePicker)
                .append(this.ranged, rhs.ranged).append(this.labelAttribute, rhs.labelAttribute)
                .append(this.includeKeyInLabel, rhs.includeKeyInLabel).append(this.keyAttribute, rhs.keyAttribute)
                .isEquals();
    }

}