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