source: ComponentRegistry/trunk/ComponentRegistry/src/main/java/clarin/cmdi/componentregistry/frontend/AdminHomePage.java @ 5549

Last change on this file since 5549 was 5549, checked in by olhsha@mpi.nl, 10 years ago

Added group service. Tested via the tomcat on loclahots (test URI and postman), old unit tests are adjusted and work well. Todo: retest on localhost tomcat, look at run-time exceptions, add new unit tests, adjust front-end

File size: 12.4 KB
Line 
1package clarin.cmdi.componentregistry.frontend;
2
3import java.security.Principal;
4import java.util.List;
5
6import javax.swing.tree.DefaultMutableTreeNode;
7import javax.swing.tree.DefaultTreeModel;
8import javax.swing.tree.TreeModel;
9
10import org.apache.wicket.PageParameters;
11import org.apache.wicket.ajax.AjaxRequestTarget;
12import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
13import org.apache.wicket.markup.html.basic.Label;
14import org.apache.wicket.markup.html.form.Button;
15import org.apache.wicket.markup.html.form.CheckBox;
16import org.apache.wicket.markup.html.form.Form;
17import org.apache.wicket.markup.html.form.TextArea;
18import org.apache.wicket.markup.html.link.Link;
19import org.apache.wicket.markup.html.panel.FeedbackPanel;
20import org.apache.wicket.markup.html.tree.BaseTree;
21import org.apache.wicket.markup.html.tree.ITreeState;
22import org.apache.wicket.markup.html.tree.LinkTree;
23import org.apache.wicket.model.CompoundPropertyModel;
24import org.apache.wicket.spring.injection.annot.SpringBean;
25import org.slf4j.Logger;
26import org.slf4j.LoggerFactory;
27
28import clarin.cmdi.componentregistry.ComponentRegistry;
29import clarin.cmdi.componentregistry.ComponentRegistryException;
30import clarin.cmdi.componentregistry.ComponentRegistryFactory;
31import clarin.cmdi.componentregistry.MDMarshaller;
32import clarin.cmdi.componentregistry.RegistrySpace;
33import clarin.cmdi.componentregistry.UserUnauthorizedException;
34import clarin.cmdi.componentregistry.impl.database.AdminRegistry;
35import clarin.cmdi.componentregistry.model.BaseDescription;
36import clarin.cmdi.componentregistry.model.ComponentDescription;
37import clarin.cmdi.componentregistry.model.ProfileDescription;
38import clarin.cmdi.componentregistry.persistence.ComponentDao;
39
40@SuppressWarnings("serial")
41public class AdminHomePage extends SecureAdminWebPage {
42
43    private static final long serialVersionUID = 1L;
44    private final static Logger LOG = LoggerFactory.getLogger(AdminHomePage.class);
45    private final CMDItemInfo info;
46    private LinkTree tree;
47    private transient AdminRegistry adminRegistry = new AdminRegistry();
48    @SpringBean(name = "componentRegistryFactory")
49    private ComponentRegistryFactory componentRegistryFactory;
50    @SpringBean
51    private ComponentDao componentDao;
52    @SpringBean
53    private MDMarshaller marshaller;
54
55    public AdminHomePage(final PageParameters parameters) throws ComponentRegistryException {
56        super(parameters);
57        adminRegistry.setComponentRegistryFactory(componentRegistryFactory);
58        adminRegistry.setComponentDao(componentDao);
59        adminRegistry.setMarshaller(marshaller);
60        info = new CMDItemInfo(marshaller);
61        addLinks();
62        final FeedbackPanel feedback = new FeedbackPanel("feedback");
63        feedback.setOutputMarkupId(true);
64        add(feedback);
65        Form form = new ItemEditForm("form");
66        add(form);
67
68        Button deleteButton = new AjaxFallbackButton("delete", form) {
69            @Override
70            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
71                CMDItemInfo info = (CMDItemInfo) form.getModelObject();
72                info("deleting:" + info.getName());
73                Principal userPrincipal = getWebRequest().getHttpServletRequest().getUserPrincipal();
74                try {
75                    adminRegistry.delete(info, userPrincipal);
76                    info("Item deleted.");
77                    reloadTreeModel(info);
78                } catch (Exception e) {
79                    LOG.error("Admin: ", e);
80                    error("Cannot delete: " + info.getName() + "\n error=" + e);
81                }
82                if (target != null) {
83                    target.addComponent(form);
84                    target.addComponent(tree);
85                    target.addComponent(feedback);
86                }
87            }
88
89            @Override
90            public boolean isEnabled() {
91                return info.isDeletable();
92
93            }
94        ;
95        };
96        form.add(deleteButton);
97
98        Button undeleteButton = new AjaxFallbackButton("undelete", form) {
99            @Override
100            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
101                CMDItemInfo info = (CMDItemInfo) form.getModelObject();
102                info("undeleting:" + info.getName());
103                try {
104                    adminRegistry.undelete(info);
105                    info("Item put back.");
106                    reloadTreeModel(info);
107                } catch (Exception e) {
108                    LOG.error("Admin: ", e);
109                    error("Cannot undelete: " + info.getName() + "\n error=" + e);
110                }
111                if (target != null) {
112                    target.addComponent(form);
113                    target.addComponent(tree);
114                    target.addComponent(feedback);
115                }
116            }
117
118            @Override
119            public boolean isEnabled() {
120                return info.isUndeletable();
121            }
122        };
123        form.add(undeleteButton);
124
125        CheckBox forceUpdateCheck = new CheckBox("forceUpdate");
126        form.add(forceUpdateCheck);
127
128        Button submitButton = new AjaxFallbackButton("submit", form) {
129            @Override
130            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
131                CMDItemInfo info = (CMDItemInfo) form.getModelObject();
132                Principal userPrincipal = getWebRequest().getHttpServletRequest().getUserPrincipal();
133                info("submitting:" + info.getName() + " id=(" + info.getDataNode().getDescription().getId() + ")");
134                try {
135                    adminRegistry.submitFile(info, userPrincipal);
136                    info("submitting done.");
137                    reloadTreeModel(info);
138                } catch (Exception e) {
139                    LOG.error("Admin: ", e);
140                    error("Cannot submit: " + info.getName() + "\n error=" + e);
141                }
142                if (target != null) {
143                    target.addComponent(form);
144                    target.addComponent(tree);
145                    target.addComponent(feedback);
146                }
147            }
148
149            @Override
150            public boolean isEnabled() {
151                return info.isEditable();
152            }
153        };
154        form.add(submitButton);
155
156
157
158
159        try {
160            tree = createTree("tree", form, createDBTreeModel());
161            add(tree);
162            add(new Link("expandAll") {
163                @Override
164                public void onClick() {
165                    tree.getTreeState().expandAll();
166                }
167            });
168
169            add(new Link("collapseAll") {
170                @Override
171                public void onClick() {
172                    tree.getTreeState().collapseAll();
173                }
174            });
175
176        } catch (UserUnauthorizedException e) {           
177            LOG.error("Admin: ", e);
178            error("Cannot create tree: error = " + e);
179        }
180       
181    }
182
183    private void reloadTreeModel(CMDItemInfo info) throws UserUnauthorizedException {
184        try {
185            tree.setModelObject(createDBTreeModel());
186        } catch (ComponentRegistryException e) {
187            LOG.error("Admin: ", e);
188            error("Cannot reload tree: " + info.getName() + "\n error=" + e);
189        }
190    }
191
192    private void addLinks() {
193        add(new Label("linksMessage", "Browse the data below or choose on of the following options:"));
194        add(new Link("massMigrate") {
195            @Override
196            public void onClick() {
197                setResponsePage(MassMigratePage.class);
198            }
199        });
200        add(new Link("log") {
201            @Override
202            public void onClick() {
203                setResponsePage(ViewLogPage.class);
204            }
205        });
206        add(new Link("statistics") {
207            @Override
208            public void onClick() {
209                setResponsePage(StatisticsPage.class);
210            }
211        });
212    }
213
214    private LinkTree createTree(String id, final Form form, TreeModel treeModel) {
215        final LinkTree adminTree = new LinkTree(id, treeModel) {
216            @Override
217            protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) {
218                super.onNodeLinkClicked(node, tree, target);
219                ITreeState treeState = tree.getTreeState();
220                if (treeState.isNodeExpanded(node)) {
221                    treeState.collapseNode(node);
222                } else {
223                    treeState.expandNode(node);
224                }
225                DisplayDataNode dn = (DisplayDataNode) ((DefaultMutableTreeNode) node).getUserObject();
226                info.setDataNode(dn);
227                BaseDescription desc = dn.getDescription();
228                if (desc != null) {
229                    String content = componentDao.getContent(dn.isDeleted(), desc.getId());
230                    info.setContent(content);
231                }
232                if (target != null) {
233                    target.addComponent(form);
234                }
235            }
236        };
237        return adminTree;
238    }
239
240    private class ItemEditForm extends Form<CMDItemInfo> {
241
242        public ItemEditForm(String name) {
243            super(name);
244            CompoundPropertyModel model = new CompoundPropertyModel(info);
245            setModel(model);
246
247            TextArea descriptionArea = new TextArea("description");
248            descriptionArea.setOutputMarkupId(true);
249            add(descriptionArea);
250            TextArea contentArea = new TextArea("content");
251            contentArea.setOutputMarkupId(true);
252            add(contentArea);
253        }
254    }
255
256    private TreeModel createDBTreeModel() throws ComponentRegistryException, UserUnauthorizedException {
257        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(new DisplayDataNode("ComponentRegistry", false));
258        DefaultMutableTreeNode publicNode = new DefaultMutableTreeNode(new DisplayDataNode("Public", false));
259        rootNode.add(publicNode);
260        ComponentRegistry publicRegistry = componentRegistryFactory.getPublicRegistry();
261        add(publicNode, publicRegistry);
262        List<ComponentRegistry> userRegistries = componentRegistryFactory.getAllUserRegistries();
263        for (ComponentRegistry registry : userRegistries) {
264            DefaultMutableTreeNode userNode = new DefaultMutableTreeNode(new DisplayDataNode(registry.getName(), false));
265            rootNode.add(userNode);
266            add(userNode, registry);
267        }
268        TreeModel model = new DefaultTreeModel(rootNode);
269        return model;
270    }
271
272    private void add(DefaultMutableTreeNode parent, ComponentRegistry registry) throws ComponentRegistryException, UserUnauthorizedException {
273        DefaultMutableTreeNode componentsNode = new DefaultMutableTreeNode(new DisplayDataNode("Components", false));
274        parent.add(componentsNode);
275        add(componentsNode, registry.getComponentDescriptions(), false, registry.getRegistrySpace());
276
277        DefaultMutableTreeNode profilesNode = new DefaultMutableTreeNode(new DisplayDataNode("Profiles", false));
278        parent.add(profilesNode);
279        add(profilesNode, registry.getProfileDescriptions(), false, registry.getRegistrySpace());
280
281        DefaultMutableTreeNode deletedCompNode = new DefaultMutableTreeNode(new DisplayDataNode("Deleted Components", true));
282        parent.add(deletedCompNode);
283
284        List<ComponentDescription> deletedComponentDescriptions = registry.getDeletedComponentDescriptions();
285        add(deletedCompNode, deletedComponentDescriptions, true, registry.getRegistrySpace());
286
287        DefaultMutableTreeNode deletedProfNode = new DefaultMutableTreeNode(new DisplayDataNode("Deleted Profiles", true));
288        parent.add(deletedProfNode);
289        List<ProfileDescription> deletedProfileDescriptions = registry.getDeletedProfileDescriptions();
290        add(deletedProfNode, deletedProfileDescriptions, true, registry.getRegistrySpace());
291    }
292
293    private void add(DefaultMutableTreeNode parent, List<? extends BaseDescription> descs, boolean isDeleted, RegistrySpace space) {
294        for (BaseDescription desc : descs) {
295            DefaultMutableTreeNode child = new DefaultMutableTreeNode(new DisplayDataNode(desc.getName(), isDeleted, desc, space));
296            parent.add(child);
297        }
298    }
299}
Note: See TracBrowser for help on using the repository browser.