PublicPersonalProfile: Verwaltungsoberfläche für mögliche Navigationspunkte (noch nicht fertiggestellt!)

git-svn-id: https://svn.libreccm.org/ccm/trunk@1064 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-08-19 19:41:23 +00:00
parent 618ff041d4
commit 5a9c50928f
9 changed files with 762 additions and 154 deletions

View File

@ -29,7 +29,7 @@ association {
object type PublicPersonalProfileNavItem {
BigDecimal[1..1] id = ct_public_personal_profile_nav_items.object_id INTEGER;
BigDecimal[1..1] navItemId = ct_public_personal_profile_nav_items.object_id INTEGER;
String[0..1] key = ct_public_personal_profile_nav_items.key VARCHAR(128);
String[0..1] lang = ct_public_personal_profile_nav_items.lang VARCHAR(2);
String[0..1] label = ct_public_personal_profile_nav_items.label VARCHAR(128);
@ -37,5 +37,7 @@ object type PublicPersonalProfileNavItem {
String[0..1] generatorClass = ct_public_personal_profile_nav_items.generator_class VARCHAR(1024);
unique(key, lang, label);
object key (id);
object key (navItemId);
//reference key ( ct_public_personal_profile_nav_items.id);
}

View File

@ -13,7 +13,7 @@ import java.math.BigDecimal;
*/
public class PublicPersonalProfileNavItem extends DomainObject {
public static final String ID = "id";
public static final String ID = "navItemId";
public static final String KEY = "key";
public static final String LANG = "lang";
public static final String LABEL = "label";
@ -63,6 +63,10 @@ public class PublicPersonalProfileNavItem extends DomainObject {
public final BigDecimal getId() {
return(BigDecimal) get(ID);
}
public final void setId(final BigDecimal id) {
set(ID, id);
}
public final String getKey() {
return (String) get(KEY);

View File

@ -1,9 +1,12 @@
package com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItem;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.SessionManager;
import java.util.ArrayList;
import java.util.List;
/**
*
@ -11,88 +14,170 @@ import com.arsdigita.persistence.SessionManager;
* @version $Id$
*/
public class PublicPersonalProfileNavItemCollection extends DomainCollection {
private Filter keyFilter = null;
private Filter languageFilter = null;
public PublicPersonalProfileNavItemCollection() {
super(SessionManager.getSession().retrieve(PublicPersonalProfileNavItem.BASE_DATA_OBJECT_TYPE));
this(SessionManager.getSession().retrieve(
PublicPersonalProfileNavItem.BASE_DATA_OBJECT_TYPE));
}
public PublicPersonalProfileNavItemCollection(
final DataCollection dataCollection) {
super(dataCollection);
addOrder("navItemOrder, key, lang");
}
public PublicPersonalProfileNavItem getNavItem() {
return new PublicPersonalProfileNavItem(m_dataCollection.getDataObject());
}
public final void addKeyFilter(final String key) {
keyFilter = this.addEqualsFilter(PublicPersonalProfileNavItem.KEY,
key);
keyFilter = this.addEqualsFilter(PublicPersonalProfileNavItem.KEY,
key);
}
public boolean removeKeyFilter(final String key) {
boolean retVal = false;
retVal = this.removeFilter(keyFilter);
if (retVal == true) {
keyFilter = null;
}
}
return retVal;
}
public final void addLanguageFilter(final String language) {
languageFilter = this.addEqualsFilter(PublicPersonalProfileNavItem.LANG,
language);
languageFilter = this.addEqualsFilter(PublicPersonalProfileNavItem.LANG,
language);
}
public boolean removeLanguageFilter(final String language) {
boolean retVal = false;
retVal = this.removeFilter(languageFilter);
if (retVal == true) {
languageFilter = null;
}
}
return retVal;
}
public void removeAllFilters() {
this.removeAllFilters();
}
public final String getKey() {
if (this.isBeforeFirst()) {
this.next();
}
}
return (String) get(PublicPersonalProfileNavItem.KEY);
}
public final String getLanguage() {
if (this.isBeforeFirst()) {
this.next();
}
}
return (String) get(PublicPersonalProfileNavItem.LANG);
}
public PublicPersonalProfileNavItem getNavItem(final String key,
final String language) {
if (!(this.isBeforeFirst()) && key.equals(this.getKey()) && language.equals(this.getLanguage())) {
if (!(this.isBeforeFirst()) && key.equals(this.getKey()) && language.
equals(this.getLanguage())) {
return this.getNavItem();
} else {
this.rewind();
while(this.next()) {
if ( key.equals(this.getKey()) && language.equals(this.getLanguage())) {
while (this.next()) {
if (key.equals(this.getKey()) && language.equals(this.
getLanguage())) {
return this.getNavItem();
}
}
}
return null;
}
public void swapWithNext(final PublicPersonalProfileNavItem navItem) {
final int order1 = navItem.getOrder();
final int order2 = order1 + 1;
final PublicPersonalProfileNavItemCollection navItems1 =
new PublicPersonalProfileNavItemCollection();
navItems1.addFilter(String.format("navItemOrder = %d", order1));
final PublicPersonalProfileNavItemCollection navItems2 =
new PublicPersonalProfileNavItemCollection();
navItems2.addFilter(String.format("navItemOrder = %d", order2));
final List<PublicPersonalProfileNavItem> navItemsList1 =
new ArrayList<PublicPersonalProfileNavItem>();
final List<PublicPersonalProfileNavItem> navItemsList2 =
new ArrayList<PublicPersonalProfileNavItem>();
while (navItems1.next()) {
navItemsList1.add(navItems1.getNavItem());
}
navItems1.rewind();
while (navItems2.next()) {
navItemsList2.add(navItems2.getNavItem());
}
navItems2.rewind();
navItems1.close();
navItems2.close();
for (PublicPersonalProfileNavItem item : navItemsList1) {
item.setOrder(order2);
}
for (PublicPersonalProfileNavItem item : navItemsList2) {
item.setOrder(order1);
}
}
public void swapWithPrevious(final PublicPersonalProfileNavItem navItem) {
final int order1 = navItem.getOrder();
final int order2 = order1 - 1;
final PublicPersonalProfileNavItemCollection navItems1 =
new PublicPersonalProfileNavItemCollection();
navItems1.addFilter(String.format("navItemOrder = %d", order1));
final PublicPersonalProfileNavItemCollection navItems2 =
new PublicPersonalProfileNavItemCollection();
navItems2.addFilter(String.format("navItemOrder = %d", order2));
final List<PublicPersonalProfileNavItem> navItemsList1 =
new ArrayList<PublicPersonalProfileNavItem>();
final List<PublicPersonalProfileNavItem> navItemsList2 =
new ArrayList<PublicPersonalProfileNavItem>();
while (navItems1.next()) {
navItemsList1.add(navItems1.getNavItem());
}
navItems1.rewind();
while (navItems2.next()) {
navItemsList2.add(navItems2.getNavItem());
}
navItems2.rewind();
navItems1.close();
navItems2.close();
for (PublicPersonalProfileNavItem item : navItemsList1) {
item.setOrder(order2);
}
for (PublicPersonalProfileNavItem item : navItemsList2) {
item.setOrder(order1);
}
}
}

View File

@ -29,7 +29,6 @@ import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
import java.math.BigInteger;
import org.apache.log4j.Logger;
/**
@ -131,17 +130,11 @@ public class PublicPersonalProfileNavigationTable
@Override
public int getColumnCount() {
return mockNav.length;
return table.getColumnModel().size();
}
@Override
public boolean nextRow() {
/*if (index < (mockNav.length - 1)) {
index++;
return true;
} else {
return false;
}*/
public boolean nextRow() {
return linkCollection.next();
}

View File

@ -7,3 +7,11 @@ publicpersonalprofile.ui.nav.remove=Remove
publicpersonalprofile.ui.profile_properties.title=Basic properties
publicpersonalprofile.ui.profile_nav.title=Navigation
publicpersonalprofile.ui.profile.nav_add=Add item
publicpersonalprofile.ui.navitem.key=Key
publicpersonalprofile.ui.navitem.lang=Language
publicpersonalprofile.ui.navitem.label=Label
publicpersonalprofile.ui.navitem.generatorclass=Generator
publicpersonalprofile.ui.navitem.edit=Edit
publicpersonalprofile.ui.navitem.delete=Delete
publicpersonalprofile.ui.navitem.up=Up
publicpersonalprofile.ui.navitem.down=Down

View File

@ -7,3 +7,11 @@ publicpersonalprofile.ui.nav.remove=Entfernen
publicpersonalprofile.ui.profile_properties.title=Basiseigenschaften
publicpersonalprofile.ui.profile_nav.title=Navigation
publicpersonalprofile.ui.profile.nav_add=Navigationspunkt hinzuf\u00fcgen
publicpersonalprofile.ui.navitem.key=Key
publicpersonalprofile.ui.navitem.lang=Sprache
publicpersonalprofile.ui.navitem.label=Bezeichnung
publicpersonalprofile.ui.navitem.generatorclass=Generator
publicpersonalprofile.ui.navitem.edit=Bearbeiten
publicpersonalprofile.ui.navitem.delete=L\u00f6schen
publicpersonalprofile.ui.navitem.up=Hoch
publicpersonalprofile.ui.navitem.down=Runter

View File

@ -1,8 +1,19 @@
package com.arsdigita.cms.publicpersonalprofile;
import com.arsdigita.cms.publicpersonalprofile.ui.PublicPersonalProfileNavItemsTable;
import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.ColumnPanel;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormSection;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageFactory;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.contentassets.RelatedLink;
import com.arsdigita.cms.contenttypes.GenericAddress;
@ -15,8 +26,9 @@ 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.ui.PublicPersonalProfileGlobalizationUtil;
import com.arsdigita.cms.publicpersonalprofile.ui.PublicPersonalProfileNavItemsAddForm;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
@ -24,6 +36,7 @@ import com.arsdigita.persistence.Session;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.templating.PresentationManager;
import com.arsdigita.templating.Templating;
import com.arsdigita.toolbox.ui.ApplicationAuthenticationListener;
import com.arsdigita.web.Application;
import com.arsdigita.web.BaseApplicationServlet;
import com.arsdigita.xml.Document;
@ -48,6 +61,7 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
private static final Logger logger =
Logger.getLogger(
PublicPersonalProfilesServlet.class);
private static final String ADMIN = "admin";
private static final String PREVIEW = "preview";
private static final String PPP_NS =
"http://www.arsdigita.com/PublicPersonalProfile/1.0";
@ -99,126 +113,119 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
String navPath = null;
Page page;
/*Form form;
Label label;*/
page = PageFactory.buildPage("PublicPersonalProfile",
"");
/*form = new Form("HelloWorld");*/
if (pathTokens.length < 1) {
//ToDo: Fehlerbehandlung?
} else {
if ((pathTokens.length > 1)
&& PREVIEW.equals(pathTokens[0])) {
preview = true;
profileOwner = pathTokens[1];
if (pathTokens.length > 2) {
navPath = pathTokens[2];
}
} else {
profileOwner = pathTokens[0];
if (pathTokens.length > 1) {
navPath = pathTokens[1];
}
if (ADMIN.equals(pathTokens[0])) {
showAdminPage(page, request, response);
return;
}
}
/*form.add(new Label(String.format("Member: %s", member)));
if (pathTokens.length > 1) {
for(int i = 1; i < pathTokens.length; i++) {
form.add(new Label(String.format("%d: %s", i, pathTokens[i])));
}
}
label = new Label(String.format(
"Hello World! From profiles, path = %s", path));
form.add(label);
page.add(form);*/
page.lock();
Document document = page.buildDocument(request, response);
Element root = document.getRootElement();
//Element test = root.newChildElement("test");
//test.setText("test");
final Session session = SessionManager.getSession();
DataCollection profiles =
session.retrieve(
com.arsdigita.cms.contenttypes.PublicPersonalProfile.BASE_DATA_OBJECT_TYPE);
profiles.addFilter(String.format("profileUrl = '%s'", profileOwner));
if (preview) {
profiles.addFilter(String.format("version = '%s'",
ContentItem.DRAFT));
} else {
profiles.addFilter(String.format("version = '%s'",
ContentItem.LIVE));
}
if (profiles.size() == 0) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
} else if (profiles.size() > 1) {
throw new IllegalStateException(
"More than one matching members found...");
} else {
final PageState state = new PageState(page, request, response);
profiles.next();
PublicPersonalProfile profile =
(PublicPersonalProfile) DomainObjectFactory.
newInstance(profiles.getDataObject());
Element profileElem =
root.newChildElement("ppp:profile", PPP_NS);
GenericPerson owner = profile.getOwner();
if (owner == null) {
throw new IllegalStateException(
"Failed to get owner of profile.");
}
Element profileOwnerName = profileElem.newChildElement(
"ppp:ownerName", PPP_NS);
profileOwnerName.setText(owner.getFullName());
createNavigation(profile, root, navPath);
if (navPath == null) {
generateProfileOwnerXml(profileElem, owner, state);
} 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 {
if (config.getShowPersonInfoEverywhere()) {
generateProfileOwnerXml(profileElem, owner, state);
if (pathTokens.length > 1) {
if (PREVIEW.equals(pathTokens[0])) {
preview = true;
profileOwner = pathTokens[1];
if (pathTokens.length > 2) {
navPath = pathTokens[2];
}
} else {
profileOwner = pathTokens[0];
if (pathTokens.length > 1) {
navPath = pathTokens[1];
}
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, "");
}
}
page.lock();
Document document = page.buildDocument(request, response);
Element root = document.getRootElement();
final Session session = SessionManager.getSession();
DataCollection profiles =
session.retrieve(
com.arsdigita.cms.contenttypes.PublicPersonalProfile.BASE_DATA_OBJECT_TYPE);
profiles.addFilter(String.format("profileUrl = '%s'",
profileOwner));
if (preview) {
profiles.addFilter(String.format("version = '%s'",
ContentItem.DRAFT));
} else {
profiles.addFilter(String.format("version = '%s'",
ContentItem.LIVE));
}
if (profiles.size() == 0) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
} else if (profiles.size() > 1) {
throw new IllegalStateException(
"More than one matching members found...");
} else {
final PageState state = new PageState(page, request,
response);
profiles.next();
PublicPersonalProfile profile =
(PublicPersonalProfile) DomainObjectFactory.
newInstance(profiles.getDataObject());
Element profileElem =
root.newChildElement("ppp:profile", PPP_NS);
GenericPerson owner = profile.getOwner();
if (owner == null) {
throw new IllegalStateException(
"Failed to get owner of profile.");
}
Element profileOwnerName = profileElem.newChildElement(
"ppp:ownerName", PPP_NS);
profileOwnerName.setText(owner.getFullName());
createNavigation(profile, root, navPath);
if (navPath == null) {
generateProfileOwnerXml(profileElem, owner, state);
} 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 {
if (config.getShowPersonInfoEverywhere()) {
generateProfileOwnerXml(profileElem, owner,
state);
}
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, "");
}
}
}
PresentationManager presentationManager = Templating.
getPresentationManager();
presentationManager.servePage(document, request, response);
}
PresentationManager presentationManager = Templating.
getPresentationManager();
presentationManager.servePage(document, request, response);
}
}
@ -390,15 +397,16 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
contactXml.generateXML(state, profileOwnerElem, "");*/
}
}
DataCollection imgAttachments = (DataCollection) owner.get("imageAttachments");
DataCollection imgAttachments = (DataCollection) owner.get(
"imageAttachments");
if (imgAttachments.size() > 0) {
imgAttachments.next();
final DataObject imgAttachment = imgAttachments.getDataObject();
final DataObject image = (DataObject) imgAttachment.get("image");
final BigDecimal imageId = (BigDecimal) image.get("id");
Element imageElem = profileOwnerElem.newChildElement("image");
imageElem.addAttribute("id", imageId.toString());
}
@ -445,4 +453,46 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
isoCodeElem.setText(address.getIsoCountryCode());
}
}
private void showAdminPage(final Page page,
final HttpServletRequest request,
final HttpServletResponse response)
throws ServletException {
page.addRequestListener(new ApplicationAuthenticationListener());
final Form form = new Form("PublicPersonalProfileAdmin");
//form.add(new Label("Admin"));
//final Label label = new Label("for PublicPersonalProfile");
//form.add(label);
page.setClassAttr("adminPage");
final BoxPanel box = new BoxPanel(BoxPanel.VERTICAL);
final FormSection tableSection = new FormSection(box);
final PublicPersonalProfileNavItemsTable table =
new PublicPersonalProfileNavItemsTable();
box.add(table);
form.add(tableSection);
box.add(new PublicPersonalProfileNavItemsAddForm());
page.add(form);
page.lock();
final Document document = page.buildDocument(request, response);
final PresentationManager presentationManager = Templating.
getPresentationManager();
presentationManager.servePage(document, request, response);
}
}

