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

Last change on this file since 3088 was 3088, checked in by twagoo, 11 years ago

Changes in MdMarshaller? and its usage:

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