001    /**
002     * Copyright 2005-2014 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.mask;
017    
018    import org.kuali.rice.krad.datadictionary.parse.BeanTag;
019    import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
020    
021    import java.io.Serializable;
022    
023    /**
024     * The displayMask element specifies the type of masking to
025     * be used to hide the value from un-authorized users.
026     * There are three types of masking.
027     */
028    @BeanTag(name = "mask-bean")
029    public class Mask implements Serializable {
030        private static final long serialVersionUID = 4035984416568235531L;
031    
032        protected MaskFormatter maskFormatter;
033        protected Class<? extends MaskFormatter> maskFormatterClass;
034    
035        /**
036         * Masks a data value with the configured maskFormatter;
037         *
038         * @param value of the object
039         * @return string value of the masked object
040         */
041        public String maskValue(Object value) {
042            if (maskFormatter == null) {
043                if (maskFormatterClass != null) {
044                    try {
045                        maskFormatter = maskFormatterClass.newInstance();
046                    } catch (Exception e) {
047                        throw new RuntimeException(
048                                "Unable to create instance of mask formatter class: " + maskFormatterClass.getName());
049                    }
050                } else {
051                    throw new RuntimeException("Mask formatter not set for secure field.");
052                }
053            }
054    
055            return maskFormatter.maskValue(value);
056        }
057    
058        /**
059         * Gets the maskFormatter attribute.
060         *
061         * @return Returns the maskFormatter.
062         */
063        @BeanTagAttribute(name = "maskFormater", type = BeanTagAttribute.AttributeType.SINGLEBEAN)
064        public MaskFormatter getMaskFormatter() {
065            return maskFormatter;
066        }
067    
068        /**
069         * @param maskFormatter instance to be used for masking field values.
070         */
071        public void setMaskFormatter(MaskFormatter maskFormatter) {
072            this.maskFormatter = maskFormatter;
073        }
074    
075        /**
076         * Gets the maskFormatterClass attribute.
077         *
078         * @return Returns the maskFormatterClass.
079         */
080        @BeanTagAttribute(name = "maskFormatterClass", type = BeanTagAttribute.AttributeType.SINGLEBEAN)
081        public Class<? extends MaskFormatter> getMaskFormatterClass() {
082            return maskFormatterClass;
083        }
084    
085        /**
086         * @param maskFormatterClass element is used when a custom masking
087         * algorithm is desired.  This element specifies the name of a
088         * class that will perform the masking for unauthorized users.
089         */
090        public void setMaskFormatterClass(Class<? extends MaskFormatter> maskFormatterClass) {
091            this.maskFormatterClass = maskFormatterClass;
092        }
093    
094    }