001/*
002 * The Kuali Financial System, a comprehensive financial management system for higher education.
003 * 
004 * Copyright 2005-2014 The Kuali Foundation
005 * 
006 * This program is free software: you can redistribute it and/or modify
007 * it under the terms of the GNU Affero General Public License as
008 * published by the Free Software Foundation, either version 3 of the
009 * License, or (at your option) any later version.
010 * 
011 * This program is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU Affero General Public License for more details.
015 * 
016 * You should have received a copy of the GNU Affero General Public License
017 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
018 */
019package org.kuali.rice.kim.impl.jaxb;
020
021import java.io.Serializable;
022import java.util.HashMap;
023import java.util.Map;
024
025import javax.xml.bind.annotation.XmlAccessType;
026import javax.xml.bind.annotation.XmlAccessorType;
027import javax.xml.bind.annotation.XmlElement;
028import javax.xml.bind.annotation.XmlTransient;
029import javax.xml.bind.annotation.XmlType;
030import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
031
032import org.kuali.rice.core.util.jaxb.NameAndNamespacePair;
033import org.kuali.rice.core.util.jaxb.NameAndNamespacePairValidatingAdapter;
034import org.kuali.rice.core.util.jaxb.StringTrimmingAdapter;
035import org.kuali.rice.kim.api.jaxb.NameAndNamespacePairToPermTemplateIdAdapter;
036import org.kuali.rice.kim.api.jaxb.PermissionDetailListAdapter;
037import org.kuali.rice.kim.api.permission.PermissionContract;
038
039/**
040 * This class represents a &lt;permission&gt; XML element.
041 * 
042 * @author Kuali Rice Team (rice.collab@kuali.org)
043 */
044@XmlAccessorType(XmlAccessType.FIELD)
045@XmlType(name="PermissionType", propOrder={
046        "permissionNameAndNamespace", "permissionTemplateId", "permissionDescription", "active", "permissionDetails"
047})
048public class PermissionXmlDTO implements Serializable {
049    
050    private static final long serialVersionUID = 1L;
051
052    @XmlTransient
053    private String permissionId;
054    
055    @XmlElement(name="permissionName")
056    @XmlJavaTypeAdapter(NameAndNamespacePairValidatingAdapter.class)
057    private NameAndNamespacePair permissionNameAndNamespace;
058    
059    @XmlElement(name="templateName")
060    @XmlJavaTypeAdapter(NameAndNamespacePairToPermTemplateIdAdapter.class)
061    private String permissionTemplateId;
062    
063    @XmlElement(name="description")
064    @XmlJavaTypeAdapter(StringTrimmingAdapter.class)
065    private String permissionDescription;
066    
067    @XmlElement(name="active")
068    private Boolean active;
069    
070    @XmlElement(name="permissionDetails")
071    @XmlJavaTypeAdapter(PermissionDetailListAdapter.class)
072    private Map<String, String> permissionDetails;
073    
074    public PermissionXmlDTO() {
075        this.active = Boolean.TRUE;
076    }
077    
078    public PermissionXmlDTO(PermissionContract permission) {
079        this.permissionNameAndNamespace = new NameAndNamespacePair(permission.getNamespaceCode(), permission.getName());
080        this.permissionTemplateId = permission.getTemplate().getId();
081        this.permissionDescription = permission.getDescription();
082        this.active = Boolean.valueOf(permission.isActive());
083        this.permissionDetails = (permission.getAttributes() != null) ?
084                new HashMap<String, String>(permission.getAttributes()) : new HashMap<String, String>();
085    }
086    
087    /**
088     * @return the permissionId
089     */
090    public String getPermissionId() {
091        return this.permissionId;
092    }
093
094    /**
095     * @param permissionId the permissionId to set
096     */
097    public void setPermissionId(String permissionId) {
098        this.permissionId = permissionId;
099    }
100
101    /**
102     * @return the permissionNameAndNamespace
103     */
104    public NameAndNamespacePair getPermissionNameAndNamespace() {
105        return this.permissionNameAndNamespace;
106    }
107
108    /**
109     * @param permissionNameAndNamespace the permissionNameAndNamespace to set
110     */
111    public void setPermissionNameAndNamespace(NameAndNamespacePair permissionNameAndNamespace) {
112        this.permissionNameAndNamespace = permissionNameAndNamespace;
113    }
114
115    /**
116     * @return the permissionTemplateId
117     */
118    public String getPermissionTemplateId() {
119        return this.permissionTemplateId;
120    }
121
122    /**
123     * @param permissionTemplateId the permissionTemplateId to set
124     */
125    public void setPermissionTemplateId(String permissionTemplateId) {
126        this.permissionTemplateId = permissionTemplateId;
127    }
128
129    /**
130     * @return the permissionDescription
131     */
132    public String getPermissionDescription() {
133        return this.permissionDescription;
134    }
135
136    /**
137     * @param permissionDescription the permissionDescription to set
138     */
139    public void setPermissionDescription(String permissionDescription) {
140        this.permissionDescription = permissionDescription;
141    }
142
143    /**
144     * @return the active
145     */
146    public Boolean getActive() {
147        return this.active;
148    }
149
150    /**
151     * @param active the active to set
152     */
153    public void setActive(Boolean active) {
154        this.active = active;
155    }
156
157    /**
158     * @return the permissionDetails
159     */
160    public Map<String, String> getPermissionDetails() {
161        return this.permissionDetails;
162    }
163
164    /**
165     * @param permissionDetails the permissionDetails to set
166     */
167    public void setPermissionDetails(Map<String, String> permissionDetails) {
168        this.permissionDetails = permissionDetails;
169    }
170
171    /**
172     * Retrieves the permission's name from the permission-name-and-namespace combo.
173     * 
174     * @return The name of the permission, or null if the permission-name-and-namespace combo is null.
175     */
176    public String getPermissionName() {
177        return (permissionNameAndNamespace != null) ? permissionNameAndNamespace.getName() : null;
178    }
179
180    /**
181     * Retrieves the permission's namespace code from the permission-name-and-namespace combo.
182     * 
183     * @return The namespace code of the permission, or null if the permission-name-and-namespace combo is null.
184     */
185    public String getNamespaceCode() {
186        return (permissionNameAndNamespace != null) ? permissionNameAndNamespace.getNamespaceCode() : null;
187    }
188}