From 5a9c50928f0adf4d4a1c45c16eea1e58a91e2679 Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 19 Aug 2011 19:41:23 +0000 Subject: [PATCH] =?UTF-8?q?PublicPersonalProfile:=20Verwaltungsoberfl?= =?UTF-8?q?=C3=A4che=20f=C3=BCr=20m=C3=B6gliche=20Navigationspunkte=20(noc?= =?UTF-8?q?h=20nicht=20fertiggestellt!)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@1064 8810af33-2d31-482b-a856-94f89814c4df --- .../content-types/PublicPersonalProfile.pdl | 6 +- .../PublicPersonalProfileNavItem.java | 6 +- ...ublicPersonalProfileNavItemCollection.java | 147 +++++++-- .../PublicPersonalProfileNavigationTable.java | 11 +- .../PublicPersonalProfileResources.properties | 8 + ...blicPersonalProfileResources_de.properties | 8 + .../PublicPersonalProfilesServlet.java | 272 +++++++++------- .../PublicPersonalProfileNavItemsAddForm.java | 154 +++++++++ .../PublicPersonalProfileNavItemsTable.java | 304 ++++++++++++++++++ 9 files changed, 762 insertions(+), 154 deletions(-) create mode 100644 ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/ui/PublicPersonalProfileNavItemsAddForm.java create mode 100644 ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/ui/PublicPersonalProfileNavItemsTable.java diff --git a/ccm-cms-publicpersonalprofile/pdl/com/arsdigita/content-types/PublicPersonalProfile.pdl b/ccm-cms-publicpersonalprofile/pdl/com/arsdigita/content-types/PublicPersonalProfile.pdl index 3fc49d7be..043f79fa5 100644 --- a/ccm-cms-publicpersonalprofile/pdl/com/arsdigita/content-types/PublicPersonalProfile.pdl +++ b/ccm-cms-publicpersonalprofile/pdl/com/arsdigita/content-types/PublicPersonalProfile.pdl @@ -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); + } diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/PublicPersonalProfileNavItem.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/PublicPersonalProfileNavItem.java index 72d1291a2..1d727df08 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/PublicPersonalProfileNavItem.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/PublicPersonalProfileNavItem.java @@ -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); diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/PublicPersonalProfileNavItemCollection.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/PublicPersonalProfileNavItemCollection.java index 62dfd66cb..37d78b758 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/PublicPersonalProfileNavItemCollection.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/PublicPersonalProfileNavItemCollection.java @@ -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 navItemsList1 = + new ArrayList(); + final List navItemsList2 = + new ArrayList(); + + 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 navItemsList1 = + new ArrayList(); + final List navItemsList2 = + new ArrayList(); + + 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); + } + } } diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileNavigationTable.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileNavigationTable.java index 62278bdc5..79a4617c4 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileNavigationTable.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileNavigationTable.java @@ -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(); } diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources.properties b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources.properties index dc9fb9928..64a266ac4 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources.properties +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources.properties @@ -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 diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources_de.properties b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources_de.properties index 250217417..aa40997d8 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources_de.properties +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources_de.properties @@ -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 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 8aba06fbc..8142225da 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/PublicPersonalProfilesServlet.java @@ -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); + + } } diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/ui/PublicPersonalProfileNavItemsAddForm.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/ui/PublicPersonalProfileNavItemsAddForm.java new file mode 100644 index 000000000..37c171345 --- /dev/null +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/ui/PublicPersonalProfileNavItemsAddForm.java @@ -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 navItemMap = + new HashMap(); + 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 { + } +} diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/ui/PublicPersonalProfileNavItemsTable.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/ui/PublicPersonalProfileNavItemsTable.java new file mode 100644 index 000000000..c4fdd2bd8 --- /dev/null +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/publicpersonalprofile/ui/PublicPersonalProfileNavItemsTable.java @@ -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 keys = new HashSet(); + 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 + } +}