source: VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/Application.java @ 5506

Last change on this file since 5506 was 5506, checked in by Twan Goosen, 10 years ago

Moved loading of "admin database" into a separate service that can also be used outside the context of the wicket web app
Refs #589

  • Property svn:eol-style set to native
File size: 4.6 KB
Line 
1package eu.clarin.cmdi.virtualcollectionregistry.gui;
2
3import eu.clarin.cmdi.virtualcollectionregistry.AdminUsersService;
4import eu.clarin.cmdi.virtualcollectionregistry.DataStore;
5import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistry;
6import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.AdminPage;
7import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.BrowsePrivateCollectionsPage;
8import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.BrowsePublicCollectionsPage;
9import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.CreateVirtualCollectionPage;
10import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.EditVirtualCollectionPage;
11import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.LoginPage;
12import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.VirtualCollectionDetailsPage;
13import org.apache.wicket.Page;
14import org.apache.wicket.authentication.AuthenticatedWebApplication;
15import org.apache.wicket.authentication.AuthenticatedWebSession;
16import org.apache.wicket.authorization.strategies.role.Roles;
17import org.apache.wicket.markup.html.WebPage;
18import org.apache.wicket.protocol.http.WebApplication;
19import org.apache.wicket.request.target.coding.MixedParamHybridUrlCodingStrategy;
20import org.apache.wicket.session.pagemap.LeastRecentlyAccessedEvictionStrategy;
21import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
22import org.slf4j.Logger;
23import org.slf4j.LoggerFactory;
24import org.springframework.beans.factory.annotation.Autowired;
25import org.springframework.stereotype.Component;
26
27@Component
28public class Application extends AuthenticatedWebApplication {
29
30    private final static Logger logger = LoggerFactory.getLogger(Application.class);
31   
32    @Autowired
33    private VirtualCollectionRegistry registry;
34    @Autowired
35    private DataStore dataStore;
36    @Autowired
37    private AdminUsersService adminUsersService;
38
39    @Override
40    protected void init() {
41        super.init();
42        logger.info("Initialising VCR web application");
43        addComponentInstantiationListener(new SpringComponentInjector(this));
44
45        getMarkupSettings().setDefaultMarkupEncoding("utf-8");
46        getRequestCycleSettings().setResponseRequestEncoding("utf-8");
47        getSessionSettings().setMaxPageMaps(3);
48        getSessionSettings().setPageMapEvictionStrategy(
49                new LeastRecentlyAccessedEvictionStrategy(3));
50        if (!DEPLOYMENT.equals(getConfigurationType())) {
51            logger.warn("Web application configured for development");
52            getMarkupSettings().setStripWicketTags(true);
53            getMarkupSettings().setStripComments(true);
54        }
55
56        mountBookmarkablePage("/login",
57                LoginPage.class);
58        mountBookmarkablePage("/public",
59                BrowsePublicCollectionsPage.class);
60        mountBookmarkablePage("/private",
61                BrowsePrivateCollectionsPage.class);
62        mountBookmarkablePage("/create", CreateVirtualCollectionPage.class);
63        mountBookmarkablePage("/admin", AdminPage.class);
64
65        // details of an existing collection by ID, e.g. /details/123
66        mount(new MixedParamHybridUrlCodingStrategy("/details",
67                VirtualCollectionDetailsPage.class, new String[]{VirtualCollectionDetailsPage.PARAM_VC_ID}));
68        // editing an existing collection by ID, e.g. /edit/123
69        mount(new MixedParamHybridUrlCodingStrategy("/edit",
70                EditVirtualCollectionPage.class, new String[]{"id"}));
71    }
72
73    @Override
74    public Class<? extends Page> getHomePage() {
75        return BrowsePublicCollectionsPage.class;
76    }
77
78    @Override
79    protected Class<? extends WebPage> getSignInPageClass() {
80        return LoginPage.class;
81    }
82
83    @Override
84    protected Class<? extends AuthenticatedWebSession> getWebSessionClass() {
85        return ApplicationSession.class;
86    }
87
88    public boolean hasAnyRole(String[] roles) {
89        if (roles != null) {
90            final Roles sessionRoles = AuthenticatedWebSession.get().getRoles();
91            if (sessionRoles != null) {
92                for (String role : roles) {
93                    if (sessionRoles.hasRole(role)) {
94                        return true;
95                    }
96                }
97            }
98        }
99        return false;
100    }
101   
102    boolean isAdmin(String user) {
103        return adminUsersService.isAdmin(user);
104    }
105   
106    public VirtualCollectionRegistry getRegistry() {
107        return registry;
108    }
109
110    public DataStore getDataStore() {
111        return dataStore;
112    }
113
114    public static Application get() {
115        return (Application) WebApplication.get();
116    }
117
118} // class Application
Note: See TracBrowser for help on using the repository browser.