View Javadoc

1   package com.atlassian.jira.export;
2   
3   import java.sql.Timestamp;
4   import java.util.Date;
5   import java.util.Iterator;
6   import java.util.List;
7   import java.util.Locale;
8   
9   import org.apache.log4j.Category;
10  import org.apache.log4j.Logger;
11  import org.ofbiz.core.entity.GenericValue;
12  
13  import com.atlassian.jira.ComponentManager;
14  import com.atlassian.jira.issue.CustomFieldManager;
15  import com.atlassian.jira.issue.Issue;
16  import com.atlassian.jira.issue.customfields.CustomFieldType;
17  import com.atlassian.jira.issue.customfields.impl.DateCFType;
18  import com.atlassian.jira.issue.customfields.impl.DateTimeCFType;
19  import com.atlassian.jira.issue.customfields.impl.NumberCFType;
20  import com.atlassian.jira.issue.customfields.impl.StringCFType;
21  import com.atlassian.jira.issue.fields.CustomField;
22  import com.atlassian.jira.issue.fields.FieldManager;
23  import com.atlassian.jira.issue.fields.NavigableField;
24  import com.atlassian.jira.issue.fields.layout.column.ColumnLayoutItem;
25  import com.atlassian.jira.issue.fields.layout.column.ColumnLayoutManager;
26  import com.atlassian.jira.issue.fields.layout.column.EditableColumnLayout;
27  import com.atlassian.jira.issue.search.SearchRequest;
28  import com.atlassian.jira.plugin.report.DefaultIssueBeanHelper;
29  import com.atlassian.jira.web.util.OutlookDateManager;
30  import com.atlassian.jira.workflow.transition.AutoTransitionManager;
31  import com.opensymphony.user.User;
32  
33  /**
34   * FQCN : com.atlassian.jira.export.RequestExportManager
35   * @author Kaamelot
36   * @since 3.10.1.34
37   * @todo DEVELOPPEMENT NOT ENDED 
38   * Description : Provides an Export based on Request Filter definition;
39   * Data Value should be not renderered
40   *
41   */
42  public class RequestExportManager extends AIssueExportManager {
43  
44  	private static final Category log = Logger.getInstance(RequestExportManager.class);
45  
46  	protected DefaultIssueBeanHelper issueBeanHelper = DefaultIssueBeanHelper.getInstance();
47  
48  	protected AutoTransitionManager autoTransitionManager;
49  
50  	protected ColumnLayoutManager columnLayoutManager;
51  
52  	protected FieldManager fieldManager;
53  
54  	protected CustomFieldManager customFieldManager;
55  
56  	protected OutlookDateManager outlookDateManager;
57  
58  	private List columnLayoutItems;
59  
60  	/** Default Constructor
61  	 */
62  	public RequestExportManager() {
63  		super();
64  		autoTransitionManager = (AutoTransitionManager) ComponentManager.getComponentInstanceOfType(AutoTransitionManager.class);
65  		columnLayoutManager = (ColumnLayoutManager) ComponentManager.getComponentInstanceOfType(ColumnLayoutManager.class);
66  		fieldManager = (FieldManager) ComponentManager.getComponentInstanceOfType(FieldManager.class);
67  		customFieldManager = (CustomFieldManager) ComponentManager.getComponentInstanceOfType(CustomFieldManager.class);
68  		outlookDateManager = (OutlookDateManager) ComponentManager.getComponentInstanceOfType(OutlookDateManager.class);
69  
70  	}
71  
72  //	/** Init the Export : File Header Generation 
73  //	 */
74  //	protected void initExport() throws ExportException {
75  //		StringBuffer buf = new StringBuffer();
76  //		buf.append("<html><body><table>");
77  //		getWriter().write(buf.toString());
78  //	}
79  
80  	/**
81  	 * @see com.atlassian.jira.export.AIssueExportManager#writeHeader(Issue)
82  	 */
83  	protected void writeHeader(final Issue _issue) throws ExportException {
84  //		StringBuffer buf = new StringBuffer();
85  //		buf.append("<tr >");
86  //		getWriter().write(buf.toString());
87  	}
88  
89  	/**
90  	 * @see com.atlassian.jira.export.AIssueExportManager#writeData(Issue)
91  	 */
92  	protected void writeData(final Issue _issue) throws ExportException {
93  		StringBuffer buf = new StringBuffer();
94  		try {
95  			GenericValue gv = _issue.getGenericValue();
96  			for (Iterator itColumnLayoutItems = getColumnLayoutItemsFromSearchRequest().iterator(); itColumnLayoutItems.hasNext();) {
97  				ColumnLayoutItem item = (ColumnLayoutItem) itColumnLayoutItems.next();
98  				NavigableField field = item.getNavigableField();
99  				String outputValue = null;
100 				String fieldName = null;
101 				Object value = null;
102 				
103 //				outputValue = item.getHtml(java.util.Collections.EMPTY_MAP,_issue);
104 				
105 				if (fieldManager.isCustomField(field)) {
106 					fieldName = field.getName();
107 					CustomFieldType cft = ((CustomField) field).getCustomFieldType();
108 					if (cft instanceof DateTimeCFType || cft instanceof DateCFType) {
109 						value = issueBeanHelper.getCustomFieldDateValue(_issue, fieldName);
110 						if (value != null) {
111 							outputValue = outlookDateManager.getOutlookDate(Locale.getDefault()).formatDatePicker((Timestamp) value);
112 						}
113 					} else if (cft instanceof StringCFType) {
114 						value = issueBeanHelper.getCustomFieldValue(_issue, fieldName);
115 						outputValue = (value != null) ? value.toString() : "";
116 					} else if (cft instanceof NumberCFType) {
117 						value = issueBeanHelper.getCustomFieldValue(_issue, fieldName);
118 						outputValue = (value != null) ? value.toString() : "0";
119 					} else {
120 						value = issueBeanHelper.getCustomFieldValue(_issue, fieldName);
121 						outputValue = (value != null) ? value.toString() : "0";
122 					}
123 				} else {
124 					fieldName = field.getId();
125 					value = gv.get(fieldName);
126 					if (value!=null) {
127 						Class outputClass = value.getClass();
128 						if (outputClass == String.class) {
129 							outputValue = (value != null) ? value.toString() : "";
130 						} else if (outputClass == Date.class) {
131 							if (value != null) {
132 								outputValue = outlookDateManager.getOutlookDate(Locale.getDefault()).formatDatePicker((Timestamp) value);
133 							}
134 						} else if (outputClass == Number.class) {
135 							outputValue = (value != null) ? value.toString() : "0";
136 						}
137 					} else {
138 						outputValue = "";
139 					}
140 				}
141 				buf.append("<td >").append(outputValue).append("</td >");
142 			}
143 			getWriter().write(buf.toString());
144 			if (getWriter().checkError()) {
145 				throw new ExportException("Error occcured during Write !");
146 			}
147 		} catch (Exception e) {
148 			throw new ExportException(e);
149 		}
150 	}
151 
152 	/**
153 	 * @see com.atlassian.jira.export.AIssueExportManager#writeFooter(Issue)
154 	 */
155 	protected void writeFooter(final Issue _issue) throws ExportException {
156 //		StringBuffer buf = new StringBuffer();
157 //		buf.append("</tr >");
158 //		getWriter().write(buf.toString());
159 	}
160 
161 //	protected void endExport() throws ExportException {
162 //		StringBuffer buf = new StringBuffer();
163 //		buf.append("</table></body></html>");
164 //		getWriter().write(buf.toString());
165 //		super.endExport();
166 //	}
167 	/**
168 	 * @return List ColumnLayoutItems defined in the Current Search Request
169 	 * @throws ExportException n/a 
170 	 */
171 	protected List getColumnLayoutItemsFromSearchRequest() throws ExportException {
172 		if (columnLayoutItems == null) {
173 			SearchRequest searchRequest = getRequestProvider().getSearchRequest();
174 			User userSearcher = getRequestProvider().getUserSearcher();
175 			try {
176 				if (searchRequest != null && userSearcher != null) {
177 					EditableColumnLayout ecl = this.columnLayoutManager.getEditableSearchRequestColumnLayout(userSearcher, searchRequest);
178 					return ecl.getColumnLayoutItems();
179 				}
180 			} catch (Exception e) {
181 				throw new ExportException(e);
182 			}
183 		}
184 		return columnLayoutItems;
185 	}
186 
187 }