source: VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/pages/MenuItem.java @ 927

Last change on this file since 927 was 927, checked in by oschonef, 13 years ago
  • remove debugging output
  • Property svn:eol-style set to native
File size: 2.5 KB
Line 
1package eu.clarin.cmdi.virtualcollectionregistry.gui.pages;
2
3import org.apache.wicket.authorization.IAuthorizationStrategy;
4import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeAction;
5import org.apache.wicket.markup.ComponentTag;
6import org.apache.wicket.markup.html.WebPage;
7import org.apache.wicket.markup.html.basic.Label;
8import org.apache.wicket.markup.html.link.BookmarkablePageLink;
9import org.apache.wicket.markup.html.link.Link;
10import org.apache.wicket.markup.html.panel.Panel;
11import org.apache.wicket.model.IModel;
12import org.apache.wicket.util.lang.Classes;
13
14import eu.clarin.cmdi.virtualcollectionregistry.gui.Application;
15
16@SuppressWarnings("serial")
17public class MenuItem<T extends WebPage> extends Panel {
18    private static final String ENABLE = "ENABLE";
19    private final String pageClassName;
20
21    public MenuItem(final IModel<String> title, final Class<T> pageClass) {
22        super("menuitem");
23        this.pageClassName = pageClass.getName();
24        setRenderBodyOnly(true);
25        final Link<T> link = new BookmarkablePageLink<T>("link", pageClass) {
26            @Override
27            protected void onComponentTag(ComponentTag tag) {
28                super.onComponentTag(tag);
29                if (linksTo(getPage())) {
30                    tag.setName("span");
31                    tag.getAttributes().remove("href");
32                    tag.getAttributes().put("class", "active");
33                }
34            }
35        };
36        link.add(new Label("title", title).setRenderBodyOnly(true));
37        add(link);
38    }
39
40    @Override
41    protected void onBeforeRender() {
42        final IAuthorizationStrategy strategy =
43            getApplication().getSecuritySettings()
44                .getAuthorizationStrategy();
45        final Class<T> pageClass = getPageClass();
46        if (!strategy.isInstantiationAuthorized(pageClass)) {
47            boolean visible = true;
48            AuthorizeAction action =
49                pageClass.getAnnotation(AuthorizeAction.class);
50            if ((action != null) && ENABLE.equalsIgnoreCase(action.action())) {
51                final Application app = (Application) getApplication();
52                if (app.hasAnyRole(action.deny())) {
53                    visible = false;
54                } else {
55                    visible = app.hasAnyRole(action.roles());
56                }
57            }
58            setVisible(visible);
59        }
60        super.onBeforeRender();
61    }
62
63    private Class<T> getPageClass() {
64        return Classes.resolveClass(pageClassName);
65    }
66
67} // class MenuItem
Note: See TracBrowser for help on using the repository browser.