From 375fa3258019744443dd5d3ec6452c28c20a9a2a Mon Sep 17 00:00:00 2001 From: jensp Date: Sat, 6 Aug 2011 19:08:07 +0000 Subject: [PATCH] =?UTF-8?q?PublicPersonalProfile:=20Navigation=20funktions?= =?UTF-8?q?f=C3=A4hig,=20inkl.=20Anzeige=20der=20verkn=C3=BCpften=20Conten?= =?UTF-8?q?t-Items?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@1054 8810af33-2d31-482b-a856-94f89814c4df --- .../src/ccm-cms-publicpersonalprofile.config | 2 + .../PublicPersonalProfileConfig.java | 30 ++++ ...PersonalProfileConfig_parameter.properties | 5 + .../PublicPersonalProfileXmlGenerator.java | 25 ++++ .../PublicPersonalProfiles.java | 10 ++ .../PublicPersonalProfilesInitializer.java | 15 +- .../PublicPersonalProfilesLoader.java | 7 +- .../PublicPersonalProfilesServlet.java | 128 +++++++++++++++++- .../src/empty.pdl.mf | 0 .../web/WEB-INF/web.publicpersonalprofile.xml | 18 +++ .../apps/publicpersonalprofile/xsl/index.xsl | 6 +- .../xsl/PublicPersonalProfile.xsl | 9 ++ 12 files changed, 237 insertions(+), 18 deletions(-) create mode 100644 ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileConfig.java create mode 100644 ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileConfig_parameter.properties create mode 100644 ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileXmlGenerator.java create mode 100644 ccm-cms-publicpersonalprofile/src/empty.pdl.mf create mode 100644 ccm-cms-publicpersonalprofile/web/WEB-INF/web.publicpersonalprofile.xml rename {ccm-sci-publications => ccm-cms-publicpersonalprofile}/web/__ccm__/apps/publicpersonalprofile/xsl/index.xsl (92%) create mode 100644 ccm-cms-publicpersonalprofile/web/packages/publicpersonalprofile/xsl/PublicPersonalProfile.xsl diff --git a/ccm-cms-publicpersonalprofile/src/ccm-cms-publicpersonalprofile.config b/ccm-cms-publicpersonalprofile/src/ccm-cms-publicpersonalprofile.config index a542fac7b..6c7222f2a 100644 --- a/ccm-cms-publicpersonalprofile/src/ccm-cms-publicpersonalprofile.config +++ b/ccm-cms-publicpersonalprofile/src/ccm-cms-publicpersonalprofile.config @@ -2,4 +2,6 @@ + diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileConfig.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileConfig.java new file mode 100644 index 000000000..f8f7f9557 --- /dev/null +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileConfig.java @@ -0,0 +1,30 @@ +package com.arsdigita.cms.publicpersonalprofile; + +import com.arsdigita.runtime.AbstractConfig; +import com.arsdigita.util.parameter.Parameter; +import com.arsdigita.util.parameter.StringParameter; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicPersonalProfileConfig extends AbstractConfig { + + private final Parameter homeNavItemLabels; + + public PublicPersonalProfileConfig() { + homeNavItemLabels = new StringParameter( + "com.arsdigita.cms.publicpersonalprofile.navitem.home.labels", + Parameter.REQUIRED, + "en:Home, de:Allgemein"); + + register(homeNavItemLabels); + + loadInfo(); + } + + public final String getHomeNavItemLabels() { + return (String) get(homeNavItemLabels); + } +} diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileConfig_parameter.properties b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileConfig_parameter.properties new file mode 100644 index 000000000..b68569788 --- /dev/null +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileConfig_parameter.properties @@ -0,0 +1,5 @@ +com.arsdigita.cms.publicpersonalprofile.navitem.home.labels.title = The labels for the home link of a profile +com.arsdigita.cms.publicpersonalprofile.navitem.home.labels.purpose = The labels for the home link of a profile +com.arsdigita.cms.publicpersonalprofile.navitem.home.labels.example = en:Home,de:Start +com.arsdigita.cms.publicpersonalprofile.navitem.home.labels.format = [String] + diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileXmlGenerator.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileXmlGenerator.java new file mode 100644 index 000000000..3d2c34b62 --- /dev/null +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfileXmlGenerator.java @@ -0,0 +1,25 @@ +package com.arsdigita.cms.publicpersonalprofile; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class PublicPersonalProfileXmlGenerator extends SimpleXMLGenerator { + + private ContentItem item; + + public PublicPersonalProfileXmlGenerator(final ContentItem item) { + this.item = item; + } + + @Override + public ContentItem getContentItem(final PageState state) { + return item; + } + +} diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfiles.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfiles.java index 4d184281a..5454d1187 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfiles.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfiles.java @@ -15,6 +15,12 @@ public class PublicPersonalProfiles extends Application { public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.publicpersonalprofile.PublicPersonalProfile"; + private static PublicPersonalProfileConfig config = + new PublicPersonalProfileConfig(); + + static { + config.load(); + } public PublicPersonalProfiles(final DataObject dobj) { super(dobj); @@ -30,6 +36,10 @@ public class PublicPersonalProfiles extends Application { this(new OID(BASE_DATA_OBJECT_TYPE, id)); } + public static PublicPersonalProfileConfig getConfig() { + return config; + } + @Override public String getServletPath() { return "/profiles/"; diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesInitializer.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesInitializer.java index ec5951a48..17312a6f0 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesInitializer.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesInitializer.java @@ -1,5 +1,6 @@ package com.arsdigita.cms.publicpersonalprofile; +import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItem; import com.arsdigita.db.DbHelper; import com.arsdigita.domain.DomainObject; import com.arsdigita.domain.DomainObjectFactory; @@ -34,13 +35,13 @@ public class PublicPersonalProfilesInitializer extends CompoundInitializer { DomainObjectFactory.registerInstantiator( PublicPersonalProfiles.BASE_DATA_OBJECT_TYPE, - new ACSObjectInstantiator() { + new ACSObjectInstantiator() { - @Override - public DomainObject doNewInstance( - final DataObject dataObject) { - return new PublicPersonalProfiles(dataObject); - } - }); + @Override + public DomainObject doNewInstance( + final DataObject dataObject) { + return new PublicPersonalProfiles(dataObject); + } + }); } } diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesLoader.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesLoader.java index fd8d3e410..81641fbfe 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesLoader.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesLoader.java @@ -1,5 +1,6 @@ package com.arsdigita.cms.publicpersonalprofile; +import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItem; import com.arsdigita.domain.DomainObject; import com.arsdigita.kernel.ACSObjectInstantiator; import com.arsdigita.kernel.Kernel; @@ -73,9 +74,9 @@ public class PublicPersonalProfilesLoader extends PackageLoader { Application.createApplication( PublicPersonalProfiles.BASE_DATA_OBJECT_TYPE, - "profiles", - "PublicPersonalProfiles", - null); + "profiles", + "PublicPersonalProfiles", + null); } }.run(); diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java index a4cc9cc65..6d6475895 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java @@ -2,9 +2,15 @@ package com.arsdigita.cms.publicpersonalprofile; import com.arsdigita.bebop.Page; import com.arsdigita.bebop.PageFactory; +import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.contentassets.RelatedLink; import com.arsdigita.cms.contenttypes.GenericPerson; +import com.arsdigita.cms.contenttypes.Link; import com.arsdigita.cms.contenttypes.PublicPersonalProfile; +import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItem; +import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItemCollection; +import com.arsdigita.dispatcher.DispatcherHelper; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.Session; @@ -16,6 +22,8 @@ import com.arsdigita.web.BaseApplicationServlet; import com.arsdigita.xml.Document; import com.arsdigita.xml.Element; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -82,7 +90,7 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet { Label label;*/ page = PageFactory.buildPage("PublicPersonalProfile", - "Hello World from profiles"); + ""); /*form = new Form("HelloWorld");*/ if (pathTokens.length < 1) { @@ -157,7 +165,33 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet { } profileElem.setText(owner.getFullName()); - createNavigation(profile, root); + createNavigation(profile, root, navPath); + + if (navPath == null) { + //ToDo: Show start page. + } else { + final DataCollection links = + RelatedLink.getRelatedLinks(profile, + PublicPersonalProfile.LINK_LIST_NAME); + links.addFilter(String.format("linkTitle = '%s'", navPath)); + + if (links.size() == 0) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } else { + links.next(); + final RelatedLink link = + (RelatedLink) DomainObjectFactory. + newInstance(links.getDataObject()); + final ContentItem item = link.getTargetItem(); + final PublicPersonalProfileXmlGenerator generator = + new PublicPersonalProfileXmlGenerator( + item); + generator.generateXML(new PageState(page, request, + response), + root, ""); + } + } } @@ -171,7 +205,25 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet { } private void createNavigation(final PublicPersonalProfile profile, - final Element root) { + final Element root, + final String navPath) { + PublicPersonalProfileConfig config = PublicPersonalProfiles.getConfig(); + + String homeLabelsStr = config.getHomeNavItemLabels(); + + Map homeLabels = new HashMap(); + String[] homeLabelsArry = homeLabelsStr.split(","); + String[] homeLabelSplit; + for (String homeLabelEntry : homeLabelsArry) { + homeLabelSplit = homeLabelEntry.split(":"); + if (homeLabelSplit.length == 2) { + homeLabels.put(homeLabelSplit[0].trim(), + homeLabelSplit[1].trim()); + } else { + continue; + } + } + Element navRoot = root.newChildElement("nav:categoryMenu", "http://ccm.redhat.com/london/navigation"); @@ -195,11 +247,77 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet { navHome.addAttribute("AbstractTree", "AbstractTree"); navHome.addAttribute("description", ""); navHome.addAttribute("id", profile.getID().toString()); - navHome.addAttribute("isSelected", "true"); + if (navPath == null) { + navHome.addAttribute("isSelected", "true"); + } else { + navHome.addAttribute("isSelected", "false"); + } navHome.addAttribute("sortKey", ""); - navHome.addAttribute("title", "Allgemein"); + String homeLabel = homeLabels.get(DispatcherHelper.getNegotiatedLocale(). + getLanguage()); + if (homeLabel == null) { + navHome.addAttribute("title", "Home"); + } else { + navHome.addAttribute("title", homeLabel); + } navHome.addAttribute("url", String.format("/ccm/%s", profile.getProfileUrl())); + //Get the available Navigation items + PublicPersonalProfileNavItemCollection navItems = + new PublicPersonalProfileNavItemCollection(); + navItems.addLanguageFilter(DispatcherHelper.getNegotiatedLocale(). + getLanguage()); + final Map navItemMap = + new HashMap(); + PublicPersonalProfileNavItem navItem; + while (navItems.next()) { + navItem = navItems.getNavItem(); + navItemMap.put(navItem.getKey(), navItem); + } + + //Get the related links of the profiles + DataCollection links = + RelatedLink.getRelatedLinks(profile, + PublicPersonalProfile.LINK_LIST_NAME); + links.addOrder(Link.ORDER); + RelatedLink link; + String navLinkKey; + Element navElem; + while (links.next()) { + link = (RelatedLink) DomainObjectFactory.newInstance(links. + getDataObject()); + + navLinkKey = link.getTitle(); + navItem = navItemMap.get(navLinkKey); + + if (navItem == null) { + //ToDo + } + + navElem = + navList.newChildElement("nav:category", + "http://ccm.redhat.com/london/navigation"); + navElem.addAttribute("AbstractTree", "AbstractTree"); + navElem.addAttribute("description", ""); + //navHome.addAttribute("id", ""); + if ((navPath != null) && navPath.equals(navLinkKey)) { + navElem.addAttribute("isSelected", "true"); + } else { + navElem.addAttribute("isSelected", "false"); + } + navElem.addAttribute("sortKey", ""); + if (navItem == null) { + navElem.addAttribute("title", navLinkKey); + } else { + navElem.addAttribute("title", navItem.getLabel()); + } + navElem.addAttribute("url", String.format("/ccm/profiles/%s/%s", + profile.getProfileUrl(), + navLinkKey)); + + } + + } } diff --git a/ccm-cms-publicpersonalprofile/src/empty.pdl.mf b/ccm-cms-publicpersonalprofile/src/empty.pdl.mf new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-cms-publicpersonalprofile/web/WEB-INF/web.publicpersonalprofile.xml b/ccm-cms-publicpersonalprofile/web/WEB-INF/web.publicpersonalprofile.xml new file mode 100644 index 000000000..53fe15ecd --- /dev/null +++ b/ccm-cms-publicpersonalprofile/web/WEB-INF/web.publicpersonalprofile.xml @@ -0,0 +1,18 @@ + + + + + + PublicPersonalProfiles + com.arsdigita.cms.publicpersonalprofile.PublicPersonalProfilesServlet + + + + PublicPersonalProfiles + /profiles/* + + + \ No newline at end of file diff --git a/ccm-sci-publications/web/__ccm__/apps/publicpersonalprofile/xsl/index.xsl b/ccm-cms-publicpersonalprofile/web/__ccm__/apps/publicpersonalprofile/xsl/index.xsl similarity index 92% rename from ccm-sci-publications/web/__ccm__/apps/publicpersonalprofile/xsl/index.xsl rename to ccm-cms-publicpersonalprofile/web/__ccm__/apps/publicpersonalprofile/xsl/index.xsl index c6921a246..94076eb1f 100644 --- a/ccm-sci-publications/web/__ccm__/apps/publicpersonalprofile/xsl/index.xsl +++ b/ccm-cms-publicpersonalprofile/web/__ccm__/apps/publicpersonalprofile/xsl/index.xsl @@ -1,10 +1,10 @@ - + - - + + \ No newline at end of file diff --git a/ccm-cms-publicpersonalprofile/web/packages/publicpersonalprofile/xsl/PublicPersonalProfile.xsl b/ccm-cms-publicpersonalprofile/web/packages/publicpersonalprofile/xsl/PublicPersonalProfile.xsl new file mode 100644 index 000000000..c95ea6f7e --- /dev/null +++ b/ccm-cms-publicpersonalprofile/web/packages/publicpersonalprofile/xsl/PublicPersonalProfile.xsl @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file