private static <S> Application<S> toPortletModel(UIPortlet<S, ?> uiPortlet) { Application<S> model; PortletState<S> state = uiPortlet.getState(); ApplicationType<S> type = state.getApplicationType(); if (type == ApplicationType.PORTLET) { model = (Application<S>) Application.createPortletApplication(uiPortlet.getStorageId()); } else if (type == ApplicationType.GADGET) { model = (Application<S>) Application.createGadgetApplication(uiPortlet.getStorageId()); } else if (type == ApplicationType.WSRP_PORTLET) { model = (Application<S>) Application.createWSRPApplication(uiPortlet.getStorageId()); } else { throw new AssertionError(); } // model.setStorageName(uiPortlet.getStorageName()); model.setState(state.getApplicationState()); model.setTitle(uiPortlet.getTitle()); model.setWidth(uiPortlet.getWidth()); model.setHeight(uiPortlet.getHeight()); model.setDescription(uiPortlet.getDescription()); model.setShowInfoBar(uiPortlet.getShowInfoBar()); model.setShowApplicationState(uiPortlet.getShowWindowState()); model.setShowApplicationMode(uiPortlet.getShowPortletMode()); model.setDescription(uiPortlet.getDescription()); model.setIcon(uiPortlet.getIcon()); model.setProperties(uiPortlet.getProperties()); model.setTheme(uiPortlet.getTheme()); model.setAccessPermissions(uiPortlet.getAccessPermissions()); model.setModifiable(uiPortlet.isModifiable()); return model; }
/** * Add Application to UiPage * * @param event * @throws Exception */ private static void addApplicationToPage(Event<UIAddNewApplication> event, boolean atStartup) throws Exception { UIPortalApplication uiPortalApp = Util.getUIPortalApplication(); UIPortal uiPortal = uiPortalApp.getShowedUIPortal(); PortalRequestContext pcontext = Util.getPortalRequestContext(); UIDesktopPage uiDesktopPage = uiPortal.findFirstComponentOfType(UIDesktopPage.class); if (uiDesktopPage == null) { pcontext.addUIComponentToUpdateByAjax( uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID)); UIMaskWorkspace maskWorkspace = uiPortalApp.getChildById(UIPortalApplication.UI_MASK_WS_ID); maskWorkspace.createEvent("Close", Event.Phase.DECODE, event.getRequestContext()).broadcast(); pcontext.setFullRender(true); return; } String applicationId = event.getRequestContext().getRequestParameter(UIComponent.OBJECTID); Application application = event.getSource().getApplication(applicationId); ApplicationType appType = application.getType(); UIPortlet uiPortlet = uiDesktopPage.createUIComponent(UIPortlet.class, null, null); ApplicationState appState; // TODO: Check if there 's already a portlet window of this portlet. A CloneApplicationState // should be created in such case appState = new TransientApplicationState<Object>(application.getContentId()); uiPortlet.setState(new PortletState(appState, appType)); uiPortlet.setPortletInPortal(false); if (atStartup) { uiPortlet.getProperties().setProperty("appStatus", "HIDE"); } String portletName = application.getApplicationName(); String displayName = application.getDisplayName(); if (displayName != null) { uiPortlet.setTitle(displayName); } else if (portletName != null) { uiPortlet.setTitle(portletName); } uiPortlet.setDescription(application.getDescription()); List<String> accessPers = application.getAccessPermissions(); String[] accessPermissions = accessPers.toArray(new String[accessPers.size()]); uiPortlet.setAccessPermissions(accessPermissions); // Add portlet to page uiDesktopPage.addChild(uiPortlet); if (uiDesktopPage.isModifiable()) { Page page = (Page) PortalDataMapper.buildModelObject(uiDesktopPage); if (page.getChildren() == null) { page.setChildren(new ArrayList<ModelObject>()); } DataStorage dataService = uiPortalApp.getApplicationComponent(DataStorage.class); dataService.save(page); // Rebuild the uiPage to synchronize (storageId, storageName) mapping page = dataService.getPage(page.getPageId()); page.setModifiable(true); uiDesktopPage.getChildren().clear(); PortalDataMapper.toUIPage(uiDesktopPage, page); } UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID); pcontext.setFullRender(true); pcontext.addUIComponentToUpdateByAjax(uiWorkingWS); }