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
78
79 public class SubPagesList extends AbstractList {
80 private static final Logger log = LoggerFactory.getLogger(SubPagesList.class);
81
82 private String workItemId;
83
84 private InFlowWorkItem item;
85
86 private String rootPath;
87
88 private String repository;
89
90 private HierarchyManager hm;
91
92 private List subPages = new ArrayList();
93
94 public SubPagesList(String name, HttpServletRequest request, HttpServletResponse response) {
95 super(name, request, response);
96 }
97
98 public void init() {
99 super.init();
100 item = WorkflowUtil.getWorkItem(getWorkItemId());
101
102 if (item == null) {
103 throw new RuntimeException("can't read workitem");
104 }
105
106 rootPath = item.getAttribute("path").toString();
107 repository = item.getAttribute("repository").toString();
108 hm = MgnlContext.getHierarchyManager(repository);
109
110 ListAttribute versions = (ListAttribute) item.getAttribute(Context.ATTRIBUTE_VERSION_MAP);
111 for (Iterator iter = versions.iterator(); iter.hasNext();) {
112 Map versionMap = (Map) iter.next();
113 String version = versionMap.get("version").toString();
114 String uuid = versionMap.get("uuid").toString();
115 try {
116 Content node = hm.getContentByUUID(uuid);
117 if (!node.getHandle().equals(rootPath)) {
118 this.subPages.add(new SubPage(node, version));
119 }
120 }
121 catch (RepositoryException e) {
122 log.error("can't read subpage for [" + rootPath + "]", e);
123 }
124 }
125 }
126
127 public void configureList(ListControl list) {
128 ListColumn iconColumn = new ListColumn("icon", "", "30px", true);
129 iconColumn.setRenderer(new IconListColumnRenderer());
130 list.addColumn(iconColumn);
131
132 list.addColumn(new ListColumn("label", "", "200", true));
133 list.addColumn(new ListColumn("version", this.getMsgs().get("subpages.version"), "70px", true));
134 list.addColumn(new ListColumn("modDate", this.getMsgs().get("subpages.date"), "150px", true));
135
136 ListColumn statusColumn = new ListColumn("activationStatusIcon", this.getMsgs().get("subpages.status"), "50px", true);
137 statusColumn.setRenderer(new IconListColumnRenderer());
138 list.addColumn(statusColumn);
139
140 list.setRenderer(new AdminListControlRenderer() {
141
142 {
143 setBorder(true);
144 }
145
146 public String onDblClick(ListControl list, Integer index) {
147 return "mgnl.workflow.Inbox.show();";
148 }
149
150 public String onSelect(ListControl list, Integer index) {
151
152 String path = ObjectUtils.toString(list.getIteratorValue("path"));
153
154 StringBuffer js = new StringBuffer();
155 js.append("mgnl.workflow.Inbox.current = ");
156 js.append("{");
157 js.append("id : '").append(list.getIteratorValue("id")).append("',");
158 js.append("path : '").append(path).append("',");
159 js.append("version : '").append(list.getIteratorValue("version")).append("',");
160 js.append("repository : '").append(repository).append("'");
161 js.append("};");
162 js.append("mgnl.workflow.Inbox.show = ").append(InboxHelper.getShowJSFunction(repository, path)).append(";");
163 js.append(super.onSelect(list, index));
164
165 return js.toString();
166 }
167 });
168 }
169
170 protected void configureContextMenu(ContextMenu menu) {
171 ContextMenuItem show = new ContextMenuItem("show");
172 show.setLabel(this.getMsgs().get("subpages.show"));
173 show.setOnclick("mgnl.workflow.Inbox.show();");
174 show.setIcon(MgnlContext.getContextPath() + "/.resources/icons/16/note_view.gif");
175 show.addJavascriptCondition("{test: function(){return mgnl.workflow.Inbox.current.id!=null}}");
176 menu.addMenuItem(show);
177 }
178
179 public ListModel getModel() {
180 return new AbstractListModel() {
181
182 protected Collection getResult() throws Exception {
183 return subPages;
184 }
185 };
186 }
187
188 public String getWorkItemId() {
189 return this.workItemId;
190 }
191
192 public void setWorkItemId(String workItemId) {
193 this.workItemId = workItemId;
194 }
195
196
197
198
199 public class SubPage {
200
201 private String version;
202
203 private Content node;
204
205 private Content versionedNode;
206
207 protected SubPage(Content node, String version) throws RepositoryException {
208 this.version = version;
209 this.node = node;
210 versionedNode = node.getVersionedContent(version);
211 }
212
213 public String getPath(){
214 return node.getHandle();
215 }
216
217 public String getIcon() {
218 return "/" + InboxHelper.getIcon(repository, node.getHandle());
219 }
220
221 public String getLabel() {
222 return StringUtils.removeStart(node.getHandle(), rootPath + "/");
223 }
224
225 public String getActivationStatusIcon() {
226 return Tree.ICONDOCROOT + MetaDataUtil.getActivationStatusIcon(versionedNode);
227 }
228
229 public String getModDate() {
230 return DateUtil.formatDateTime(versionedNode.getMetaData().getModificationDate());
231 }
232
233 public String getVersion() {
234 return this.version;
235 }
236
237 }
238
239 }