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.kew.export;
017    
018    import java.util.ArrayList;
019    import java.util.List;
020    
021    import javax.xml.namespace.QName;
022    
023    import org.kuali.rice.core.api.impex.ExportDataSet;
024    import org.kuali.rice.kew.doctype.bo.DocumentType;
025    import org.kuali.rice.kew.rule.RuleBaseValues;
026    import org.kuali.rice.kew.rule.RuleDelegationBo;
027    import org.kuali.rice.kew.rule.bo.RuleAttribute;
028    import org.kuali.rice.kew.rule.bo.RuleTemplateBo;
029    import org.kuali.rice.kew.service.KEWServiceLocator;
030    import org.kuali.rice.kim.api.group.Group;
031    
032    /**
033     * Defines a set of data to export from Kuali Enterprise Workflow.
034     * 
035     * @author Kuali Rice Team (rice.collab@kuali.org)
036     *
037     */
038    public class KewExportDataSet {
039    
040            public static final QName DOCUMENT_TYPES = new QName("KEW", "documentTypes");
041            public static final QName GROUPS = new QName("KEW", "groups");
042            public static final QName RULE_ATTRIBUTES = new QName("KEW", "ruleAttributes");
043            public static final QName RULE_TEMPLATES = new QName("KEW", "ruleTemplates");
044            public static final QName RULES = new QName("KEW", "rules");
045            public static final QName RULE_DELEGATIONS = new QName("KEW", "ruleDelegations");
046            public static final QName HELP = new QName("KEW", "help");
047            public static final QName EDOCLITES = new QName("KEW", "eDocLites");
048            
049            private List<DocumentType> documentTypes = new ArrayList<DocumentType>();
050            private List<Group> groups = new ArrayList<Group>();
051            private List<RuleAttribute> ruleAttributes = new ArrayList<RuleAttribute>();
052            private List<RuleTemplateBo> ruleTemplates = new ArrayList<RuleTemplateBo>();
053            private List<RuleBaseValues> rules = new ArrayList<RuleBaseValues>();
054            private List<RuleDelegationBo> ruleDelegations = new ArrayList<RuleDelegationBo>();
055    
056            public List<DocumentType> getDocumentTypes() {
057                    return documentTypes;
058            }
059    
060            public List<RuleAttribute> getRuleAttributes() {
061                    return ruleAttributes;
062            }
063    
064            public List<RuleBaseValues> getRules() {
065                    return rules;
066            }
067    
068            public List<RuleTemplateBo> getRuleTemplates() {
069                    return ruleTemplates;
070            }
071    
072            public List<Group> getGroups() {
073                    return this.groups;
074            }
075    
076            public void setGroups(List<Group> groups) {
077                    this.groups = groups;
078            }
079    
080            public List<RuleDelegationBo> getRuleDelegations() {
081                    return this.ruleDelegations;
082            }
083            
084            public void populateExportDataSet(ExportDataSet exportDataSet) {
085                    if (documentTypes != null && !documentTypes.isEmpty()) {
086                /* 
087                 * this is a terrible hack to fix a problem where not everything for document type is getting exported 
088                 * This is caused because the KEWModuleService creates an EBO from the api DocumentTypeService, which doesn't contain
089                 * all the data needed for exporting.
090                 * 
091                 * Sooo... we put this ugly code here until we can hope to remove EBOs from this project, or create a DocumentType dto class that 
092                 * contains the information needed
093                 */
094                List<DocumentType> correctDocumentTypes = new ArrayList<DocumentType>();
095                for (DocumentType docType : documentTypes) {
096                    correctDocumentTypes.add(KEWServiceLocator.getDocumentTypeService().findById(docType.getDocumentTypeId()));
097                }
098                            exportDataSet.addDataSet(DOCUMENT_TYPES, correctDocumentTypes);
099                    }
100                    if (groups != null && !groups.isEmpty()) {
101                            exportDataSet.addDataSet(GROUPS, groups);
102                    }
103                    if (ruleAttributes != null && !ruleAttributes.isEmpty()) {
104                            exportDataSet.addDataSet(RULE_ATTRIBUTES, ruleAttributes);
105                    }
106                    if (ruleTemplates != null && !ruleTemplates.isEmpty()) {
107                            exportDataSet.addDataSet(RULE_TEMPLATES, ruleTemplates);
108                    }
109                    if (rules != null && !rules.isEmpty()) {
110                            exportDataSet.addDataSet(RULES, rules);
111                    }
112                    if (ruleDelegations != null && !ruleDelegations.isEmpty()) {
113                            exportDataSet.addDataSet(RULE_DELEGATIONS, ruleDelegations);
114                    }
115            }
116            
117            public ExportDataSet createExportDataSet() {
118                    ExportDataSet exportDataSet = new ExportDataSet();
119                    populateExportDataSet(exportDataSet);
120                    return exportDataSet;
121            }
122            
123            public static KewExportDataSet fromExportDataSet(ExportDataSet exportDataSet) {
124                    KewExportDataSet kewExportDataSet = new KewExportDataSet();
125                    
126                    List<DocumentType> documentTypes = (List<DocumentType>)exportDataSet.getDataSets().get(DOCUMENT_TYPES);
127                    if (documentTypes != null) {
128                            kewExportDataSet.getDocumentTypes().addAll(documentTypes);
129                    }
130                    List<Group> groups = (List<Group>)exportDataSet.getDataSets().get(GROUPS);
131                    if (groups != null) {
132                            kewExportDataSet.getGroups().addAll(groups);
133                    }
134                    List<RuleAttribute> ruleAttributes = (List<RuleAttribute>)exportDataSet.getDataSets().get(RULE_ATTRIBUTES);
135                    if (ruleAttributes != null) {
136                            kewExportDataSet.getRuleAttributes().addAll(ruleAttributes);
137                    }
138                    List<RuleTemplateBo> ruleTemplates = (List<RuleTemplateBo>)exportDataSet.getDataSets().get(RULE_TEMPLATES);
139                    if (ruleTemplates != null) {
140                            kewExportDataSet.getRuleTemplates().addAll(ruleTemplates);
141                    }
142                    List<RuleBaseValues> rules = (List<RuleBaseValues>)exportDataSet.getDataSets().get(RULES);
143                    if (rules != null) {
144                            kewExportDataSet.getRules().addAll(rules);
145                    }
146                    List<RuleDelegationBo> ruleDelegations = (List<RuleDelegationBo>)exportDataSet.getDataSets().get(RULE_DELEGATIONS);
147                    if (ruleDelegations != null) {
148                            kewExportDataSet.getRuleDelegations().addAll(ruleDelegations);
149                    }
150                    
151                    return kewExportDataSet;
152            }
153            
154    }