1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.workflow.inbox;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.HierarchyManager;
38 import info.magnolia.cms.gui.control.ContextMenu;
39 import info.magnolia.cms.gui.control.ContextMenuItem;
40 import info.magnolia.cms.gui.control.Tree;
41 import info.magnolia.cms.gui.controlx.list.AbstractListModel;
42 import info.magnolia.cms.gui.controlx.list.IconListColumnRenderer;
43 import info.magnolia.cms.gui.controlx.list.ListColumn;
44 import info.magnolia.cms.gui.controlx.list.ListControl;
45 import info.magnolia.cms.gui.controlx.list.ListModel;
46 import info.magnolia.cms.util.DateUtil;
47 import info.magnolia.cms.util.MetaDataUtil;
48 import info.magnolia.context.Context;
49 import info.magnolia.context.MgnlContext;
50 import info.magnolia.module.admininterface.lists.AbstractList;
51 import info.magnolia.module.admininterface.lists.AdminListControlRenderer;
52 import info.magnolia.module.workflow.WorkflowUtil;
53
54 import java.util.ArrayList;
55 import java.util.Collection;
56 import java.util.Iterator;
57 import java.util.List;
58 import java.util.Map;
59
60 import javax.jcr.RepositoryException;
61 import javax.servlet.http.HttpServletRequest;
62 import javax.servlet.http.HttpServletResponse;
63
64 import openwfe.org.engine.workitem.InFlowWorkItem;
65 import openwfe.org.engine.workitem.ListAttribute;
66
67 import org.apache.commons.lang.ObjectUtils;
68 import org.apache.commons.lang.StringUtils;
69 import org.slf4j.Logger;
70 import org.slf4j.LoggerFactory;
71
72
73
74
75
76
77 public class SubPagesList extends AbstractList {
78
79
80
81
82 private static Logger log = LoggerFactory.getLogger(SubPagesList.class);
83
84 private String workItemId;
85
86 private InFlowWorkItem item;
87
88 private String rootPath;
89
90 private String repository;
91
92 private HierarchyManager hm;
93
94 private List subPages = new ArrayList();
95
96 public SubPagesList(String name, HttpServletRequest request, HttpServletResponse response) {
97 super(name, request, response);
98 }
99
100 public void init() {
101 super.init();
102 item = WorkflowUtil.getWorkItem(getWorkItemId());
103
104 if (item == null) {
105 throw new RuntimeException("can't read workitem");
106 }
107
108 rootPath = item.getAttribute("path").toString();
109 repository = item.getAttribute("repository").toString();
110 hm = MgnlContext.getHierarchyManager(repository);
111
112 ListAttribute versions = (ListAttribute) item.getAttribute(Context.ATTRIBUTE_VERSION_MAP);
113 for (Iterator iter = versions.iterator(); iter.hasNext();) {
114 Map versionMap = (Map) iter.next();
115 String version = versionMap.get("version").toString();
116 String uuid = versionMap.get("uuid").toString();
117 try {
118 Content node = hm.getContentByUUID(uuid);
119 if (!node.getHandle().equals(rootPath)) {
120 this.subPages.add(new SubPage(node, version));
121 }
122 }
123 catch (RepositoryException e) {
124 log.error("can't read subpage for [" + rootPath + "]", e);
125 }
126 }
127 }
128
129 public void configureList(ListControl list) {
130 ListColumn iconColumn = new ListColumn("icon", "", "30px", true);
131 iconColumn.setRenderer(new IconListColumnRenderer());
132 list.addColumn(iconColumn);
133
134 list.addColumn(new ListColumn("label", "", "200", true));
135 list.addColumn(new ListColumn("version", this.getMsgs().get("subpages.version"), "70px", true));
136 list.addColumn(new ListColumn("modDate", this.getMsgs().get("subpages.date"), "150px", true));
137
138 ListColumn statusColumn = new ListColumn("activationStatusIcon", this.getMsgs().get("subpages.status"), "50px", true);
139 statusColumn.setRenderer(new IconListColumnRenderer());
140 list.addColumn(statusColumn);
141
142 list.setRenderer(new AdminListControlRenderer() {
143
144 {
145 setBorder(true);
146 }
147
148 public String onDblClick(ListControl list, Integer index) {
149 return "mgnl.workflow.Inbox.show();";
150 }
151
152 public String onSelect(ListControl list, Integer index) {
153
154 String path = ObjectUtils.toString(list.getIteratorValue("path"));
155
156 StringBuffer js = new StringBuffer();
157 js.append("mgnl.workflow.Inbox.current = ");
158 js.append("{");
159 js.append("id : '").append(list.getIteratorValue("id")).append("',");
160 js.append("path : '").append(path).append("',");
161 js.append("version : '").append(list.getIteratorValue("version")).append("',");
162 js.append("repository : '").append(repository).append("'");
163 js.append("};");
164 js.append("mgnl.workflow.Inbox.show = ").append(InboxHelper.getShowJSFunction(repository, path)).append(";");
165 js.append(super.onSelect(list, index));
166
167 return js.toString();
168 }
169 });
170 }
171
172 protected void configureContextMenu(ContextMenu menu) {
173 ContextMenuItem show = new ContextMenuItem("show");
174 show.setLabel(this.getMsgs().get("subpages.show"));
175 show.setOnclick("mgnl.workflow.Inbox.show();");
176 show.setIcon(MgnlContext.getContextPath() + "/.resources/icons/16/note_view.gif");
177 show.addJavascriptCondition("{test: function(){return mgnl.workflow.Inbox.current.id!=null}}");
178 menu.addMenuItem(show);
179 }
180
181 public ListModel getModel() {
182 return new AbstractListModel() {
183
184 protected Collection getResult() throws Exception {
185 return subPages;
186 }
187 };
188 }
189
190 public String getWorkItemId() {
191 return this.workItemId;
192 }
193
194 public void setWorkItemId(String workItemId) {
195 this.workItemId = workItemId;
196 }
197
198 public class SubPage {
199
200 private String version;
201
202 private Content node;
203
204 private Content versionedNode;
205
206 protected SubPage(Content node, String version) throws RepositoryException {
207 this.version = version;
208 this.node = node;
209 versionedNode = node.getVersionedContent(version);
210 }
211
212 public String getPath(){
213 return node.getHandle();
214 }
215
216 public String getIcon() {
217 return "/" + InboxHelper.getIcon(repository, node.getHandle());
218 }
219
220 public String getLabel() {
221 return StringUtils.removeStart(node.getHandle(), rootPath + "/");
222 }
223
224 public String getActivationStatusIcon() {
225 return Tree.ICONDOCROOT + MetaDataUtil.getActivationStatusIcon(versionedNode);
226 }
227
228 public String getModDate() {
229 return DateUtil.formatDateTime(versionedNode.getMetaData().getModificationDate());
230 }
231
232 public String getVersion() {
233 return this.version;
234 }
235
236 }
237
238 }