package org.bubblecloud.ilves; import com.vaadin.navigator.View; import com.vaadin.ui.Component; import org.bubblecloud.ilves.api.ApiImplementation; import org.bubblecloud.ilves.api.ApiServlet; import org.bubblecloud.ilves.model.Company; import org.bubblecloud.ilves.model.User; import org.bubblecloud.ilves.security.DefaultRoles; import org.bubblecloud.ilves.security.SecurityUtil; import org.bubblecloud.ilves.server.jetty.DefaultJettyConfiguration; import org.bubblecloud.ilves.site.*; import org.bubblecloud.ilves.site.view.valo.DefaultValoView; import org.bubblecloud.ilves.util.PropertiesUtil; import org.eclipse.jetty.server.Server; import java.io.IOException; import java.net.URISyntaxException; /** * Ilves API class. * * @author Tommi S.E. Laukkanen */ public class Ilves { /** * Configures Ilves and returns embedded Jetty server. * * Choosing another properties file prefix than default site requires content of site.properties * to be copied as defaults to custom properties file. * * @param propertiesFilePrefix the prefix of the properties file or null if site is used. * @param localizationBundlePrefix the localization bundle * @param persistentUnit the persistence unit * @return the server * @throws IOException if IO exception occurs * @throws URISyntaxException if URI syntax exception occurs */ public static Server configure(final String propertiesFilePrefix, final String localizationBundlePrefix, final String persistentUnit) throws IOException, URISyntaxException { if (propertiesFilePrefix != null && !propertiesFilePrefix.equals("site")) { PropertiesUtil.setCategoryRedirection("site", propertiesFilePrefix); } try { SecurityUtil.decryptSecretKey("test"); } catch (final Exception e) { } return DefaultJettyConfiguration.configureServer(persistentUnit, localizationBundlePrefix); } /** * Initializes site module. * @param siteModuleClass the site module class * @return true if initialization succeeded. */ public static synchronized boolean initializeModule(final Class<? extends SiteModule> siteModuleClass) { return SiteModuleManager.initializeModule(siteModuleClass); } /** * Adds navigation category page to Ilves site. * @param page the page * @param roles the roles able to access the page */ public static void addNavigationCategoryPage(final String page, final String... roles) { addViewDescriptor(page, DefaultValoView.class, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addRootPage(page); } /** * Adds navigation category page to Ilves site. * @param index the page index * @param page the page * @param roles the roles able to access the page */ public static void addNavigationCategoryPage(final int index, final String page, final String... roles) { addViewDescriptor(page, DefaultValoView.class, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addRootPage(index, page); } /** * Adds navigation category page to Ilves site. * @param previousCategoryPage the previous category page * @param page the page * @param roles the roles able to access the page */ public static void addNavigationCategoryPage(final String previousCategoryPage, final String page, final String... roles) { addViewDescriptor(page, DefaultValoView.class, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addRootPage(previousCategoryPage, page); } /** * Adds root page to Ilves site. * @param page the page * @param viewClass the view class * @param roles the roles able to access the page */ public static void addRootPage(final String page, final Class<? extends View> viewClass, final String... roles) { addViewDescriptor(page, viewClass, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addRootPage(page); } /** * Adds root page to Ilves site. * @param index the page index * @param page the page * @param viewClass the view class * @param roles the roles able to access the page */ public static void addRootPage(final int index, final String page, final Class<? extends View> viewClass, final String... roles) { addViewDescriptor(page, viewClass, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addRootPage(index, page); } /** * Adds root page to Ilves site. * @param previousPage an existing root page after which the new root page is added * @param page the page * @param viewClass the view class * @param roles the roles able to access the page */ public static void addRootPage(final String previousPage, final String page, final Class<? extends View> viewClass, final String... roles) { addViewDescriptor(page, viewClass, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addRootPage(previousPage, page); } /** * Adds child page to Ilves site. * @param parentPage the parent page * @param page the new child page * @param viewClass the view class * @param roles the roles able to access the page */ public static void addChildPage(final String parentPage, final String page, final Class<? extends View> viewClass, final String... roles) { addViewDescriptor(page, viewClass, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addChildPage(parentPage, page); } /** * Adds child page to Ilves site. * @param parentPage the parent page * @param index the page index * @param page the new child page * @param viewClass the view class * @param roles the roles able to access the page */ public static void addChildPage(final String parentPage, final int index, final String page, final Class<? extends View> viewClass, final String... roles) { addViewDescriptor(page, viewClass, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addChildPage(parentPage, index, page); } /** * Adds child page to Ilves site. * @param parentPage the parent page * @param previousPage the existing child page after which the new child page is added * @param page the new child page * @param viewClass the view class * @param roles the roles able to access the page */ public static void addChildPage(final String parentPage, final String previousPage, final String page, final Class<? extends View> viewClass, final String... roles) { addViewDescriptor(page, viewClass, roles); final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.addChildPage(parentPage, previousPage, page); } /** * Internal helper method for adding view descriptor. * @param viewName the view name * @param viewClass the view class * @param roles the roles able to access the view */ private static void addViewDescriptor(final String viewName, final Class<? extends View> viewClass, final String... roles) { final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); final ViewDescriptor viewDescriptor = new ViewDescriptor(viewName, viewClass); if (roles.length != 0) { viewDescriptor.setViewerRoles(roles); } siteDescriptor.getViewDescriptors().add(viewDescriptor); } /** * Sets the default page in Ilves site. * @param page the page. */ public static void setDefaultPage(final String page) { // Get default site descriptor. final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); // Add custom view to navigation. final NavigationVersion navigationVersion = siteDescriptor.getNavigationVersion(); navigationVersion.setDefaultPageName(page); } /** * Sets Vaadin component to Ilves site page. * @param page the page * @param slot the slot * @param componentClass the component class */ public static void setPageComponent(final String page, final String slot, final Class<? extends Component> componentClass) { // Get default site descriptor. final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); ViewDescriptor viewDescriptor = null; for (final ViewDescriptor candidateDescriptor : siteDescriptor.getViewDescriptors()) { if (candidateDescriptor.getName().equals(page)) { viewDescriptor = candidateDescriptor; } } if (viewDescriptor == null) { // Describe custom view. viewDescriptor = new ViewDescriptor(page, DefaultValoView.class); siteDescriptor.getViewDescriptors().add(viewDescriptor); } // Place example Vaadin component to content slot in the view. viewDescriptor.setComponentClass(slot, componentClass); } /** * Sets Viewlet to Ilves site page. * @param page the page * @param slot the slot * @param viewletClass the viewlet class */ public static void setPageViewlet(final String page, final String slot, final Class<? extends Viewlet> viewletClass) { // Get default site descriptor. final SiteDescriptor siteDescriptor = DefaultSiteUI.getContentProvider().getSiteDescriptor(); ViewDescriptor viewDescriptor = null; for (final ViewDescriptor candidateDescriptor : siteDescriptor.getViewDescriptors()) { if (candidateDescriptor.getName().equals(page)) { viewDescriptor = candidateDescriptor; } } if (viewDescriptor == null) { // Describe custom view. viewDescriptor = new ViewDescriptor(page, DefaultValoView.class); siteDescriptor.getViewDescriptors().add(viewDescriptor); } // Place example Vaadin component to content slot in the view. viewDescriptor.setViewletClass(slot, viewletClass); } /** * Gets current user. * @return the current user */ public static User getCurrentUser() { return ((SecurityProviderSessionImpl) Site.getCurrent().getSecurityProvider()).getUserFromSession(); } /** * Gets the current company. * @return the current company */ public static Company getCurrentCompany() { return Site.getCurrent().getSiteContext().getObject(Company.class); } /** * Add thread safe API object to JSON RPC API servlet. * @param apiInterface the API interface * @param apiImplementation the API implementation */ public static void addApi(final Class apiInterface, final Class<? extends ApiImplementation> apiImplementation) { ApiServlet.addApi(apiInterface, apiImplementation); } }