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.kim.impl.permission;
017
018import java.util.HashMap;
019import java.util.Iterator;
020import java.util.List;
021import java.util.Map;
022
023import javax.persistence.Column;
024import javax.persistence.Entity;
025import javax.persistence.Id;
026import javax.persistence.Table;
027import javax.persistence.Transient;
028import javax.persistence.Convert;
029
030import org.apache.commons.lang.StringUtils;
031import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
032import org.kuali.rice.krad.data.jpa.converters.BooleanYNConverter;
033
034@Entity
035@Table(name = "KRIM_PERM_T")
036public class GenericPermissionBo extends PersistableBusinessObjectBase {
037
038    private static final long serialVersionUID = 1L;
039
040    @Id
041    @Column(name = "PERM_ID")
042    protected String id;
043
044    @Column(name = "NMSPC_CD")
045    protected String namespaceCode;
046
047    @Column(name = "NM")
048    protected String name;
049
050    @Column(name = "DESC_TXT")
051    protected String description;
052
053    @Column(name = "ACTV_IND")
054    @Convert(converter = BooleanYNConverter.class)
055    protected boolean active;
056
057    @Column(name = "PERM_TMPL_ID")
058    protected String templateId;
059
060    protected String detailValues;
061
062    protected Map<String, String> details;
063
064    protected PermissionTemplateBo template = new PermissionTemplateBo();
065
066    protected List<PermissionAttributeBo> attributeDetails;
067
068    /**
069     * This constructs a ...
070     *
071     */
072    public GenericPermissionBo() {
073    }
074
075    public GenericPermissionBo(PermissionBo perm) {
076        loadFromPermission(perm);
077    }
078
079    public void loadFromPermission(PermissionBo perm) {
080        setId(perm.getId());
081        setNamespaceCode(perm.getNamespaceCode());
082        setTemplate(perm.getTemplate());
083        setAttributeDetails(perm.getAttributeDetails());
084        setDetailValues(perm.getDetailObjectsValues());
085        setName(perm.getName());
086        setTemplateId(perm.getTemplateId());
087        setDescription(perm.getDescription());
088        setActive(perm.isActive());
089        setDetails(perm.getAttributes());
090        setVersionNumber(perm.getVersionNumber());
091        setObjectId(perm.getObjectId());
092    }
093
094    public String getDetailValues() {
095        /*StringBuffer sb = new StringBuffer();
096        if ( details != null ) {
097            Iterator<String> keyIter = details.keySet().iterator();
098            while ( keyIter.hasNext() ) {
099                String key = keyIter.next();
100                sb.append( key ).append( '=' ).append( details.get( key ) );
101                if ( keyIter.hasNext() ) {
102                    sb.append( '\n' );
103                }
104            }
105        }
106        return sb.toString();*/
107        return detailValues;
108    }
109
110    public void setDetailValues(String detailValues) {
111        this.detailValues = detailValues;
112    }
113
114    public void setDetailValues(Map<String, String> detailsAttribs) {
115        StringBuffer sb = new StringBuffer();
116        if (detailsAttribs != null) {
117            Iterator<String> keyIter = detailsAttribs.keySet().iterator();
118            while (keyIter.hasNext()) {
119                String key = keyIter.next();
120                sb.append(key).append('=').append(detailsAttribs.get(key));
121                if (keyIter.hasNext()) {
122                    sb.append('\n');
123                }
124            }
125        }
126        detailValues = sb.toString();
127    }
128
129    public boolean isActive() {
130        return active;
131    }
132
133    public void setActive(boolean active) {
134        this.active = active;
135    }
136
137    public String getDescription() {
138        return description;
139    }
140
141    public String getId() {
142        return id;
143    }
144
145    public String getName() {
146        return name;
147    }
148
149    public PermissionTemplateBo getTemplate() {
150        return template;
151    }
152
153    public void setDescription(String permissionDescription) {
154        this.description = permissionDescription;
155    }
156
157    public void setName(String permissionName) {
158        this.name = permissionName;
159    }
160
161    public void setDetails(Map<String, String> details) {
162        this.details = details;
163        setDetailValues(details);
164    }
165
166    public String getTemplateId() {
167        return this.templateId;
168    }
169
170    public void setTemplateId(String templateId) {
171        this.templateId = templateId;
172    }
173
174    public void setTemplate(PermissionTemplateBo template) {
175        this.template = template;
176    }
177
178    public Map<String, String> getDetails() {
179        String detailValuesTemp = this.detailValues;
180        Map<String, String> detailsTemp = new HashMap<String, String>();
181        if (detailValuesTemp != null) {
182            // ensure that all line delimiters are single linefeeds
183            detailValuesTemp = detailValuesTemp.replace("\r\n", "\n");
184            detailValuesTemp = detailValuesTemp.replace('\r', '\n');
185            if (StringUtils.isNotBlank(detailValuesTemp)) {
186                String[] values = detailValuesTemp.split("\n");
187                for (String attrib : values) {
188                    if (attrib.indexOf('=') != -1) {
189                        String[] keyValueArray = attrib.split("=", 2);
190                        detailsTemp.put(keyValueArray[0].trim(), keyValueArray[1].trim());
191                    }
192                }
193            }
194        }
195        this.details = detailsTemp;
196        return details;
197    }
198
199    public String getNamespaceCode() {
200        return this.namespaceCode;
201    }
202
203    public void setNamespaceCode(String namespaceCode) {
204        this.namespaceCode = namespaceCode;
205    }
206
207    public void setId(String id) {
208        this.id = id;
209    }
210
211    public List<PermissionAttributeBo> getAttributeDetails() {
212        return attributeDetails;
213    }
214
215    public void setAttributeDetails(List<PermissionAttributeBo> attributeDetails) {
216        this.attributeDetails = attributeDetails;
217    }
218
219    @Override
220    public void refreshNonUpdateableReferences() {
221    }
222
223    @Override
224    public void refreshReferenceObject(String referenceObjectName) {
225    }
226
227    @Override
228    protected void prePersist() {
229        throw new UnsupportedOperationException("This object should never be persisted.");
230    }
231
232    @Override
233    protected void preUpdate() {
234        throw new UnsupportedOperationException("This object should never be persisted.");
235    }
236
237    @Override
238    protected void preRemove() {
239        throw new UnsupportedOperationException("This object should never be persisted.");
240    }
241
242    public static PermissionBo toPermissionBo(GenericPermissionBo bo) {
243        PermissionBo permission = new PermissionBo();
244        permission.setTemplateId(bo.getTemplateId());
245        permission.setId(bo.getId());
246        permission.setTemplate(bo.getTemplate());
247        permission.setActive(bo.isActive());
248        permission.setDescription(bo.getDescription());
249        permission.setName(bo.getName());
250        permission.setNamespaceCode(bo.namespaceCode);
251        permission.setAttributeDetails(bo.getAttributeDetails());
252        permission.setAttributes(bo.getDetails());
253        permission.setVersionNumber(bo.versionNumber);
254        permission.setObjectId(bo.getObjectId());
255        return permission;
256    }
257}