This content has been marked as final.
Show 7 replies
-
1. Re: probleme with
eagleit Jun 14, 2007 12:51 PM (in response to eagleit)DashboardManager.java :
package fr.cpage.PersonnalizePortlet.backingbean; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.faces.context.FacesContext; import javax.faces.model.SelectItem; import org.jboss.portal.core.admin.ui.actions.WindowComparator; import org.jboss.portal.core.model.content.Content; import org.jboss.portal.core.model.content.ContentType; import org.jboss.portal.core.model.instance.Instance; import org.jboss.portal.core.model.instance.InstanceContainer; import org.jboss.portal.core.model.portal.DuplicatePortalObjectException; import org.jboss.portal.core.model.portal.Page; import org.jboss.portal.core.model.portal.Portal; import org.jboss.portal.core.model.portal.PortalObject; import org.jboss.portal.core.model.portal.PortalObjectContainer; import org.jboss.portal.core.model.portal.PortalObjectId; import org.jboss.portal.core.model.portal.Window; import org.jboss.portal.theme.LayoutService; import org.jboss.portal.theme.PortalLayout; import org.jboss.portal.theme.ThemeConstants; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.Scope; /** * */ @Name("dashboardManager") @Scope(ScopeType.SESSION) public class DashboardManager implements Serializable { private static final PortalObjectId dashboardId = PortalObjectId.parse("/dashboard", PortalObjectId.CANONICAL_FORMAT); // liste des portlets disponible en SelectItem pour les afficher dans // MaPage.xhtml List<String> lstPortletDispo; List<Instance> lstPortletDispoObj; // Nom de la portlet sélectionnée String selectedPortletName; // liste des layouts disponible en SelectItem pour les afficher dans // MaPage.xhtml List<String> lstLayouts; List<PortalLayout> lstLayoutsObject; // liste des pages disponible en SelectItem pour les afficher dans // MaPage.xhtml List<String> lstPages; // PortalObjectContainer = conteneur de tous les portails déployés sur jboss public PortalObjectContainer portalObjectContainer; public LayoutService layoutService; public InstanceContainer instanceContainer; // portail de l'utilisateur connecté Portal userPortal; // nom de l'utilisateur connecté String userId; // portletInfo injecté grâce au service @In(create = true) PortletInfo portletInfo; // liste des windows dans une page List<PortalObject> lstWindows; // clé : nom de la région valeur : nom de la région + portlet dans cette // région Map<String, Region> mapRegions; // Nom de la région sélectionnée String selectedRegionName; // Nom de la page sélectionnée String selectedPageName; // Position de la portlet dans la région int orderPortlet; // object de la page sélectionnée PortalObject selectedPage; String windowName; int nbWindowName; String infosPortlet; // Constructeur @Create public void initialize() { // PortalObjectContainer = conteneur de tous les portails déployés sur jboss } initLstPortletDispo(); initLstLayouts(); initUser(); initLstPages(); initLstRegions(); initLstWindows(); } /** * Initialisation de la liste des portlets disponibles */ public void initLstPortletDispo() { // chargement de la liste de Portlets Définitions this.lstPortletDispo = new ArrayList<String>(); this.lstPortletDispoObj = new ArrayList<Instance>(); // listes des portlets dans la collection colIntances Collection<Instance> colInstances = instanceContainer.getDefinitions(); // Chargement de la liste des porlets dans notre liste (pas triée) for (Instance instance : colInstances) { // Ajout portlet par portlet dans // la liste de SelectItem this.lstPortletDispo.add(instance.getId()); this.lstPortletDispoObj.add(instance); } // tri par ordre alphabétique Collections.sort(this.lstPortletDispo); } /** * Initialisation de la liste des layouts disponibles */ public void initLstLayouts() { // chargement de la liste de Layouts this.lstLayouts = new ArrayList<String>(); this.lstLayoutsObject = new ArrayList<PortalLayout>(); this.portletInfo.getPortletContext().getAttribute("LayoutService"); // liste des layouts dans la collection colLayouts Collection<PortalLayout> colLayouts = layoutService.getLayouts(); // Chargement de la liste des layouts dans notre liste (pas triée) for (PortalLayout layout : colLayouts) { // Ajout layout par layout dans la // liste de SelectItem this.lstLayouts.add(layout.getLayoutInfo().getName()); this.lstLayoutsObject.add(layout); } } /** * initialise le nom de utilisateur connecté */ public void initUser() { // Get user name this.userId = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser(); } /** * Initialisation de la liste des pages disponibles * * @param object conteneur de tous les objets dans les potails */ public void initLstPages() { // chargement de la liste des pages this.lstPages = new ArrayList<String>(); userPortal = (Portal)portalObjectContainer.getObject(dashboardId).getChild(userId); // Collection des objects appartenant à utilisateur = pages contenues dans // le dashboard Collection<PortalObject> colPages = this.userPortal.getChildren(); for (PortalObject page : colPages) { // Ajout page par page dans la liste // de SelectItem this.lstPages.add(page.getName()); } } /** * Initialisation de la map des regions disponibles + les portlets dans cette * région */ public void initLstRegions() { // initialisation de lstRegions this.selectedPage = this.userPortal.getChild(this.selectedPageName); this.mapRegions = new LinkedHashMap<String, Region>(); // nom du layout de la page en cours String layoutName = this.selectedPage.getProperty("layout.id"); // object layout de la page en cours PortalLayout layout = getLayout(layoutName); // On fait une liste de toutes les régions de ce layout Collection<String> colRegions = layout.getLayoutInfo().getRegionNames(); // On les ajoute dans la liste d'items pour pourvoir les utiliser avec le // SelectManyMenu for (String region : colRegions) { // si la région est "navigation", on l'ajoute pas if (!"navigation".equals(region)) { this.mapRegions.put(region, new Region(region)); } } } /** * Retourne l'objet PortalLayout dont l'identifiant est lay * * @param lay identifiant du layout * @return l'objet PortalLayout */ private PortalLayout getLayout(String lay) { int index = this.lstLayouts.indexOf(lay); PortalLayout retLayout = this.lstLayoutsObject.get(index); return retLayout; } /** * Action changer de page, liés au boutton dans la jsp */ public void actionSelectedPageChange() { // object PortalObject de la page en cours System.out.println("----------------DEBUG" + selectedPageName); initLstPages(); initLstRegions(); initLstWindows(); } /** * Action pour ajouter une window dans une page donnée, avec une région donnée */ public void actionAddWindow() { Page page = (Page) this.selectedPage; try { String instanceName = this.selectedPortletName; String nameWindow = this.selectedPortletName.replaceAll("Instance", "Window"); nameWindow = nameWindow + (int) (100 * Math.random()); Window window = page.createWindow(nameWindow, ContentType.PORTLET, instanceName); Content content = window.getContent(); window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_REGION, this.selectedRegionName); window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER, "" + Integer.MAX_VALUE); reinitOrderWindows(window); //this.portletInfo.getPortletContext().setAttribute("PortalObjectContainer", portalObjectContainer); //this.portletInfo.getPortletContext().setAttribute("InstanceContainer", instanceContainer); } catch (DuplicatePortalObjectException unexpected) { unexpected.printStackTrace(); } } private void reinitOrderWindows(Window window) { // Get the windows belonging to the selected region sorted by order List windows = new ArrayList(); for (Iterator i = selectedPage.getChildren(PortalObject.WINDOW_MASK).iterator();i.hasNext();) { Window tmp = (Window)i.next(); if (selectedRegionName.equals(tmp.getProperty(ThemeConstants.PORTAL_PROP_REGION))) { windows.add(tmp); } } // Add the created one windows.add(window); // Update the order states for (int i = 0;i < windows.size();i++) { Window tmp = (Window)windows.get(i); tmp.setDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER, "" + i); } } public void changeSelectedPortlet() { int index = this.lstPortletDispoObj.indexOf(this.selectedPortletName); Instance porlet = this.lstPortletDispoObj.get(index); String idAttribute = porlet.INSTANCE_ID_ATTRIBUTE; String id = porlet.getId(); this.infosPortlet = "Id de l'attribut de la portlet : "; this.infosPortlet += idAttribute; this.infosPortlet += "\n id de la portlet : "; this.infosPortlet += id; } /** * initialisation de la liste des windows dans la page en cours */ public void initLstWindows() { this.lstWindows = new ArrayList<PortalObject>(); Collection<PortalObject> colWindows = this.selectedPage.getChildren(PortalObject.WINDOW_MASK); for (PortalObject window : colWindows) { this.lstWindows.add(window); String region = window.getProperty(ThemeConstants.PORTAL_PROP_REGION); Region reg = this.mapRegions.get(region); reg.addWindow(window.getName()); } } /** * Retourne la valeur de lstPortletDispo. * * @return valeur de lstPortletDispo. */ public List<String> getLstPortletDispo() { return this.lstPortletDispo; } /** * Définit la valeur de lstPortletDispo. * * @param lstPortletDispo valeur de lstPortletDispo à définir. */ public void setLstPortletDispo(List<String> lstPortletDispo) { this.lstPortletDispo = lstPortletDispo; } /** * Retourne la valeur de lstLayouts. * * @return valeur de lstLayouts. */ public List<String> getLstLayouts() { return this.lstLayouts; } /** * Définit la valeur de lstLayouts. * * @param lstLayouts valeur de lstLayouts à définir. */ public void setLstLayouts(List<String> lstLayouts) { this.lstLayouts = lstLayouts; } /** * Retourne la valeur de lstPages. * * @return valeur de lstPages. */ public List<String> getLstPages() { return this.lstPages; } /** * Définit la valeur de lstPages. * * @param lstPages valeur de lstPages à définir. */ public void setLstPages(List<String> lstPages) { this.lstPages = lstPages; } /** * Retourne la valeur de lstRegions. * * @return valeur de lstRegions. */ public List<String> getLstRegions() { List<String> lstRegion = new ArrayList<String>(); lstRegion.addAll(this.mapRegions.keySet()); return lstRegion; } public List<Region> getLstRegionObj() { List<Region> lstRegion = new ArrayList<Region>(); lstRegion.addAll(this.mapRegions.values()); return lstRegion; } /** * Retourne la valeur de userId. * * @return valeur de userId. */ public String getUserId() { return this.userId; } /** * Définit la valeur de userId. * * @param userId valeur de userId à définir. */ public void setUserId(String userId) { this.userId = userId; } /** * Retourne la valeur de selectedPageName. * * @return valeur de selectedPageName. */ public String getSelectedPageName() { return this.selectedPageName; } /** * Définit la valeur de selectedPageName. * * @param selectedPageName valeur de selectedPageName à définir. */ public void setSelectedPageName(String selectedPageName) { this.selectedPageName = selectedPageName; } /** * Retourne la valeur de selectedPortletName. * * @return valeur de selectedPortletName. */ public String getSelectedPortletName() { return this.selectedPortletName; } /** * Définit la valeur de selectedPortletName. * * @param selectedPortletName valeur de selectedPortletName à définir. */ public void setSelectedPortletName(String selectedPortletName) { this.selectedPortletName = selectedPortletName; } /** * Retourne la valeur de selectedRegionName. * * @return valeur de selectedRegionName. */ public String getSelectedRegionName() { return this.selectedRegionName; } /** * Définit la valeur de selectedRegionName. * * @param selectedRegionName valeur de selectedRegionName à définir. */ public void setSelectedRegionName(String selectedRegionName) { this.selectedRegionName = selectedRegionName; } /** * Retourne la valeur de orderPortlet. * * @return valeur de orderPortlet. */ public int getOrderPortlet() { return this.orderPortlet; } /** * Définit la valeur de orderPortlet. * * @param orderPortlet valeur de orderPortlet à définir. */ public void setOrderPortlet(int orderPortlet) { this.orderPortlet = orderPortlet; } /** * Retourne la valeur de infosPortlet. * * @return valeur de infosPortlet. */ public String getInfosPortlet() { return this.infosPortlet; } /** * Définit la valeur de infosPortlet. * * @param infosPortlet valeur de infosPortlet à définir. */ public void setInfosPortlet(String infosPortlet) { this.infosPortlet = infosPortlet; } /** * Retourne la valeur de portalObjectContainer. * * @return valeur de portalObjectContainer. */ public PortalObjectContainer getPortalObjectContainer() { return this.portalObjectContainer; } /** * Définit la valeur de portalObjectContainer. * * @param portalObjectContainer valeur de portalObjectContainer à définir. */ public void setPortalObjectContainer(PortalObjectContainer portalObjectContainer) { this.portalObjectContainer = portalObjectContainer; } /** * Retourne la valeur de instanceContainer. * * @return valeur de instanceContainer. */ public InstanceContainer getInstanceContainer() { return this.instanceContainer; } /** * Définit la valeur de instanceContainer. * * @param instanceContainer valeur de instanceContainer à définir. */ public void setInstanceContainer(InstanceContainer instanceContainer) { this.instanceContainer = instanceContainer; } /** * Retourne la valeur de layoutService. * * @return valeur de layoutService. */ public LayoutService getLayoutService() { return this.layoutService; } /** * Définit la valeur de layoutService. * * @param layoutService valeur de layoutService à définir. */ public void setLayoutService(LayoutService layoutService) { this.layoutService = layoutService; } }
-
2. Re: probleme with
eagleit Jun 14, 2007 12:53 PM (in response to eagleit)components.xml :
<components> <component name="dashboardManager"> <property name="portalObjectContainer"> #{applicationScope.PortalObjectContainer} </property> <property name="layoutService"> #{applicationScope.LayoutService} </property> <property name="instanceContainer"> #{applicationScope.InstanceContainer} </property> </component> </components>
-
3. Re: probleme with
eagleit Jun 14, 2007 12:54 PM (in response to eagleit)Have you solution ?
Thanks. Regards -
4. Re: probleme with
eagleit Jun 15, 2007 4:57 AM (in response to eagleit)Sorry for the bad title.
So i use the function page.createWindow , the window is well stored in the database, but unfortunately the window is not visible in my portal , even after logout/login. the window just doesn't appear. I think my portalObjectContainer is not reinjected. The portlet Perzonalize bundled with Jboss Portlet works just fine.* Action pour ajouter une window dans une page donnée, avec une région donnée */ public void actionAddWindow() { Page page = (Page) this.selectedPage; try { String instanceName = this.selectedPortletName; String nameWindow = this.selectedPortletName.replaceAll("Instance", "Window"); nameWindow = nameWindow + (int) (100 * Math.random()); Window window = page.createWindow(nameWindow, ContentType.PORTLET, instanceName); Content content = window.getContent(); window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_REGION, this.selectedRegionName); window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER, "" + Integer.MAX_VALUE); reinitOrderWindows(window); //this.portletInfo.getPortletContext().setAttribute("PortalObjectContainer", portalObjectContainer); //this.portletInfo.getPortletContext().setAttribute("InstanceContainer", instanceContainer); } catch (DuplicatePortalObjectException unexpected) { unexpected.printStackTrace(); } }
Sorry for the poor english ;)
Best Regards. -
5. Re: probleme with
theute Jun 17, 2007 8:32 PM (in response to eagleit)Beware, you are using a lot of Internal API, your code can easily break on future releases of JBoss Portal.
-
6. Re: probleme with
eagleit Jun 18, 2007 4:35 AM (in response to eagleit)Ok thanks. But where it can break ??
-
7. Re: probleme with
theute Jun 18, 2007 6:42 AM (in response to eagleit)If you remove /sec/ then the portal has no way to tell that the URL has to be secured and forward to https.