- Eingebette Anzeige von Profilen (als normales Content-Item) (erfordert Mandalay-Unterstützung)

git-svn-id: https://svn.libreccm.org/ccm/trunk@1105 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-09-07 11:46:53 +00:00
parent eefcdf2029
commit 36e34744d0
5 changed files with 284 additions and 9 deletions

View File

@ -17,7 +17,8 @@
<xrd:property name="/object/owner/contacts"/>
<xrd:property name="/object/owner/contacts/contactentries"/>
<xrd:property name="/object/owner/contacts/address"/>
<xrd:property name="/object/owner/imageAttachments"/>
<xrd:property name="/object/owner/imageAttachments/image"/>
</xrd:associations>
</xrd:adapter>

View File

@ -1,6 +1,7 @@
package com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.ContentPage;
import com.arsdigita.cms.ExtraXMLGenerator;
import com.arsdigita.domain.DataObjectNotFoundException;
import java.math.BigDecimal;
import com.arsdigita.persistence.OID;
@ -8,6 +9,7 @@ import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.util.Assert;
import java.util.List;
/**
*
@ -81,4 +83,13 @@ public class PublicPersonalProfile extends ContentPage {
public void setProfileUrl(String profileUrl) {
set(PROFILE_URL, profileUrl);
}
@Override
public List<ExtraXMLGenerator> getExtraXMLGenerators() {
final List<ExtraXMLGenerator> generators = super.getExtraXMLGenerators();
generators.add(new PublicPersonalProfileExtraXmlGenerator());
return generators;
}
}

View File

@ -0,0 +1,128 @@
package com.arsdigita.cms.contenttypes;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ExtraXMLGenerator;
import com.arsdigita.cms.contentassets.RelatedLink;
import com.arsdigita.cms.publicpersonalprofile.ContentGenerator;
import com.arsdigita.cms.publicpersonalprofile.PublicPersonalProfileXmlGenerator;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.xml.Element;
import java.lang.reflect.InvocationTargetException;
/**
* Generates the extra XML output for a profile for the embedded view.
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicPersonalProfileExtraXmlGenerator implements ExtraXMLGenerator {
public static final String SHOW_ITEM_PARAM = "showItem";
public void generateXML(final ContentItem item,
final Element element,
final PageState state) {
if (!(item instanceof PublicPersonalProfile)) {
throw new IllegalArgumentException(
"PublicPersonalProfileExtraXMLGenerator can only process PublicPersonalProfile Items");
}
final PublicPersonalProfile profile = (PublicPersonalProfile) item;
final String showItem = state.getRequest().getParameter(SHOW_ITEM_PARAM);
final Element navigation = element.newChildElement("profileNavigation");
final PublicPersonalProfileXmlUtil util =
new PublicPersonalProfileXmlUtil();
util.createNavigation(profile, navigation, showItem);
if ((showItem != null) && !showItem.trim().isEmpty()) {
final Element profileContent = element.newChildElement(
"profileContent");
final DataCollection links =
RelatedLink.getRelatedLinks(profile,
PublicPersonalProfile.LINK_LIST_NAME);
links.addFilter(String.format("linkTitle = '%s'",
showItem));
if (links.size() == 0) {
profileContent.newChildElement(
"notFound");
} else {
PublicPersonalProfileNavItemCollection navItems =
new PublicPersonalProfileNavItemCollection();
navItems.addLanguageFilter(DispatcherHelper.getNegotiatedLocale().
getLanguage());
navItems.addKeyFilter(showItem);
navItems.next();
if (navItems.getNavItem().getGeneratorClass()
!= null) {
try {
Object generatorObj =
Class.forName(navItems.getNavItem().
getGeneratorClass()).getConstructor().
newInstance();
if (generatorObj instanceof ContentGenerator) {
final ContentGenerator generator =
(ContentGenerator) generatorObj;
generator.generateContent(profileContent, profile.
getOwner());
} else {
throw new UncheckedWrapperException(String.format(
"Class '%s' is not a ContentGenerator.",
navItems.getNavItem().
getGeneratorClass()));
}
} catch (InstantiationException ex) {
throw new UncheckedWrapperException(
"Failed to create generator", ex);
} catch (IllegalAccessException ex) {
throw new UncheckedWrapperException(
"Failed to create generator", ex);
} catch (IllegalArgumentException ex) {
throw new UncheckedWrapperException(
"Failed to create generator", ex);
} catch (InvocationTargetException ex) {
throw new UncheckedWrapperException(
"Failed to create generator", ex);
} catch (ClassNotFoundException ex) {
throw new UncheckedWrapperException(
"Failed to create generator", ex);
} catch (NoSuchMethodException ex) {
throw new UncheckedWrapperException(
"Failed to create generator", ex);
}
} else {
links.next();
final RelatedLink link =
(RelatedLink) DomainObjectFactory.
newInstance(links.getDataObject());
final ContentItem targetItem = link.getTargetItem();
final PublicPersonalProfileXmlGenerator generator =
new PublicPersonalProfileXmlGenerator(
targetItem);
generator.generateXML(state,
profileContent,
"");
}
navItems.close();
}
}
}
public void addGlobalStateParams(final Page p) {
//Nothing yet
}
}

View File

@ -0,0 +1,137 @@
package com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.contentassets.RelatedLink;
import com.arsdigita.cms.publicpersonalprofile.PublicPersonalProfiles;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.xml.Element;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicPersonalProfileXmlUtil {
private final com.arsdigita.cms.publicpersonalprofile.PublicPersonalProfileConfig config =
PublicPersonalProfiles.
getConfig();
public void createNavigation(final PublicPersonalProfile profile,
final Element root,
final String navPath) {
String homeLabelsStr = config.getHomeNavItemLabels();
Map<String, String> homeLabels = new HashMap<String, String>();
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");
navRoot.addAttribute("id", "categoryMenu");
Element navList =
navRoot.newChildElement("nav:category",
"http://ccm.redhat.com/london/navigation");
navList.addAttribute("AbstractTree", "AbstractTree");
navList.addAttribute("description", "");
navList.addAttribute("id", "");
navList.addAttribute("isSelected", "true");
navList.addAttribute("sortKey", "");
navList.addAttribute("title", "publicPersonalProfileNavList");
navList.addAttribute("url", String.format("/ccm/%s",
profile.getProfileUrl()));
Element navHome =
navList.newChildElement("nav:category",
"http://ccm.redhat.com/london/navigation");
navHome.addAttribute("AbstractTree", "AbstractTree");
navHome.addAttribute("description", "");
navHome.addAttribute("id", profile.getID().toString());
if (navPath == null) {
navHome.addAttribute("isSelected", "true");
} else {
navHome.addAttribute("isSelected", "false");
}
navHome.addAttribute("sortKey", "");
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/profiles/%s",
profile.getProfileUrl()));
//Get the available Navigation items
PublicPersonalProfileNavItemCollection navItems =
new PublicPersonalProfileNavItemCollection();
navItems.addLanguageFilter(DispatcherHelper.getNegotiatedLocale().
getLanguage());
final Map<String, PublicPersonalProfileNavItem> navItemMap =
new HashMap<String, PublicPersonalProfileNavItem>();
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));
navElem.addAttribute("navItem", navLinkKey);
}
}
}

View File

@ -17,10 +17,9 @@ import com.arsdigita.cms.contenttypes.GenericContactEntry;
import com.arsdigita.cms.contenttypes.GenericContactEntryCollection;
import com.arsdigita.cms.contenttypes.GenericPerson;
import com.arsdigita.cms.contenttypes.GenericPersonContactCollection;
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.cms.contenttypes.PublicPersonalProfileXmlUtil;
import com.arsdigita.cms.publicpersonalprofile.ui.PublicPersonalProfileNavItemsAddForm;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.domain.DomainObjectFactory;
@ -39,8 +38,6 @@ import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.rmi.ServerException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -183,7 +180,8 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
"ppp:ownerName", PPP_NS);
profileOwnerName.setText(owner.getFullName());
createNavigation(profile, root, navPath);
final PublicPersonalProfileXmlUtil util = new PublicPersonalProfileXmlUtil();
util.createNavigation(profile, root, navPath);
if (navPath == null) {
final PublicPersonalProfileXmlGenerator generator =
@ -241,7 +239,7 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
generator.generateContent(root, owner);
} else {
throw new ServerException(String.format(
throw new ServletException(String.format(
"Class '%s' is not a ContentGenerator.",
navItems.getNavItem().
getGeneratorClass()));
@ -295,7 +293,7 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
}
private void createNavigation(final PublicPersonalProfile profile,
/*private void createNavigation(final PublicPersonalProfile profile,
final Element root,
final String navPath) {
String homeLabelsStr = config.getHomeNavItemLabels();
@ -406,7 +404,7 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
navLinkKey));
}
}
}*/
private void generateProfileOwnerXml(final Element profileElem,
final GenericPerson owner,