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