- Beispiel für ContentGenerator für PublicPersonalProfile

- Verbesserungen an der Admin-Oberfläche für PublicPersonalProfile


git-svn-id: https://svn.libreccm.org/ccm/trunk@1085 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-09-01 10:09:14 +00:00
parent 7d0d88359d
commit 2d4708a679
4 changed files with 136 additions and 47 deletions

View File

@ -0,0 +1,20 @@
package com.arsdigita.cms.publicpersonalprofile;
import com.arsdigita.cms.contenttypes.GenericPerson;
import com.arsdigita.xml.Element;
/**
* An example implementation of the {@link ContentGenerator} interface.
*
* @author Jens Pelzetter
* @version $Id$
*/
public class ExampleGenerator implements ContentGenerator {
public void generateContent(final Element parent,
final GenericPerson person) {
Element message = parent.newChildElement("message");
message.setText("Hello World!");
}
}

View File

@ -22,6 +22,7 @@ import com.arsdigita.cms.contenttypes.PublicPersonalProfileNavItemCollection;
import com.arsdigita.cms.publicpersonalprofile.ui.PublicPersonalProfileNavItemsAddForm;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.Session;
@ -39,7 +40,6 @@ import java.math.BigDecimal;
import java.rmi.ServerException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -60,6 +60,7 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
private static final String PREVIEW = "preview";
private static final String PPP_NS =
"http://www.arsdigita.com/PublicPersonalProfile/1.0";
public static final String SELECTED_NAV_ITEM = "selectedNavItem";
private final PublicPersonalProfileConfig config = PublicPersonalProfiles.
getConfig();
@ -216,12 +217,13 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
Class.forName(navItems.getNavItem().
getGeneratorClass()).getConstructor().
newInstance();
if (generatorObj instanceof ContentGenerator) {
final ContentGenerator generator = (ContentGenerator) generatorObj;
final ContentGenerator generator =
(ContentGenerator) generatorObj;
generator.generateContent(root, owner);
} else {
throw new ServerException(String.format(
"Class '%s' is not a ContentGenerator.",
@ -520,19 +522,19 @@ public class PublicPersonalProfilesServlet extends BaseApplicationServlet {
page.setClassAttr("adminPage");
final BoxPanel box = new BoxPanel(BoxPanel.VERTICAL);
final FormSection tableSection = new FormSection(box);
final PublicPersonalProfileNavItemsAddForm addForm =
new PublicPersonalProfileNavItemsAddForm();
final PublicPersonalProfileNavItemsTable table =
new PublicPersonalProfileNavItemsTable();
new PublicPersonalProfileNavItemsTable(
addForm);
box.add(table);
form.add(tableSection);
box.add(new PublicPersonalProfileNavItemsAddForm());
box.add(addForm);
page.add(form);
page.lock();

View File

@ -10,6 +10,7 @@ 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.FormSubmissionListener;
import com.arsdigita.bebop.event.FormValidationListener;
import com.arsdigita.bebop.form.Option;
import com.arsdigita.bebop.form.SingleSelect;
@ -38,13 +39,16 @@ public class PublicPersonalProfileNavItemsAddForm
extends FormSection
implements FormInitListener,
FormProcessListener,
FormValidationListener {
FormValidationListener,
FormSubmissionListener {
private final FormSection widgetSection;
private final SaveCancelSection saveCancelSection;
private PublicPersonalProfileNavItem selected;
public PublicPersonalProfileNavItemsAddForm() {
super(new ColumnPanel(2));
widgetSection = new FormSection(new ColumnPanel(2, true));
super.add(widgetSection, ColumnPanel.INSERT);
@ -94,6 +98,15 @@ public class PublicPersonalProfileNavItemsAddForm
labelField.addValidationListener(new NotEmptyValidationListener());
panel.add(labelField);
panel.add(new Label(PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.navitem.generatorclass")));
final ParameterModel generatorParam =
new StringParameter(
PublicPersonalProfileNavItem.GENERATOR_CLASS);
final TextField generatorField = new TextField(generatorParam);
generatorField.setMaxLength(512);
panel.add(generatorField);
saveCancelSection = new SaveCancelSection();
super.add(saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT);
@ -104,11 +117,24 @@ public class PublicPersonalProfileNavItemsAddForm
}
public void init(final FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
final FormData data = fse.getFormData();
final PageState state = fse.getPageState();
data.put(PublicPersonalProfileNavItem.KEY, "");
data.put(PublicPersonalProfileNavItem.LANG, "");
data.put(PublicPersonalProfileNavItem.LABEL, "");
if (selected == null) {
data.put(PublicPersonalProfileNavItem.KEY, "");
data.put(PublicPersonalProfileNavItem.LANG, "");
data.put(PublicPersonalProfileNavItem.LABEL, "");
data.put(PublicPersonalProfileNavItem.GENERATOR_CLASS, "");
} else {
data.put(PublicPersonalProfileNavItem.KEY,
selected.getKey());
data.put(PublicPersonalProfileNavItem.LANG,
selected.getLang());
data.put(PublicPersonalProfileNavItem.LABEL,
selected.getLabel());
data.put(PublicPersonalProfileNavItem.GENERATOR_CLASS,
selected.getGeneratorClass());
}
}
public void process(final FormSectionEvent fse)
@ -116,39 +142,74 @@ public class PublicPersonalProfileNavItemsAddForm
final PageState state = fse.getPageState();
final FormData data = fse.getFormData();
PublicPersonalProfileNavItemCollection navItems =
new PublicPersonalProfileNavItemCollection();
if (saveCancelSection.getSaveButton().isSelected(state)) {
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();
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();
PublicPersonalProfileNavItem item;
if (selected == null) {
item = new PublicPersonalProfileNavItem();
item.setId(new BigDecimal(navItems.size() + 1));
} else {
item = selected;
}
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.setKey((String) data.get(PublicPersonalProfileNavItem.KEY));
item.setLang((String) data.get(PublicPersonalProfileNavItem.LANG));
item.setLabel((String) data.get(PublicPersonalProfileNavItem.LABEL));
if (data.get(PublicPersonalProfileNavItem.GENERATOR_CLASS) != null) {
item.setGeneratorClass((String) data.get(
PublicPersonalProfileNavItem.GENERATOR_CLASS));
}
final PublicPersonalProfileNavItem navItem =
navItemMap.get((String) data.get(
PublicPersonalProfileNavItem.KEY));
if (navItem == null) {
item.setOrder(numberOfKeys + 1);
} else {
item.setOrder(navItem.getOrder());
}
item.save();
}
item.save();
this.selected = null;
data.put(PublicPersonalProfileNavItem.KEY, "");
data.put(PublicPersonalProfileNavItem.LANG, "");
data.put(PublicPersonalProfileNavItem.LABEL, "");
data.put(PublicPersonalProfileNavItem.GENERATOR_CLASS, "");
}
@Override
public void validate(final FormSectionEvent fse)
throws FormProcessException {
}
@Override
public void submitted(final FormSectionEvent fse)
throws FormProcessException {
final PageState state = fse.getPageState();
final FormData data = fse.getFormData();
if (saveCancelSection.getCancelButton().isSelected(state)) {
this.selected = null;
data.put(PublicPersonalProfileNavItem.KEY, "");
data.put(PublicPersonalProfileNavItem.LANG, "");
data.put(PublicPersonalProfileNavItem.LABEL, "");
data.put(PublicPersonalProfileNavItem.GENERATOR_CLASS, "");
}
}
protected void setSelectedNavItem(
final PublicPersonalProfileNavItem selected) {
this.selected = selected;
}
}

View File

@ -15,10 +15,8 @@ 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;
@ -34,9 +32,14 @@ public class PublicPersonalProfileNavItemsTable
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";
private final static String TABLE_COL_EDIT = "table_col_edit";
private final PublicPersonalProfileNavItemsAddForm addForm;
public PublicPersonalProfileNavItemsTable(
final PublicPersonalProfileNavItemsAddForm addForm) {
this.addForm = addForm;
public PublicPersonalProfileNavItemsTable() {
setEmptyView(new Label(PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.no_nav_items")));
@ -114,19 +117,20 @@ public class PublicPersonalProfileNavItemsTable
private final PageState state;
private final PublicPersonalProfileNavItemCollection navItems =
new PublicPersonalProfileNavItemCollection();
private int lastOrder = 0;
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();
this.state = state;
final PublicPersonalProfileNavItemCollection items =
new PublicPersonalProfileNavItemCollection();
final Set<String> keys = new HashSet<String>();
while(items.next()) {
while (items.next()) {
keys.add(items.getNavItem().getKey());
}
numberOfKeys = keys.size();
numberOfKeys = keys.size();
}
public int getColumnCount() {
@ -164,7 +168,7 @@ public class PublicPersonalProfileNavItemsTable
"publicpersonalprofile.ui.navitem.up").localize();
}
case 7:
if ((navItems.getNavItem().getOrder() == lastOrder)
if ((navItems.getNavItem().getOrder() == lastOrder)
|| (navItems.getNavItem().getOrder() == numberOfKeys)) {
return null;
} else {
@ -290,7 +294,9 @@ public class PublicPersonalProfileNavItemsTable
intValue());
if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) {
addForm.setSelectedNavItem(navItem);
} else if (TABLE_COL_DELETE.equals(column.getHeaderKey().toString())) {
navItem.delete();
} else if (TABLE_COL_UP.equals(column.getHeaderKey().toString())) {
navItems.swapWithPrevious(navItem);
} else if (TABLE_COL_DOWN.equals(column.getHeaderKey().toString())) {