001 /**
002 * Copyright 2005-2013 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 */
016 package org.kuali.rice.krad.datadictionary;
017
018 import org.kuali.rice.krad.datadictionary.exception.AttributeValidationException;
019 import org.kuali.rice.krad.datadictionary.mask.MaskFormatter;
020 import org.kuali.rice.krad.datadictionary.parse.BeanTag;
021 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
022 import org.kuali.rice.krad.datadictionary.uif.UifDictionaryBeanBase;
023 import org.kuali.rice.krad.datadictionary.validator.ValidationTrace;
024
025 /**
026 * Defines a set of restrictions that are possible on an attribute
027 *
028 * @author Kuali Rice Team (rice.collab@kuali.org)
029 */
030 @BeanTag(name = "attributeSecurity-bean")
031 public class AttributeSecurity extends UifDictionaryBeanBase {
032 private static final long serialVersionUID = -7923499408946975318L;
033
034 private boolean readOnly = false;
035 private boolean hide = false;
036 private boolean mask = false;
037 private boolean partialMask = false;
038
039 private MaskFormatter partialMaskFormatter;
040 private MaskFormatter maskFormatter;
041
042 /**
043 * @return the readOnly
044 */
045 @BeanTagAttribute(name = "readOnly")
046 public boolean isReadOnly() {
047 return this.readOnly;
048 }
049
050 /**
051 * @param readOnly the readOnly to set
052 */
053 public void setReadOnly(boolean readOnly) {
054 this.readOnly = readOnly;
055 }
056
057 /**
058 * @return the hide
059 */
060 @BeanTagAttribute(name = "hide")
061 public boolean isHide() {
062 return this.hide;
063 }
064
065 /**
066 * @param hide the hide to set
067 */
068 public void setHide(boolean hide) {
069 this.hide = hide;
070 }
071
072 /**
073 * @return the mask
074 */
075 @BeanTagAttribute(name = "mask")
076 public boolean isMask() {
077 return this.mask;
078 }
079
080 /**
081 * @param mask the mask to set
082 */
083 public void setMask(boolean mask) {
084 this.mask = mask;
085 }
086
087 /**
088 * @return the partialMask
089 */
090 @BeanTagAttribute(name = "partialMask")
091 public boolean isPartialMask() {
092 return this.partialMask;
093 }
094
095 /**
096 * @param partialMask the partialMask to set
097 */
098 public void setPartialMask(boolean partialMask) {
099 this.partialMask = partialMask;
100 }
101
102 /**
103 * @return the maskFormatter
104 */
105 @BeanTagAttribute(name = "maskFormatter", type = BeanTagAttribute.AttributeType.SINGLEBEAN)
106 public MaskFormatter getMaskFormatter() {
107 return this.maskFormatter;
108 }
109
110 /**
111 * @param maskFormatter the maskFormatter to set
112 */
113 public void setMaskFormatter(MaskFormatter maskFormatter) {
114 this.maskFormatter = maskFormatter;
115 }
116
117 /**
118 * @return the partialMaskFormatter
119 */
120 @BeanTagAttribute(name = "partialMaskFormatter", type = BeanTagAttribute.AttributeType.SINGLEBEAN)
121 public MaskFormatter getPartialMaskFormatter() {
122 return this.partialMaskFormatter;
123 }
124
125 /**
126 * @param partialMaskFormatter the partialMaskFormatter to set
127 */
128 public void setPartialMaskFormatter(MaskFormatter partialMaskFormatter) {
129 this.partialMaskFormatter = partialMaskFormatter;
130 }
131
132 /**
133 * This overridden method ...
134 *
135 * @see org.kuali.rice.krad.datadictionary.DataDictionaryDefinition#completeValidation(java.lang.Class,
136 * java.lang.Class)
137 */
138 public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass) {
139
140 if (mask && maskFormatter == null) {
141 throw new AttributeValidationException("MaskFormatter is required");
142 }
143 if (partialMask && partialMaskFormatter == null) {
144 throw new AttributeValidationException("PartialMaskFormatter is required");
145 }
146 }
147
148 /**
149 * Directly validate simple fields
150 *
151 * @see org.kuali.rice.krad.datadictionary.DataDictionaryEntry#completeValidation(org.kuali.rice.krad.datadictionary.validator.ValidationTrace)
152 */
153 public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass,
154 ValidationTrace tracer) {
155 tracer.addBean(this.getClass().getSimpleName(), ValidationTrace.NO_BEAN_ID);
156
157 if (mask && maskFormatter == null) {
158 String currentValues[] = {"mask = " + mask, "maskFormatter = " + maskFormatter};
159 tracer.createError("MaskFormatter is required", currentValues);
160 }
161 if (partialMask && partialMaskFormatter == null) {
162 String currentValues[] = {"partialMask = " + partialMask, "partialMaskFormatter = " + partialMaskFormatter};
163 tracer.createError("PartialMaskFormatter is required", currentValues);
164 }
165
166 }
167
168 /**
169 * Returns whether any of the restrictions defined in this class are true.
170 */
171 public boolean hasAnyRestriction() {
172 return readOnly || mask || partialMask || hide;
173 }
174
175 /**
176 * Returns whether any of the restrictions defined in this class indicate that the attribute value potentially
177 * needs
178 * to be not shown to the user (i.e. masked, partial mask, hide). Note that readonly does not fall in this
179 * category.
180 *
181 * @return
182 */
183 public boolean hasRestrictionThatRemovesValueFromUI() {
184 return mask || partialMask || hide;
185 }
186 }