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
35
36
37
38
39
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
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
73
74
75
76
77
78
79
80
81
82
83 protected void writeHeader(final Issue _issue) throws ExportException {
84
85
86
87 }
88
89
90
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
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
154
155 protected void writeFooter(final Issue _issue) throws ExportException {
156
157
158
159 }
160
161
162
163
164
165
166
167
168
169
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 }