View Javadoc
1   /**
2    * Copyright 2005-2014 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kew.export;
17  
18  import org.kuali.rice.core.api.CoreApiServiceLocator;
19  import org.kuali.rice.core.api.impex.ExportDataSet;
20  import org.kuali.rice.kew.doctype.bo.DocumentType;
21  import org.kuali.rice.kew.rule.RuleBaseValues;
22  import org.kuali.rice.kew.rule.RuleDelegationBo;
23  import org.kuali.rice.kew.rule.bo.RuleAttribute;
24  import org.kuali.rice.kew.rule.bo.RuleTemplateBo;
25  import org.kuali.rice.kim.api.group.Group;
26  import org.kuali.rice.kim.impl.group.GroupBo;
27  import org.kuali.rice.krad.bo.Exporter;
28  import org.kuali.rice.krad.exception.ExportNotSupportedException;
29  import org.kuali.rice.krad.util.KRADConstants;
30  
31  import java.io.IOException;
32  import java.io.OutputStream;
33  import java.util.ArrayList;
34  import java.util.List;
35  
36  /**
37   * The DataExporter allows for exporting of KEW BusinessObjects to various
38   * supported formats. The current implementation supports only XML export. This
39   * process is initiated from the KNS screens (lookups and inquiries) and this
40   * implementation leverages the existing XmlExporterService which is part of KEW
41   * and which was used to do exports before KEW was converted to use the KNS.
42   * 
43   * @author Kuali Rice Team (rice.collab@kuali.org)
44   */
45  public class DataExporter implements Exporter {
46  
47  	private List<String> supportedFormats = new ArrayList<String>();
48  
49  	public DataExporter() {
50  		supportedFormats.add(KRADConstants.XML_FORMAT);
51  	}
52  
53  	/**
54  	 * @see org.kuali.rice.krad.bo.Exporter#getSupportedFormats(java.lang.Class)
55  	 */
56  	@Override
57  	public List<String> getSupportedFormats(Class<?> dataObjectClass) {
58  		return supportedFormats;
59  	}
60  
61  	/**
62  	 * Builds the ExportDataSet based on the BusinessObjects passed in.
63  	 */
64  	protected ExportDataSet buildExportDataSet(Class<?> dataObjectClass, List<? extends Object> dataObjects) {
65  		KewExportDataSet dataSet = new KewExportDataSet();
66  		for (Object dataObject : dataObjects) {
67  			if (dataObjectClass.equals(RuleAttribute.class)) {
68  				dataSet.getRuleAttributes().add((RuleAttribute)dataObject);
69  			} else if (dataObjectClass.equals(RuleTemplateBo.class)) {
70  				dataSet.getRuleTemplates().add((RuleTemplateBo)dataObject);
71  			} else if (dataObjectClass.equals(DocumentType.class)) {
72  				dataSet.getDocumentTypes().add((DocumentType)dataObject);
73  			} else if (dataObjectClass.equals(RuleBaseValues.class)) {
74  				dataSet.getRules().add((RuleBaseValues)dataObject);
75  			} else if (dataObjectClass.equals(RuleDelegationBo.class)) {
76  				dataSet.getRuleDelegations().add((RuleDelegationBo)dataObject);
77  			} else if (dataObjectClass.equals(GroupBo.class)) {
78  				Group group = GroupBo.to((GroupBo)dataObject);
79                  dataSet.getGroups().add(group);
80  			}
81  		}
82  
83  		ExportDataSet exportDataSet = new ExportDataSet();
84  		dataSet.populateExportDataSet(exportDataSet);
85  		return exportDataSet;
86  	}
87  
88  	/**
89  	 * Export the given List of Objects of the specified type to XML.
90  	 * 
91  	 * @see org.kuali.rice.krad.bo.Exporter#export(java.lang.Class, java.util.List, java.lang.String, java.io.OutputStream)
92  	 */
93  	@Override
94  	public void export(Class<?> dataObjectClass, List<? extends Object> dataObjects, String exportFormat, OutputStream outputStream) throws IOException,
95  			ExportNotSupportedException {
96  		if (!KRADConstants.XML_FORMAT.equals(exportFormat)) {
97  			throw new ExportNotSupportedException("The given export format of "
98  					+ exportFormat
99  					+ " is not supported by the KEW XML Exporter!");
100 		}
101 		ExportDataSet dataSet = buildExportDataSet(dataObjectClass, dataObjects);
102 		outputStream.write(CoreApiServiceLocator.getXmlExporterService()
103 				.export(dataSet));
104 		outputStream.flush();
105 		
106 	}
107 }