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

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

Unit test for getting profiles and components from groups. A little bug is fixed

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