View File

@ -0,0 +1,154 @@
package com.arsdigita.cms.publicpersonalprofile.ui;
import com.arsdigita.bebop.ColumnPanel;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.FormSection;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SaveCancelSection;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.FormValidationListener;
import com.arsdigita.bebop.form.Option;
import com.arsdigita.bebop.form.SingleSelect;
import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
import com.arsdigita.bebop.parameters.NotNullValidationListener;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItem;
import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItemCollection;
import com.arsdigita.cms.contenttypes.ui.PublicPersonalProfileGlobalizationUtil;
import com.arsdigita.cms.util.LanguageUtil;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.util.Pair;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicPersonalProfileNavItemsAddForm
extends FormSection
implements FormInitListener,
FormProcessListener,
FormValidationListener {
private final FormSection widgetSection;
private final SaveCancelSection saveCancelSection;
public PublicPersonalProfileNavItemsAddForm() {
super(new ColumnPanel(2));
widgetSection = new FormSection(new ColumnPanel(2, true));
super.add(widgetSection, ColumnPanel.INSERT);
ColumnPanel panel = (ColumnPanel) getPanel();
panel.add(new Label(PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.key")));
final ParameterModel keyParam =
new StringParameter(
PublicPersonalProfileNavItem.KEY);
final TextField keyField = new TextField(keyParam);
keyField.setMaxLength(32);
keyField.addValidationListener(new NotNullValidationListener());
keyField.addValidationListener(new NotEmptyValidationListener());
panel.add(keyField);
panel.add(new Label(PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.lang")));
final Collection languages = LanguageUtil.convertToG11N(LanguageUtil.
getSupportedLanguages2LA());
final ParameterModel langModel =
new StringParameter(
PublicPersonalProfileNavItem.LANG);
final SingleSelect langSelect = new SingleSelect(langModel);
langSelect.addValidationListener(new NotNullValidationListener());
langSelect.addValidationListener(new NotEmptyValidationListener());
langSelect.addOption(new Option("", ""));
Pair pair;
for (Object obj : languages) {
pair = (Pair) obj;
langSelect.addOption(new Option((String) pair.getKey(),
(String) ((GlobalizedMessage) pair.
getValue()).localize()));
}
panel.add(langSelect);
panel.add(new Label(PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.label")));
final ParameterModel labelParam =
new StringParameter(
PublicPersonalProfileNavItem.LABEL);
final TextField labelField = new TextField(labelParam);
labelField.setMaxLength(32);
labelField.addValidationListener(new NotNullValidationListener());
labelField.addValidationListener(new NotEmptyValidationListener());
panel.add(labelField);
saveCancelSection = new SaveCancelSection();
super.add(saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT);
addInitListener(this);
addProcessListener(this);
addValidationListener(this);
}
public void init(final FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
data.put(PublicPersonalProfileNavItem.KEY, "");
data.put(PublicPersonalProfileNavItem.LANG, "");
data.put(PublicPersonalProfileNavItem.LABEL, "");
}
public void process(final FormSectionEvent fse)
throws FormProcessException {
final PageState state = fse.getPageState();
final FormData data = fse.getFormData();
PublicPersonalProfileNavItemCollection navItems =
new PublicPersonalProfileNavItemCollection();
final Map<String, PublicPersonalProfileNavItem> navItemMap =
new HashMap<String, PublicPersonalProfileNavItem>();
while (navItems.next()) {
navItemMap.put(navItems.getNavItem().getKey(), navItems.getNavItem());
}
final int numberOfKeys = navItemMap.size();
PublicPersonalProfileNavItem item = new PublicPersonalProfileNavItem();
item.setId(new BigDecimal(navItems.size() + 1));
item.setKey((String) data.get(PublicPersonalProfileNavItem.KEY));
item.setLang((String) data.get(PublicPersonalProfileNavItem.LANG));
item.setLabel((String) data.get(PublicPersonalProfileNavItem.LABEL));
final PublicPersonalProfileNavItem navItem =
navItemMap.get((String) data.get(
PublicPersonalProfileNavItem.KEY));
if (navItem == null) {
item.setOrder(numberOfKeys + 1);
} else {
item.setOrder(navItem.getOrder());
}
item.save();
data.put(PublicPersonalProfileNavItem.KEY, "");
data.put(PublicPersonalProfileNavItem.LANG, "");
data.put(PublicPersonalProfileNavItem.LABEL, "");
}
public void validate(final FormSectionEvent fse)
throws FormProcessException {
}
}

View File

@ -0,0 +1,304 @@
package com.arsdigita.cms.publicpersonalprofile.ui;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItem;
import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItemCollection;
import com.arsdigita.cms.contenttypes.ui.PublicPersonalProfileGlobalizationUtil;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashSet;
import java.util.Set;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicPersonalProfileNavItemsTable
extends Table
implements TableActionListener {
private final static String TABLE_COL_UP = "table_col_up";
private final static String TABLE_COL_DOWN = "table_col_down";
private final static String TABLE_COL_DELETE = "table_col_delete";
private final static String TABLE_COL_EDIT = "table_col_delete";
public PublicPersonalProfileNavItemsTable() {
setEmptyView(new Label(PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.no_nav_items")));
TableColumnModel columnModel = getColumnModel();
columnModel.add(new TableColumn(
0,
PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.key").localize()));
columnModel.add(new TableColumn(
1,
PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.lang").localize()));
columnModel.add(new TableColumn(
2,
PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.label").localize()));
columnModel.add(new TableColumn(
3,
PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.generatorclass").localize()));
columnModel.add(new TableColumn(
4,
PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.edit").localize(),
TABLE_COL_EDIT));
columnModel.add(new TableColumn(
5,
PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.delete").localize(),
TABLE_COL_DELETE));
columnModel.add(new TableColumn(
6,
PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.up").localize(),
TABLE_COL_UP));
columnModel.add(new TableColumn(
7,
PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.down").localize(),
TABLE_COL_DOWN));
setModelBuilder(new PublicPersonalProfileNavItemsTableModelBuilder());
columnModel.get(4).setCellRenderer(new EditCellRenderer());
columnModel.get(5).setCellRenderer(new DeleteCellRenderer());
columnModel.get(6).setCellRenderer(new UpCellRenderer());
columnModel.get(7).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
private class PublicPersonalProfileNavItemsTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
public TableModel makeModel(final Table table,
final PageState state) {
table.getRowSelectionModel().clearSelection(state);
return new PublicPersonalProfileNavItemsTableModel(table, state);
}
}
private class PublicPersonalProfileNavItemsTableModel
implements TableModel {
private final Table table;
private final PageState state;
private final PublicPersonalProfileNavItemCollection navItems =
new PublicPersonalProfileNavItemCollection();
private int lastOrder = 0;
private int numberOfKeys;
public PublicPersonalProfileNavItemsTableModel(final Table table,
final PageState state) {
this.table = table;
this.state = state;
final PublicPersonalProfileNavItemCollection items = new PublicPersonalProfileNavItemCollection();
final Set<String> keys = new HashSet<String>();
while(items.next()) {
keys.add(items.getNavItem().getKey());
}
numberOfKeys = keys.size();
}
public int getColumnCount() {
return table.getColumnModel().size();
}
public boolean nextRow() {
if (!navItems.isBeforeFirst()) {
lastOrder = navItems.getNavItem().getOrder();
}
return navItems.next();
}
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return navItems.getNavItem().getKey();
case 1:
return navItems.getNavItem().getLang();
case 2:
return navItems.getNavItem().getLabel();
case 3:
return navItems.getNavItem().getGeneratorClass();
case 4:
return PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.edit").localize();
case 5:
return PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.delete").localize();
case 6:
if (navItems.getNavItem().getOrder() == lastOrder) {
return null;
} else {
return PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.up").localize();
}
case 7:
if ((navItems.getNavItem().getOrder() == lastOrder)
|| (navItems.getNavItem().getOrder() == numberOfKeys)) {
return null;
} else {
return PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.down").
localize();
}
default:
return null;
}
}
public Object getKeyAt(int columnIndex) {
return navItems.getNavItem().getId();
}
}
private class EditCellRenderer
extends LockableImpl
implements TableCellRenderer {
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int column) {
final ControlLink link = new ControlLink(value.toString());
return link;
}
}
private class DeleteCellRenderer
extends LockableImpl
implements TableCellRenderer {
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int column) {
final ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) PublicPersonalProfileGlobalizationUtil.
globalize("publicpersonalprofile.ui.navitems.delete.confirm").
localize());
return link;
}
}
private class UpCellRenderer
extends LockableImpl
implements TableCellRenderer {
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int column) {
if (row == 0) {
final Label label = new Label("");
return label;
} else if (value == null) {
final Label label = new Label("");
return label;
} else {
final ControlLink link =
new ControlLink((String) PublicPersonalProfileGlobalizationUtil.
globalize("publicpersonalprofile.ui.navitems.up").
localize());
return link;
}
}
}
private class DownCellRenderer
extends LockableImpl
implements TableCellRenderer {
private final PublicPersonalProfileNavItemCollection navItems =
new PublicPersonalProfileNavItemCollection();
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int column) {
if ((navItems.size() - 1) == row) {
final Label label = new Label("");
return label;
} else if (value == null) {
final Label label = new Label("");
return label;
} else {
final ControlLink link =
new ControlLink((String) PublicPersonalProfileGlobalizationUtil.
globalize("publicpersonalprofile.ui.navitems.down").
localize());
return link;
}
}
}
public void cellSelected(final TableActionEvent event) {
final PageState state = event.getPageState();
final PublicPersonalProfileNavItem navItem =
new PublicPersonalProfileNavItem(
new BigDecimal(event.getRowKey().toString()));
final PublicPersonalProfileNavItemCollection navItems =
new PublicPersonalProfileNavItemCollection();
final TableColumn column = getColumnModel().get(event.getColumn().
intValue());
if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) {
} else if (TABLE_COL_DELETE.equals(column.getHeaderKey().toString())) {
} else if (TABLE_COL_UP.equals(column.getHeaderKey().toString())) {
navItems.swapWithPrevious(navItem);
} else if (TABLE_COL_DOWN.equals(column.getHeaderKey().toString())) {
navItems.swapWithNext(navItem);
}
}
public void headSelected(final TableActionEvent event) {
//Nothing to do
}
}