From 1f390ae8683eea41c521c1f62959e6f9e6d13047 Mon Sep 17 00:00:00 2001 From: quasi Date: Fri, 21 May 2010 10:07:53 +0000 Subject: [PATCH] Erste Version von basetypes.contact MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kompiliert und läßt laden und starten, alledings gibt es eine Exception beim Anlegen eines neuen BaseContacts BaseContacts so angepaßt, daß es den basetype verwendet. git-svn-id: https://svn.libreccm.org/ccm/trunk@436 8810af33-2d31-482b-a856-94f89814c4df --- .../ui/AddressPropertiesStep.java | 3 +- ccm-cms-types-baseContact/application.xml | 2 - .../arsdigita/content-types/BaseContact.pdl | 25 +- .../src/ccm-cms-types-baseContact.config | 2 +- .../src/ccm-cms-types-baseContact.load | 3 - .../cms/contenttypes/BaseContact.java | 131 ++++----- ...ctEntry.java => BaseContactEntry.java.old} | 0 ...va => BaseContactEntryCollection.java.old} | 0 .../contenttypes/BaseContactInitializer.java | 5 +- .../cms/contenttypes/BaseContactLoader.java | 8 - ...BaseContactAddressPropertiesStep.java.old} | 0 ...ContactAttachAddressPropertyForm.java.old} | 0 ...eContactAttachPersonPropertyForm.java.old} | 0 ... => BaseContactDeleteAddressForm.java.old} | 0 ...a => BaseContactDeletePersonForm.java.old} | 0 ...seContactEditAddressPropertyForm.java.old} | 0 ...aseContactEditPersonPropertyForm.java.old} | 0 ...BaseContactEntriesPropertiesStep.java.old} | 0 ....java => BaseContactEntriesTable.java.old} | 0 ....java => BaseContactEntryAddForm.java.old} | 0 ... BaseContactPersonPropertiesStep.java.old} | 0 .../ui/BaseContactPropertiesStep.java | 80 +----- ....java => BaseContactPropertyForm.java.old} | 0 ... => BaseContactGlobalizationUtil.java.old} | 0 ...ava => BaseContactResourceBundle.java.old} | 0 .../pdl/com/arsdigita/basetypes/Contact.pdl | 29 ++ ccm-cms/src/ccm-cms.config | 2 + .../basetypes/BasetypesResources.properties | 53 +++- .../BasetypesResources_de.properties | 55 +++- .../com/arsdigita/cms/basetypes/Contact.java | 143 +++++++++ .../cms/basetypes/ContactConfig.java | 151 ++++++++++ .../ContactConfig_parameter.properties | 29 ++ .../arsdigita/cms/basetypes/ContactEntry.java | 114 ++++++++ .../cms/basetypes/ContactEntryCollection.java | 140 +++++++++ .../ui/ContactAddressPropertiesStep.java | 110 +++++++ .../ui/ContactAttachAddressPropertyForm.java | 147 ++++++++++ .../ui/ContactAttachPersonPropertyForm.java | 147 ++++++++++ .../ui/ContactDeleteAddressForm.java | 77 +++++ .../basetypes/ui/ContactDeletePersonForm.java | 80 ++++++ .../ui/ContactEditAddressPropertyForm.java | 189 ++++++++++++ .../ui/ContactEditPersonPropertyForm.java | 141 +++++++++ .../ui/ContactEntriesPropertiesStep.java | 56 ++++ .../cms/basetypes/ui/ContactEntriesTable.java | 272 ++++++++++++++++++ .../cms/basetypes/ui/ContactEntryAddForm.java | 109 +++++++ .../ui/ContactPersonPropertiesStep.java | 84 ++++++ .../basetypes/ui/ContactPropertiesStep.java | 123 ++++++++ .../cms/basetypes/ui/ContactPropertyForm.java | 97 +++++++ .../src/com/arsdigita/auditing/package.html | 7 +- 48 files changed, 2420 insertions(+), 194 deletions(-) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/{BaseContactEntry.java => BaseContactEntry.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/{BaseContactEntryCollection.java => BaseContactEntryCollection.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactAddressPropertiesStep.java => BaseContactAddressPropertiesStep.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactAttachAddressPropertyForm.java => BaseContactAttachAddressPropertyForm.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactAttachPersonPropertyForm.java => BaseContactAttachPersonPropertyForm.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactDeleteAddressForm.java => BaseContactDeleteAddressForm.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactDeletePersonForm.java => BaseContactDeletePersonForm.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactEditAddressPropertyForm.java => BaseContactEditAddressPropertyForm.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactEditPersonPropertyForm.java => BaseContactEditPersonPropertyForm.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactEntriesPropertiesStep.java => BaseContactEntriesPropertiesStep.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactEntriesTable.java => BaseContactEntriesTable.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactEntryAddForm.java => BaseContactEntryAddForm.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactPersonPropertiesStep.java => BaseContactPersonPropertiesStep.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/{BaseContactPropertyForm.java => BaseContactPropertyForm.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/{BaseContactGlobalizationUtil.java => BaseContactGlobalizationUtil.java.old} (100%) rename ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/{BaseContactResourceBundle.java => BaseContactResourceBundle.java.old} (100%) create mode 100644 ccm-cms/pdl/com/arsdigita/basetypes/Contact.pdl create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/Contact.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ContactConfig.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ContactConfig_parameter.properties create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ContactEntry.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ContactEntryCollection.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAddressPropertiesStep.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAttachAddressPropertyForm.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAttachPersonPropertyForm.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactDeleteAddressForm.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactDeletePersonForm.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEditAddressPropertyForm.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEditPersonPropertyForm.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntriesPropertiesStep.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntriesTable.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntryAddForm.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPersonPropertiesStep.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPropertiesStep.java create mode 100644 ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPropertyForm.java diff --git a/ccm-cms-types-address/src/com/arsdigita/cms/contenttypes/ui/AddressPropertiesStep.java b/ccm-cms-types-address/src/com/arsdigita/cms/contenttypes/ui/AddressPropertiesStep.java index 9797bd4a4..e097fbe5e 100644 --- a/ccm-cms-types-address/src/com/arsdigita/cms/contenttypes/ui/AddressPropertiesStep.java +++ b/ccm-cms-types-address/src/com/arsdigita/cms/contenttypes/ui/AddressPropertiesStep.java @@ -42,7 +42,6 @@ public class AddressPropertiesStep extends com.arsdigita.cms.basetypes.ui.Addres } public static Component getAddressPropertySheet(ItemSelectionModel itemModel) { - Component sheet = AddressPropertiesStep.getAddressPropertySheet(itemModel); - return sheet; + return com.arsdigita.cms.basetypes.ui.AddressPropertiesStep.getAddressPropertySheet(itemModel); } } diff --git a/ccm-cms-types-baseContact/application.xml b/ccm-cms-types-baseContact/application.xml index f40e3ba20..9555c5c79 100755 --- a/ccm-cms-types-baseContact/application.xml +++ b/ccm-cms-types-baseContact/application.xml @@ -8,8 +8,6 @@ - - diff --git a/ccm-cms-types-baseContact/pdl/com/arsdigita/content-types/BaseContact.pdl b/ccm-cms-types-baseContact/pdl/com/arsdigita/content-types/BaseContact.pdl index 3ada5ae4e..203a60c29 100644 --- a/ccm-cms-types-baseContact/pdl/com/arsdigita/content-types/BaseContact.pdl +++ b/ccm-cms-types-baseContact/pdl/com/arsdigita/content-types/BaseContact.pdl @@ -1,31 +1,10 @@ model com.arsdigita.cms.contenttypes; -import com.arsdigita.cms.contenttypes.Person; -import com.arsdigita.cms.contenttypes.BaseAddress; +import com.arsdigita.cms.basetypes.Contact; import com.arsdigita.kernel.ACSObject; import com.arsdigita.cms.*; // Contact Object -object type BaseContact extends ContentPage { - - Person [0..1] person = join ct_baseContacts.person_id - to ct_persons.person_id; - - BaseAddress [0..1] address = join ct_baseContacts.address_id - to ct_baseAddresses.address_id; - - component BaseContactEntry [0..n] contactentries = join ct_baseContacts.contact_id - to ct_baseContactEntries.contact_id; - +object type BaseContact extends com.arsdigita.cms.basetypes.Contact { reference key ( ct_baseContacts.contact_id ); } - -object type BaseContactEntry extends ContentItem { - - String [1..1] key = ct_baseContactEntries.key VARCHAR(100); - String [0..1] description = ct_baseContactEntries.description VARCHAR(100); - String [1..1] value = ct_baseContactEntries.value VARCHAR(100); - - reference key ( ct_baseContactEntries.contactentry_id ); - -} diff --git a/ccm-cms-types-baseContact/src/ccm-cms-types-baseContact.config b/ccm-cms-types-baseContact/src/ccm-cms-types-baseContact.config index 1e00b4304..78e4942dd 100755 --- a/ccm-cms-types-baseContact/src/ccm-cms-types-baseContact.config +++ b/ccm-cms-types-baseContact/src/ccm-cms-types-baseContact.config @@ -1,4 +1,4 @@ - + diff --git a/ccm-cms-types-baseContact/src/ccm-cms-types-baseContact.load b/ccm-cms-types-baseContact/src/ccm-cms-types-baseContact.load index ed764ee90..c1a1429dc 100755 --- a/ccm-cms-types-baseContact/src/ccm-cms-types-baseContact.load +++ b/ccm-cms-types-baseContact/src/ccm-cms-types-baseContact.load @@ -3,13 +3,10 @@
-
-
-
diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContact.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContact.java index 2bb4c0cf5..3a79eb7e7 100755 --- a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContact.java +++ b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContact.java @@ -22,12 +22,6 @@ import com.arsdigita.persistence.OID; import com.arsdigita.persistence.DataObject; import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.cms.ContentType; -import com.arsdigita.cms.ContentPage; -import com.arsdigita.domain.DomainObjectFactory; -import com.arsdigita.persistence.DataAssociation; -import com.arsdigita.persistence.DataCollection; -import com.arsdigita.persistence.DataOperation; -import com.arsdigita.persistence.SessionManager; import com.arsdigita.util.Assert; import java.math.BigDecimal; @@ -36,18 +30,18 @@ import java.math.BigDecimal; * This content type represents an BaseContact * */ -public class BaseContact extends ContentPage { +public class BaseContact extends com.arsdigita.cms.basetypes.Contact { /** PDL property names */ - public static final String PERSON = "person"; - public static final String ADDRESS = "address"; - public static final String CONTACT_ENTRIES = "contactentries"; +// public static final String PERSON = "person"; +// public static final String ADDRESS = "address"; +// public static final String CONTACT_ENTRIES = "contactentries"; // Config - private static final BaseContactConfig s_config = new BaseContactConfig(); - static { - s_config.load(); - } +// private static final BaseContactConfig s_config = new BaseContactConfig(); +// static { +// s_config.load(); +// } /** Data object type for tihs domain object */ public static final String BASE_DATA_OBJECT_TYPE @@ -75,6 +69,7 @@ public class BaseContact extends ContentPage { super(type); } + @Override public void beforeSave() { super.beforeSave(); @@ -84,62 +79,62 @@ public class BaseContact extends ContentPage { /** * Retrieves the current configuration */ - public static final BaseContactConfig getConfig() { - return s_config; - } +// public static final BaseContactConfig getConfig() { +// return s_config; +// } /////////////////////////////////////////////////////////////// // accessors - - // Get the person for this contact - public Member getPerson() { - return (Member) DomainObjectFactory.newInstance((DataObject)get(PERSON)); - } - - // Set the person for this contact - public void setPerson(Member person) { - set(PERSON, person); - } - - // Unset the address for this contact - public void unsetPerson() { - set(PERSON, null); - } - - // Get the address for this contact - public BaseAddress getAddress() { - return (BaseAddress)DomainObjectFactory.newInstance((DataObject)get(ADDRESS)); - } - - // Set the address for this contact - public void setAddress(BaseAddress address) { - set(ADDRESS, address); - } - - // Unset the address for this contact - public void unsetAddress() { - set(ADDRESS, null); - } - - // Get all contact entries for this contact, p. ex. phone number, type of contact etc. - public BaseContactEntryCollection getContactEntries() { - return new BaseContactEntryCollection ((DataCollection) get(CONTACT_ENTRIES)); - } - - // Add a contact entry for this contact - public void addContactEntry(BaseContactEntry contactEntry) { - Assert.exists(contactEntry, BaseContactEntry.class); - add(CONTACT_ENTRIES, contactEntry); - } - - // Remove a contect entry for this contact - public void removeContactEntry(BaseContactEntry contactEntry) { - Assert.exists(contactEntry, BaseContactEntry.class); - remove(CONTACT_ENTRIES, contactEntry); - } - - public boolean hasContactEntries() { - return !this.getContactEntries().isEmpty(); - } +// +// // Get the person for this contact +// public Member getPerson() { +// return (Member) DomainObjectFactory.newInstance((DataObject)get(PERSON)); +// } +// +// // Set the person for this contact +// public void setPerson(Member person) { +// set(PERSON, person); +// } +// +// // Unset the address for this contact +// public void unsetPerson() { +// set(PERSON, null); +// } +// +// // Get the address for this contact +// public BaseAddress getAddress() { +// return (BaseAddress)DomainObjectFactory.newInstance((DataObject)get(ADDRESS)); +// } +// +// // Set the address for this contact +// public void setAddress(BaseAddress address) { +// set(ADDRESS, address); +// } +// +// // Unset the address for this contact +// public void unsetAddress() { +// set(ADDRESS, null); +// } +// +// // Get all contact entries for this contact, p. ex. phone number, type of contact etc. +// public BaseContactEntryCollection getContactEntries() { +// return new BaseContactEntryCollection ((DataCollection) get(CONTACT_ENTRIES)); +// } +// +// // Add a contact entry for this contact +// public void addContactEntry(BaseContactEntry contactEntry) { +// Assert.exists(contactEntry, BaseContactEntry.class); +// add(CONTACT_ENTRIES, contactEntry); +// } +// +// // Remove a contect entry for this contact +// public void removeContactEntry(BaseContactEntry contactEntry) { +// Assert.exists(contactEntry, BaseContactEntry.class); +// remove(CONTACT_ENTRIES, contactEntry); +// } +// +// public boolean hasContactEntries() { +// return !this.getContactEntries().isEmpty(); +// } } diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactEntry.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactEntry.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactEntry.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactEntry.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactEntryCollection.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactEntryCollection.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactEntryCollection.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactEntryCollection.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactInitializer.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactInitializer.java index 3800a94b8..b7ef6ea81 100755 --- a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactInitializer.java +++ b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactInitializer.java @@ -8,10 +8,7 @@ import org.apache.log4j.Logger; * @author Sören Bernstein; */ public class BaseContactInitializer extends ContentTypeInitializer { - public final static String versionId = - "$Id: BaseContactInitializer.java $" + - "$Author: quasi $" + - "$DateTime: 2009/03/15 $"; + private static final Logger s_log = Logger.getLogger(BaseContactInitializer.class); public BaseContactInitializer() { diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactLoader.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactLoader.java index 288d02a2f..6b1a8f1d6 100755 --- a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactLoader.java +++ b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/BaseContactLoader.java @@ -1,20 +1,12 @@ package com.arsdigita.cms.contenttypes; -import com.arsdigita.cms.contenttypes.AbstractContentTypeLoader; - - /** * Loader. * * @author Sören Bernstein */ public class BaseContactLoader extends AbstractContentTypeLoader { - public final static String versionId = - "$Id: BaseContactLoader.java $" + - "$Author: quasi $" + - "$DateTime: 2009/03/15 $"; - private static final String[] TYPES = { "/WEB-INF/content-types/com/arsdigita/cms/contenttypes/BaseContact.xml" diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAddressPropertiesStep.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAddressPropertiesStep.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAddressPropertiesStep.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAddressPropertiesStep.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAttachAddressPropertyForm.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAttachAddressPropertyForm.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAttachAddressPropertyForm.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAttachAddressPropertyForm.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAttachPersonPropertyForm.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAttachPersonPropertyForm.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAttachPersonPropertyForm.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactAttachPersonPropertyForm.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactDeleteAddressForm.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactDeleteAddressForm.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactDeleteAddressForm.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactDeleteAddressForm.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactDeletePersonForm.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactDeletePersonForm.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactDeletePersonForm.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactDeletePersonForm.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEditAddressPropertyForm.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEditAddressPropertyForm.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEditAddressPropertyForm.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEditAddressPropertyForm.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEditPersonPropertyForm.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEditPersonPropertyForm.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEditPersonPropertyForm.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEditPersonPropertyForm.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntriesPropertiesStep.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntriesPropertiesStep.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntriesPropertiesStep.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntriesPropertiesStep.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntriesTable.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntriesTable.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntriesTable.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntriesTable.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntryAddForm.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntryAddForm.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntryAddForm.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactEntryAddForm.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPersonPropertiesStep.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPersonPropertiesStep.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPersonPropertiesStep.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPersonPropertiesStep.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPropertiesStep.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPropertiesStep.java index 1919418fd..791a989ab 100644 --- a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPropertiesStep.java +++ b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPropertiesStep.java @@ -1,29 +1,15 @@ package com.arsdigita.cms.contenttypes.ui; -import com.arsdigita.bebop.PageState; -import com.arsdigita.cms.ContentPage; -import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; -import com.arsdigita.cms.ui.authoring.BasicPageForm; -import com.arsdigita.cms.ui.authoring.SimpleEditStep; -import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; -import com.arsdigita.domain.DomainObject; -import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; -import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.SegmentedPanel; -import com.arsdigita.cms.contenttypes.BaseContact; -import com.arsdigita.cms.contenttypes.util.BaseContactGlobalizationUtil; -import java.text.DateFormat; import org.apache.log4j.Logger; /** * AuthoringStep for the basic properties of a basic contact */ -public class BaseContactPropertiesStep extends SimpleEditStep { +public class BaseContactPropertiesStep extends com.arsdigita.cms.basetypes.ui.ContactPropertiesStep { private static final Logger logger = Logger.getLogger(BaseContactPropertiesStep.class); @@ -41,45 +27,6 @@ public class BaseContactPropertiesStep extends SimpleEditStep { */ public BaseContactPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) { super(itemModel, parent); - - /* Use a Segmented Panel for the multiple parts of data */ - SegmentedPanel segmentedPanel = new SegmentedPanel(); - - setDefaultEditKey(EDIT_BASIC_SHEET_NAME); - - /* The different parts of information are displayed in seperated segments each containing a SimpleEditStep */ - /* Well, not so simple anymore... */ - - /* A new SimpleEditStep */ - SimpleEditStep basicProperties = new SimpleEditStep(itemModel, parent, EDIT_BASIC_SHEET_NAME); - - /* Create the edit component for this SimpleEditStep and the corresponding link */ - BasicPageForm editBasicSheet = new BaseContactPropertyForm(itemModel, this); - basicProperties.add(EDIT_BASIC_SHEET_NAME, (String)BaseContactGlobalizationUtil.globalize("cms.contenttypes.ui.baseContact.edit_basic_properties").localize(), new WorkflowLockedComponentAccess(editBasicSheet, itemModel), editBasicSheet.getSaveCancelSection().getCancelButton()); - - /* Set the displayComponent for this step */ - basicProperties.setDisplayComponent(getBaseContactPropertySheet(itemModel)); - - /* Add the SimpleEditStep to the segmented panel */ - segmentedPanel.addSegment(new Label((String)BaseContactGlobalizationUtil.globalize("cms.contenttypes.ui.baseContact.basic_properties").localize()), basicProperties); - - // If not disabled via registry, add the ui for attaching a person - if(!BaseContact.getConfig().getHidePerson()) { - BaseContactPersonPropertiesStep personProperties = new BaseContactPersonPropertiesStep(itemModel, parent); - segmentedPanel.addSegment(new Label((String)BaseContactGlobalizationUtil.globalize("cms.contenttypes.ui.baseContact.person").localize()), personProperties); - } - - // If not disabled via registry, add the ui for attaching a baseAddress - if(!BaseContact.getConfig().getHideAddress()) { - BaseContactAddressPropertiesStep addressProperties = new BaseContactAddressPropertiesStep(itemModel, parent); - segmentedPanel.addSegment(new Label((String)BaseContactGlobalizationUtil.globalize("cms.contenttypes.ui.baseContact.address").localize()), addressProperties); - } - - BaseContactEntriesPropertiesStep baseContactEntries = new BaseContactEntriesPropertiesStep(itemModel, parent); - segmentedPanel.addSegment(new Label((String)BaseContactGlobalizationUtil.globalize("cms.contenttypes.ui.baseContact.contactEntry").localize()), baseContactEntries); - - /* Sets the composed segmentedPanel as display component */ - setDisplayComponent(segmentedPanel); } /** @@ -90,30 +37,7 @@ public class BaseContactPropertiesStep extends SimpleEditStep { * @return The sheet for editing the properties of the organization. */ public static Component getBaseContactPropertySheet(ItemSelectionModel itemModel) { - - - /* The DisplayComponent for the Basic Properties */ - DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel); - - sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.name"),"name"); - sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.title"),"title"); - - if(!ContentSection.getConfig().getHideLaunchDate()) { - sheet.add(GlobalizationUtil.globalize("cms.ui.authoring.page_launch_date"), ContentPage.LAUNCH_DATE, new DomainObjectPropertySheet.AttributeFormatter() { - - public String format(DomainObject obj, String attribute, PageState state) { - ContentPage page = (ContentPage)obj; - if(page.getLaunchDate() != null) { - return DateFormat.getDateInstance(DateFormat.LONG).format(page.getLaunchDate()); - } - else { - return (String)GlobalizationUtil.globalize("cms.ui.unknown").localize(); - } - } - }); - } - - return sheet; + return com.arsdigita.cms.basetypes.ui.ContactPropertiesStep.getContactPropertySheet(itemModel); } } diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPropertyForm.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPropertyForm.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPropertyForm.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/ui/BaseContactPropertyForm.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/BaseContactGlobalizationUtil.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/BaseContactGlobalizationUtil.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/BaseContactGlobalizationUtil.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/BaseContactGlobalizationUtil.java.old diff --git a/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/BaseContactResourceBundle.java b/ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/BaseContactResourceBundle.java.old similarity index 100% rename from ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/BaseContactResourceBundle.java rename to ccm-cms-types-baseContact/src/com/arsdigita/cms/contenttypes/util/BaseContactResourceBundle.java.old diff --git a/ccm-cms/pdl/com/arsdigita/basetypes/Contact.pdl b/ccm-cms/pdl/com/arsdigita/basetypes/Contact.pdl new file mode 100644 index 000000000..9a37b06d9 --- /dev/null +++ b/ccm-cms/pdl/com/arsdigita/basetypes/Contact.pdl @@ -0,0 +1,29 @@ +model com.arsdigita.cms.basetypes; + +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.cms.*; + +// Contact Object +object type Contact extends ContentPage { + + Person [0..1] person = join cms_contacts.person_id + to cms_persons.person_id; + + Address [0..1] address = join cms_contacts.address_id + to cms_addresses.address_id; + + component ContactEntry [0..n] contactentries = join cms_contacts.contact_id + to cms_contactEntries.contact_id; + + reference key ( cms_contacts.contact_id ); +} + +object type ContactEntry extends ContentItem { + + String [1..1] key = cms_contactEntries.key VARCHAR(100); + String [0..1] description = cms_contactEntries.description VARCHAR(100); + String [1..1] value = cms_contactEntries.value VARCHAR(100); + + reference key ( cms_contactEntries.contactentry_id ); + +} diff --git a/ccm-cms/src/ccm-cms.config b/ccm-cms/src/ccm-cms.config index d1ef96dda..1cd1ccd04 100755 --- a/ccm-cms/src/ccm-cms.config +++ b/ccm-cms/src/ccm-cms.config @@ -8,4 +8,6 @@ storage="ccm-cms/publishToFile.properties"/> + diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/BasetypesResources.properties b/ccm-cms/src/com/arsdigita/cms/basetypes/BasetypesResources.properties index d4ee71b7a..c767de988 100644 --- a/ccm-cms/src/com/arsdigita/cms/basetypes/BasetypesResources.properties +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/BasetypesResources.properties @@ -10,4 +10,55 @@ cms.basetypes.ui.person.givenname=Given name cms.basetypes.ui.person.titlepre=Title cms.basetypes.ui.person.titlepost=Name appendix -address.authoring.basic_properties.title=Basic Properties \ No newline at end of file +address.authoring.basic_properties.title=Basic Properties + +cms.basetypes.ui.contact.basic_properties=Basic Properties +cms.basetypes.ui.contact.edit_basic_properties=Edit Basic Properties +cms.basetypes.ui.contact.edit_basic_properties.description=Description +cms.basetypes.ui.contact.confirm_delete=Sure? +cms.basetypes.ui.contact.person=Person +cms.basetypes.ui.contact.address=Address + +cms.basetypes.ui.contact.attach_address=Attach Address +cms.basetypes.ui.contact.edit_address=Edit Address +cms.basetypes.ui.contact.reattach_address=Reattach Address +cms.basetypes.ui.contact.delete_address=Delete Address +cms.basetypes.ui.contact.emptyAddress=There is no Address attached +cms.basetypes.ui.contact.select_address=Please select a contact content type +cms.basetypes.ui.contact.select_address.add=Add +cms.basetypes.ui.contact.select_address.change=Change +cms.basetypes.ui.contact.select_address.wrong_type=BaseAddress selection is required +cms.basetypes.ui.contact.select_address.cancelled=cancelled +cms.basetypes.ui.contact.delete_address.label=Do you want to delete the link to the contact content type? +cms.basetypes.ui.contact.delete_address.button_label=Delete + +cms.basetypes.ui.contact.attach_person=Attach Person +cms.basetypes.ui.contact.edit_person=Edit Person +cms.basetypes.ui.contact.reattach_person=Reattach Person +cms.basetypes.ui.contact.delete_person=Delete Person +cms.basetypes.ui.contact.emptyPerson=There is no Address attached +cms.basetypes.ui.contact.select_person=Please select a Person content type +cms.basetypes.ui.contact.select_person.add=Add +cms.basetypes.ui.contact.select_person.change=Change +cms.basetypes.ui.contact.select_person.wrong_type=Person selection is required +cms.basetypes.ui.contact.select_person.cancelled=cancelled +cms.basetypes.ui.contact.delete_person.label=Do you want to delete the link to the Person content type? +cms.basetypes.ui.contact.delete_person.button_label=Delete + +cms.basetypes.ui.contact.add_contactEntry=Add Contact Entry +cms.basetypes.ui.contact.contactEntry=Contact Entries +cms.basetypes.ui.contact.contactEntry.key=Type +cms.basetypes.ui.contact.contactEntry.value=Value +cms.basetypes.ui.contact.contactEntry.description=Description (internal use only) +cms.basetypes.ui.contact.contactEntry.action=Action + +cms.basetypes.ui.contact.contactEntry.key.contact_type=Type of Contact +cms.basetypes.ui.contact.contactEntry.key.office_hours=Office Hours +cms.basetypes.ui.contact.contactEntry.key.phone_office=Phone (office) +cms.basetypes.ui.contact.contactEntry.key.phone_private=Phone (private) +cms.basetypes.ui.contact.contactEntry.key.phone_mobile=Phone (mobile) +cms.basetypes.ui.contact.contactEntry.key.email=eMail +cms.basetypes.ui.contact.contactEntry.key.fax=Fax +cms.basetypes.ui.contact.contactEntry.key.im=Instant Messenger +cms.basetypes.ui.contact.contactEntry.key.www=Homepage + diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/BasetypesResources_de.properties b/ccm-cms/src/com/arsdigita/cms/basetypes/BasetypesResources_de.properties index 374feed44..ea063d37b 100644 --- a/ccm-cms/src/com/arsdigita/cms/basetypes/BasetypesResources_de.properties +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/BasetypesResources_de.properties @@ -10,4 +10,57 @@ cms.basetypes.ui.person.givenname=Vorname cms.basetypes.ui.person.titlepre=Titel cms.basetypes.ui.person.titlepost=Namesanhang -address.authoring.basic_properties.title=Eigenschaften von Adresse \ No newline at end of file +address.authoring.basic_properties.title=Eigenschaften von Adresse + +cms.basetypes.ui.contact.basic_properties=Eigenschaften von Contact +cms.basetypes.ui.contact.edit_basic_properties=Bearbeiten +cms.basetypes.ui.contact.edit_basic_properties.description=Description +cms.basetypes.ui.contact.confirm_delete=Sind Sie sicher? +cms.basetypes.ui.contact.person=Person +cms.basetypes.ui.contact.address=Adresse + +cms.basetypes.ui.contact.attach_address=Adresse verkn\u00FCpfen +cms.basetypes.ui.contact.edit_address=Adresse bearbeiten +cms.basetypes.ui.contact.reattach_address=Adresse neu verkn\u00FCpfen +cms.basetypes.ui.contact.delete_address=Adresse l\u00F6schen +cms.basetypes.ui.contact.emptyAddress=Zur Zeit ist keine Adresse verkn\u00FCpft +cms.basetypes.ui.contact.select_address=Bitte w\u00E4hlen Sie eine Eintrag vom Typ BaseAddress +cms.basetypes.ui.contact.select_address.add=Verkn\u00FCpfen +cms.basetypes.ui.contact.select_address.change=Ver\u00E4ndern +cms.basetypes.ui.contact.select_address.wrong_type=Der gew\u00E4hlte Eintrag ist nicht vom Typ BaseAddress +cms.basetypes.ui.contact.select_address.cancelled=Abbruch +cms.basetypes.ui.contact.delete_address.label=Wollen Sie die Verkn\u00FCpfung zur Adresse entfernen? +cms.basetypes.ui.contact.delete_address.button_label=L\u00F6schen + +cms.basetypes.ui.contact.attach_person=Person verkn\u00FCpfen +cms.basetypes.ui.contact.edit_person=Person bearbeiten +cms.basetypes.ui.contact.reattach_person=Person neu verkn\u00FCpfen +cms.basetypes.ui.contact.delete_person=Person l\u00F6schen +cms.basetypes.ui.contact.emptyPerson=Zur Zeit ist keine Person verkn\u00FCft +cms.basetypes.ui.contact.select_person=Bitte w\u00E4hlen Sie einen Eintrag vom Typ Person +cms.basetypes.ui.contact.select_person.add=Verkn\u00FCpfen +cms.basetypes.ui.contact.select_person.change=Ver\u00E4ndern +cms.basetypes.ui.contact.select_person.wrong_type=Der gew\u00E4hlte Eintrag ist nicht vom Typ Person +cms.basetypes.ui.contact.select_person.cancelled=Abbruch +cms.basetypes.ui.contact.delete_person.label=WollenSie die Verkn\u00FCfung zur Person entfernen? +cms.basetypes.ui.contact.delete_person.button_label=L\u00F6schen + +cms.basetypes.ui.contact.add_contactEntry=Kontaktinformation hinzuf\u00FCgen +cms.basetypes.ui.contact.contactEntry=Kontaktinformationen +cms.basetypes.ui.contact.contactEntry.key=Art der Information +cms.basetypes.ui.contact.contactEntry.value=Inhalt +cms.basetypes.ui.contact.contactEntry.description=Beschreibung (wird nicht \u00F6ffentlich angezeigt) +cms.basetypes.ui.contact.contactEntry.action=Aktionen + +cms.basetypes.ui.contact.contactEntry.key.contact_type=Kontaktart +cms.basetypes.ui.contact.contactEntry.key.office_hours=\u00D6ffnungszeiten +cms.basetypes.ui.contact.contactEntry.key.phone_office=Telefon (B\u00FCro) +cms.basetypes.ui.contact.contactEntry.key.phone_private=Telefon (Privat) +cms.basetypes.ui.contact.contactEntry.key.phone_mobile=Telefon (Mobil) +cms.basetypes.ui.contact.contactEntry.key.email=E-Mail +cms.basetypes.ui.contact.contactEntry.key.fax=Fax +cms.basetypes.ui.contact.contactEntry.key.im=Instant Messenger +cms.basetypes.ui.contact.contactEntry.key.www=Homepage + + +cms.basetypes.ui.contact.contactEntry.none=Zur Zeit sind keine Kontaktinformatioonen vorhanden diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/Contact.java b/ccm-cms/src/com/arsdigita/cms/basetypes/Contact.java new file mode 100644 index 000000000..6610bcd6b --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/Contact.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.cms.basetypes; + +import com.arsdigita.persistence.OID; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.cms.ContentType; +import com.arsdigita.cms.ContentPage; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.util.Assert; +import java.math.BigDecimal; + + +/** + * This content type represents an basic contact + * + */ +public class Contact extends ContentPage { + + /** PDL property names */ + public static final String PERSON = "person"; + public static final String ADDRESS = "address"; + public static final String CONTACT_ENTRIES = "contactentries"; + + // Config + private static final ContactConfig s_config = new ContactConfig(); + static { + s_config.load(); + } + + /** Data object type for tihs domain object */ + public static final String BASE_DATA_OBJECT_TYPE + = "com.arsdigita.cms.basetypes.Contact"; + + public Contact() { + super(BASE_DATA_OBJECT_TYPE); + } + + public Contact(BigDecimal id) + throws DataObjectNotFoundException { + this(new OID(BASE_DATA_OBJECT_TYPE, id)); + } + + public Contact(OID id) + throws DataObjectNotFoundException { + super(id); + } + + public Contact(DataObject obj) { + super(obj); + } + + public Contact(String type) { + super(type); + } + + @Override + public void beforeSave() { + super.beforeSave(); + + Assert.exists(getContentType(), ContentType.class); + } + + /** + * Retrieves the current configuration + */ + public static final ContactConfig getConfig() { + return s_config; + } + + + /////////////////////////////////////////////////////////////// + // accessors + + // Get the person for this contact + public Person getPerson() { + return (Person) DomainObjectFactory.newInstance((DataObject)get(PERSON)); + } + + // Set the person for this contact + public void setPerson(Person person) { + set(PERSON, person); + } + + // Unset the address for this contact + public void unsetPerson() { + set(PERSON, null); + } + + // Get the address for this contact + public Address getAddress() { + return (Address)DomainObjectFactory.newInstance((DataObject)get(ADDRESS)); + } + + // Set the address for this contact + public void setAddress(Address address) { + set(ADDRESS, address); + } + + // Unset the address for this contact + public void unsetAddress() { + set(ADDRESS, null); + } + + // Get all contact entries for this contact, p. ex. phone number, type of contact etc. + public ContactEntryCollection getContactEntries() { + return new ContactEntryCollection ((DataCollection) get(CONTACT_ENTRIES)); + } + + // Add a contact entry for this contact + public void addContactEntry(ContactEntry contactEntry) { + Assert.exists(contactEntry, ContactEntry.class); + add(CONTACT_ENTRIES, contactEntry); + } + + // Remove a contect entry for this contact + public void removeContactEntry(ContactEntry contactEntry) { + Assert.exists(contactEntry, ContactEntry.class); + remove(CONTACT_ENTRIES, contactEntry); + } + + public boolean hasContactEntries() { + return !this.getContactEntries().isEmpty(); + } +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ContactConfig.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ContactConfig.java new file mode 100644 index 000000000..c99c8a22c --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ContactConfig.java @@ -0,0 +1,151 @@ + +package com.arsdigita.cms.basetypes; + +import com.arsdigita.runtime.AbstractConfig; +import com.arsdigita.util.parameter.Parameter; +import com.arsdigita.util.parameter.BooleanParameter; +import com.arsdigita.util.parameter.StringParameter; +import java.util.StringTokenizer; +import org.apache.log4j.Logger; + +/** + * Stores the configuration record for the contact. + * + * @author Sören Bernstein (quasimodo) quasi@zes.uni-bremen.de + */ +public final class ContactConfig extends AbstractConfig { + + private static Logger s_log = Logger.getLogger(ContactConfig.class); + + private final Parameter m_hidePerson; + private final Parameter m_hideAddress; + private final Parameter m_hideAddressPostalCode; + private final Parameter m_hideAddressState; + private final Parameter m_hideAddressCountry; + private final Parameter m_contactEntryKeys; + + /** + * Public Constructor + */ + public ContactConfig() { + + /** + * If set to true disables the possibility to attach a person ct + */ + m_hidePerson = new BooleanParameter + ("com.arsdigita.cms.basetypes.contact.hide_person", + Parameter.REQUIRED, + new Boolean(false)); + + /** + * If set to true disables the possibility to attach a baseAddress ct + */ + m_hideAddress = new BooleanParameter + ("com.arsdigita.cms.basetypes.contact.hide_address", + Parameter.REQUIRED, + new Boolean(false)); + + /** + * If set to true hides the postal code entry field for the attached address ct + */ + m_hideAddressPostalCode = new BooleanParameter + ("com.arsdigita.cms.basetypes.contact.address.hide_postal_code", + Parameter.REQUIRED, + new Boolean(false)); + + /** + * If set to true hides the state entry field for the attached address ct + */ + m_hideAddressState = new BooleanParameter + ("com.arsdigita.cms.basetypes.contact.address.hide_state", + Parameter.REQUIRED, + new Boolean(false)); + + /** + * If set to true hides the country selection for the attaches address ct + */ + m_hideAddressCountry = new BooleanParameter + ("com.arsdigita.cms.basetypes.contact.address.hide_country", + Parameter.REQUIRED, + new Boolean(false)); + + /** + */ + m_contactEntryKeys = new StringParameter + ("com.arsdigita.cms.basetypes.contact.contact_entry_keys", + Parameter.REQUIRED, + "contact_type,office_hours,phone_office,phone_private,phone_mobile,email,fax,im,www"); + + register(m_hidePerson); + register(m_hideAddress); + register(m_hideAddressPostalCode); + register(m_hideAddressState); + register(m_hideAddressCountry); + register(m_contactEntryKeys); + + loadInfo(); + } + + /** + */ + public final boolean getHidePerson() { + return ((Boolean) get(m_hidePerson)).booleanValue(); + } + + /** + */ + public final boolean getHideAddress() { + return ((Boolean) get(m_hideAddress)).booleanValue(); + } + + /** + */ + public final boolean getHideAddressPostalCode() { + return ((Boolean) get(m_hideAddressPostalCode)).booleanValue(); + } + + /** + */ + public final boolean getHideAddressState() { + return ((Boolean) get(m_hideAddressState)).booleanValue(); + } + + /** + */ + public final boolean getHideAddressCountry() { + return ((Boolean) get(m_hideAddressCountry)).booleanValue(); + } + + /** + * Returns the contactEntryKeys as StringTokenizer. + */ + public final StringTokenizer getContactEntryKeys() { + return new StringTokenizer((((String) get(m_contactEntryKeys)).replace(" ","")), ",", false); + } + + /** + * Return true, if language lang is part of supported langs + */ + public final boolean hasKey(String key) { + return ((String) get(m_contactEntryKeys)).contains(key); + } + + /** + * Return the index value for given key + */ + public final int getKeyIndex(String key) { + int index = -1; + + if(hasKey(key)) { + StringTokenizer keys = getContactEntryKeys(); + while(keys.hasMoreElements()) { + index++; + if(keys.nextToken().equals(key)) { + break; + } + } + } + + return index; + } +} \ No newline at end of file diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ContactConfig_parameter.properties b/ccm-cms/src/com/arsdigita/cms/basetypes/ContactConfig_parameter.properties new file mode 100644 index 000000000..f1bd576f6 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ContactConfig_parameter.properties @@ -0,0 +1,29 @@ +com.arsdigita.cms.basetypes.contact.hide_person.title=Hide person attachment +com.arsdigita.cms.basetypes.contact.hide_person.purpose=Hide the part to attach a person CT +com.arsdigita.cms.basetypes.contact.hide_person.example=false +com.arsdigita.cms.basetypes.contact.hide_person.format=[boolean] + +com.arsdigita.cms.basetypes.contact.hide_address.title=Hide address attachment +com.arsdigita.cms.basetypes.contact.hide_address.purpose=Hide the part to attach a baseAddress CT +com.arsdigita.cms.basetypes.contact.hide_address.example=false +com.arsdigita.cms.basetypes.contact.hide_address.format=[boolean] + +com.arsdigita.cms.basetypes.contact.address.hide_postal_code.title=Hide postal code for attached adress +com.arsdigita.cms.basetypes.contact.address.hide_postal_code.purpose=Hide the postal code entry field for the attached baseAddress +com.arsdigita.cms.basetypes.contact.address.hide_postal_code.example=false +com.arsdigita.cms.basetypes.contact.address.hide_postal_code.format=[boolean] + +com.arsdigita.cms.basetypes.contact.address.hide_state.title=Hide state for attached adress +com.arsdigita.cms.basetypes.contact.address.hide_state.purpose=Hide the state entry field for the attached baseAddress +com.arsdigita.cms.basetypes.contact.address.hide_state.example=false +com.arsdigita.cms.basetypes.contact.address.hide_state.format=[boolean] + +com.arsdigita.cms.basetypes.contact.address.hide_country.title=Hide country for attached address +com.arsdigita.cms.basetypes.contact.address.hide_country.purpose=Hide the country selection box for the attached baseAddress +com.arsdigita.cms.basetypes.contact.address.hide_country.example=false +com.arsdigita.cms.basetypes.contact.address.hide_country.format=[boolean] + +com.arsdigita.cms.basetypes.contact.contact_entry_keys.title=Select available contact entry types +com.arsdigita.cms.basetypes.contact.contact_entry_keys.purpose=Select available contact entry types and define display order +com.arsdigita.cms.basetypes.contact.contact_entry_keys.example=contact_type,office_hours,phone_office,phone_private,phone_mobile,email,fax,im,www +com.arsdigita.cms.basetypes.contact.contact_entry_keys.format=[string] diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ContactEntry.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ContactEntry.java new file mode 100644 index 000000000..be83a843a --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ContactEntry.java @@ -0,0 +1,114 @@ +/* + * BaseContactEntry.java + * + * Created on 13. Mai 2009, 12:31 + * + * This class is part of BaseContact and stores the contact informations. + * These informations is organized by a key, which possible values are set by a config param. + * In addition there is a description field to provide additional information for this entry + * which will be shown along with the entry value, if set. If there is no description set, the + * key will be used as a fallback label. + * + * For example: + * key = "phone" + * description = "office phone" + * value = "1234 / 123456" + * + * would be shown as + * office phone: 1234 / 123456 + */ + +package com.arsdigita.cms.basetypes; + +import com.arsdigita.cms.ContentItem; +import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.persistence.DataObject; +import com.arsdigita.persistence.OID; +import java.math.BigDecimal; +import org.apache.log4j.Logger; + +/** + * + * @author quasi + */ +public class ContactEntry extends ContentItem { + + public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.basetypes.ContactEntry"; + private static final String BASE_DATA_OBJECT_PACKAGE = "com.arsdigita.cms.basetypes"; + + private static final Logger s_log = Logger.getLogger(ContactEntry.class); + + /** PDL property names */ + public static final String KEY = "key"; + public static final String VALUE = "value"; + public static final String DESCRIPTION = "description"; + + + /** + * Creates a new instance of ContactEntry + */ + public ContactEntry() { + this(BASE_DATA_OBJECT_TYPE); + } + + public ContactEntry(String typeName) { + super(typeName); + } + + public ContactEntry(OID oid) { + super(oid); + } + + public ContactEntry(DataObject object) { + super(object); + } + + /** + * Constructor. Retrieves an object instance with the given id. + * @param id the id of the object to retrieve + */ + public ContactEntry(BigDecimal id) throws DataObjectNotFoundException { + this(new OID(BASE_DATA_OBJECT_TYPE, id)); + } + + public ContactEntry(Contact contact, String key, String value, String description) { + this(); + setName(key + " for " + contact.getName() + "(" + contact.getID() + ")"); + setKey(key); + setValue(value); + setDescription(description); + save(); + } + + ///////////////////////////////////////////////// + // accessors + + // Get key + public String getKey() { + return (String) get(KEY); + } + + // Set key + public void setKey(String key) { + set(KEY, key); + } + + // Get value + public String getValue() { + return (String) get(VALUE); + } + + // Set value + public void setValue(String value) { + set(VALUE, value); + } + + // Get description + public String getDescription() { + return (String) get(DESCRIPTION); + } + + public void setDescription(String description) { + set(DESCRIPTION, description); + } +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ContactEntryCollection.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ContactEntryCollection.java new file mode 100644 index 000000000..ee59c3c67 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ContactEntryCollection.java @@ -0,0 +1,140 @@ +/* + * ContactEntryCollection.java + * + * Created on 13. Mai 2009, 12:32 + * + * + */ +package com.arsdigita.cms.basetypes; + +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.persistence.DataCollection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.TreeSet; + +/** + * + * @author quasi + */ +public class ContactEntryCollection extends DomainCollection { + + private TreeSet m_sortedCollection = new TreeSet(new ContactEntryComparator()); + private Iterator m_iterator; + private boolean m_firstElem; + private ContactEntry m_currentContactEntry; + + /** + * Creates a new instance of ContactEntryCollection + */ + public ContactEntryCollection(Contact contact) { + this((DataCollection) contact.getContactEntries()); + } + + public ContactEntryCollection(DataCollection dataCollection) { + super(dataCollection); + + // Now copy all objects from m_dataCollection to the sorting TreeSet + this.sortCollection(); + } + + @Override + public boolean next() { + boolean retVal = m_iterator.hasNext(); + if (retVal) { + m_currentContactEntry = (ContactEntry) m_iterator.next(); + m_firstElem = false; + } + return retVal; + } + + @Override + public boolean isBeforeFirst() { + return false; + } + + @Override + public boolean isAfterLast() { + return false; + } + + @Override + public boolean isFirst() { + return m_firstElem; + } + + @Override + public boolean isLast() { + return !m_iterator.hasNext(); + } + + @Override + public boolean isEmpty() { + return m_sortedCollection.isEmpty(); + } + + @Override + public long size() { + return m_sortedCollection.size(); + } + + @Override + public void reset() { + super.reset(); + m_iterator = null; + m_currentContactEntry = null; + m_sortedCollection = new TreeSet(new ContactEntryComparator()); + this.sortCollection(); + } + + @Override + public void rewind() { + m_iterator = m_sortedCollection.iterator(); + } + + public final String getKey() { + return (String) getContactEntry().getKey(); + } + + public final String getDescription() { + return (String) getContactEntry().getDescription(); + } + + public final String getValue() { + return (String) getContactEntry().getValue(); + } + + public ContactEntry getContactEntry() { +// return new ContactEntry(m_dataCollection.getDataObject()); + return m_currentContactEntry; + } + + private void sortCollection() { + + m_dataCollection.rewind(); + + while (m_dataCollection.next()) { + m_sortedCollection.add(new ContactEntry(m_dataCollection.getDataObject())); + } + + m_iterator = m_sortedCollection.iterator(); + m_firstElem = true; + } + + private class ContactEntryComparator implements Comparator { + + public int compare(Object o1, Object o2) { + int retVal = 0; + if (o1 instanceof ContactEntry && o2 instanceof ContactEntry) { + ContactEntry bc1 = (ContactEntry) o1; + ContactEntry bc2 = (ContactEntry) o2; + retVal = Contact.getConfig().getKeyIndex(bc1.getKey()) + - Contact.getConfig().getKeyIndex(bc2.getKey()); + if (retVal == 0) { + retVal = -1; + } + } + return retVal; + } + } +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAddressPropertiesStep.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAddressPropertiesStep.java new file mode 100644 index 000000000..6c7421928 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAddressPropertiesStep.java @@ -0,0 +1,110 @@ +/* + * ContactAddressPropertiesStep.java + * + * Created on 4. Juli 2009, 15:15 + * + * To change this template, choose Tools | Template Manager + * and open the template in the editor. + */ +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; +import com.arsdigita.domain.DomainObject; +import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.cms.basetypes.Address; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; + +/** + * + * @author quasi + */ +public class ContactAddressPropertiesStep extends SimpleEditStep { + + public static final String ADD_ADDRESS_SHEET_NAME = "addAddress"; + public static final String EDIT_ADDRESS_SHEET_NAME = "editAddress"; + public static final String CHANGE_ADDRESS_SHEET_NAME = "changeAddress"; + public static final String DELETE_ADDRESS_SHEET_NAME = "deleteAddress"; + + /** Creates a new instance of ContactAddressPropertiesStep */ + public ContactAddressPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) { + this(itemModel, parent, ""); + } + + public ContactAddressPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent, String prefix) { + super(itemModel, parent, prefix); + +// Contact contact = (Contact)itemModel.getSelectedObject(state); + +//XXX +// if(/*contact.getAddress() == null*/ true) { + BasicPageForm attachAddressSheet = new ContactAttachAddressPropertyForm(itemModel, this); + add(ADD_ADDRESS_SHEET_NAME, (String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.attach_address").localize(), new WorkflowLockedComponentAccess(attachAddressSheet, itemModel), attachAddressSheet.getSaveCancelSection().getCancelButton()); + + /* Set the displayComponent for this step */ +// setDisplayComponent(getEmptyBaseAddressPropertySheet(itemModel)); + +// } else { + + // editAddress + BasicPageForm editAddressSheet = new ContactEditAddressPropertyForm(itemModel, this); + add(EDIT_ADDRESS_SHEET_NAME, (String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.edit_address").localize(), new WorkflowLockedComponentAccess(editAddressSheet, itemModel), editAddressSheet.getSaveCancelSection().getCancelButton()); + +// BasicPageForm attachAddressSheet = new ContactAttachAddressPropertyForm(itemModel, this); +// add(CHANGE_ADDRESS_SHEET_NAME, (String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.reattach_address").localize(), new WorkflowLockedComponentAccess(attachAddressSheet, itemModel), attachAddressSheet.getSaveCancelSection().getCancelButton()); + + BasicPageForm deleteAddressSheet = new ContactDeleteAddressForm(itemModel, this); + add(DELETE_ADDRESS_SHEET_NAME, (String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.delete_address").localize(), new WorkflowLockedComponentAccess(deleteAddressSheet, itemModel), deleteAddressSheet.getSaveCancelSection().getCancelButton()); + + /* Set the displayComponent for this step */ + setDisplayComponent(getAddressPropertySheet(itemModel)); +// } + + } + + public static Component getAddressPropertySheet(ItemSelectionModel itemModel) { + + DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel); + + sheet.add((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.address").localize(), "address." + Address.ADDRESS); + if (!Contact.getConfig().getHideAddressPostalCode()) { + sheet.add((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.postal_code").localize(), "address." + Address.POSTAL_CODE); + } + sheet.add((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.city").localize(), "address." + Address.CITY); + if (!Contact.getConfig().getHideAddressState()) { + sheet.add((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.state").localize(), "address." + Address.STATE); + } + + if (!Contact.getConfig().getHideAddressCountry()) { + sheet.add((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.iso_country_code").localize(), + "address." + Address.ISO_COUNTRY_CODE, + new DomainObjectPropertySheet.AttributeFormatter() { + + public String format(DomainObject item, + String attribute, + PageState state) { + Address Address = ((Contact) item).getAddress(); + if (Address != null && Address.getIsoCountryCode() != null) { + return Address.getCountryNameFromIsoCode(Address.getIsoCountryCode()); + } else { + return (String) BasetypesGlobalizationUtil.globalize("cms.ui.unknown").localize(); + } + } + }); + } + + return sheet; + + } + + public static Component getEmptyBaseAddressPropertySheet(ItemSelectionModel itemModel) { + return new Label(((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.emptyAddress").localize())); + } +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAttachAddressPropertyForm.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAttachAddressPropertyForm.java new file mode 100644 index 000000000..a06b19d6d --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAttachAddressPropertyForm.java @@ -0,0 +1,147 @@ +/* + * ContactEditAddressPropertyForm.java + * + * Created on 8. Juli 2009, 10:27 + * + * To change this template, choose Tools | Template Manager + * and open the template in the editor. + */ + +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +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.FormSubmissionListener; +import com.arsdigita.bebop.event.PrintEvent; +import com.arsdigita.bebop.event.PrintListener; +import com.arsdigita.bebop.form.Submit; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.basetypes.Address; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.ui.ItemSearchWidget; +import com.arsdigita.cms.ContentType; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; +import com.arsdigita.util.UncheckedWrapperException; + +import org.apache.log4j.Logger; + +/** + * + * @author quasi + */ +public class ContactAttachAddressPropertyForm extends BasicPageForm implements FormProcessListener, FormInitListener, FormSubmissionListener { + + private static final Logger logger = Logger.getLogger(ContactPropertyForm.class); + + private ContactAddressPropertiesStep m_step; + private ItemSearchWidget m_itemSearch; + private SaveCancelSection m_saveCancelSection; + private final String ITEM_SEARCH = "contactAddress"; + + /** + * ID of the form + */ + public static final String ID = "ContactAttachAddress"; + + /** + * Constrctor taking an ItemSelectionModel + * + * @param itemModel + */ + public ContactAttachAddressPropertyForm(ItemSelectionModel itemModel) { + this(itemModel, null); + } + + /** + * Constrctor taking an ItemSelectionModel and an instance of ContactPropertiesStep. + * + * @param itemModel + * @param step + */ + public ContactAttachAddressPropertyForm(ItemSelectionModel itemModel, ContactAddressPropertiesStep step) { + super(ID, itemModel); + addSubmissionListener(this); + + addSaveCancelSection(); + + addInitListener(this); + addSubmissionListener(this); + + } + + @Override + public void addWidgets() { + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_address").localize())); + this.m_itemSearch = new ItemSearchWidget(ITEM_SEARCH, ContentType.findByAssociatedObjectType("com.arsdigita.cms.basetypes.BaseAddress")); + add(this.m_itemSearch); + } + + public void init(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + setVisible(state, true); + + if (contact != null) { + data.put(ITEM_SEARCH, contact.getAddress()); + } + } + + public void process(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + if (!this.getSaveCancelSection().getCancelButton().isSelected(state)) { + contact.setAddress((Address)data.get(ITEM_SEARCH)); + } + init(fse); + } + + + /** + * Creates the section with the save and the cancel button. + */ + @Override + public void addSaveCancelSection() { + try { + getSaveCancelSection().getSaveButton().addPrintListener(new PrintListener() { + + public void prepare(PrintEvent e) { + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(e.getPageState()); + Submit target = (Submit) e.getTarget(); + + if (contact.getAddress() != null) { + target.setButtonLabel((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_address.change").localize()); + } else { + target.setButtonLabel((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_address.add").localize()); + } + } + }); + } catch (Exception ex) { + throw new UncheckedWrapperException("this cannot happen", ex); + } + } + + @Override + public void validate(FormSectionEvent e) throws FormProcessException { + if (e.getFormData().get(ITEM_SEARCH) == null) { + throw new FormProcessException((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_address.wrong_type").localize()); + } + } + + public void submitted(FormSectionEvent e) throws FormProcessException { + if (getSaveCancelSection().getCancelButton().isSelected(e.getPageState())) { + init(e); + throw new FormProcessException((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_address.cancelled").localize()); + } + } +} \ No newline at end of file diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAttachPersonPropertyForm.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAttachPersonPropertyForm.java new file mode 100644 index 000000000..f959084d3 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactAttachPersonPropertyForm.java @@ -0,0 +1,147 @@ +/* + * ContactEditPersonPropertyForm.java + * + * Created on 8. Juli 2009, 10:27 + * + * To change this template, choose Tools | Template Manager + * and open the template in the editor. + */ + +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +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.FormSubmissionListener; +import com.arsdigita.bebop.event.PrintEvent; +import com.arsdigita.bebop.event.PrintListener; +import com.arsdigita.bebop.form.Submit; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.basetypes.Person; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.ui.ItemSearchWidget; +import com.arsdigita.cms.ContentType; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; +import com.arsdigita.util.UncheckedWrapperException; + +import org.apache.log4j.Logger; + +/** + * + * @author quasi + */ +public class ContactAttachPersonPropertyForm extends BasicPageForm implements FormProcessListener, FormInitListener, FormSubmissionListener { + + private static final Logger logger = Logger.getLogger(ContactPropertyForm.class); + + private ContactPersonPropertiesStep m_step; + private ItemSearchWidget m_itemSearch; + private SaveCancelSection m_saveCancelSection; + private final String ITEM_SEARCH = "contactPerson"; + + /** + * ID of the form + */ + public static final String ID = "ContactAttachPerson"; + + /** + * Constrctor taking an ItemSelectionModel + * + * @param itemModel + */ + public ContactAttachPersonPropertyForm(ItemSelectionModel itemModel) { + this(itemModel, null); + } + + /** + * Constrctor taking an ItemSelectionModel and an instance of ContactPropertiesStep. + * + * @param itemModel + * @param step + */ + public ContactAttachPersonPropertyForm(ItemSelectionModel itemModel, ContactPersonPropertiesStep step) { + super(ID, itemModel); + addSubmissionListener(this); + + addSaveCancelSection(); + + addInitListener(this); + addSubmissionListener(this); + + } + + @Override + public void addWidgets() { + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_person").localize())); + this.m_itemSearch = new ItemSearchWidget(ITEM_SEARCH, ContentType.findByAssociatedObjectType("com.arsdigita.cms.basetypes.Person")); + add(this.m_itemSearch); + } + + public void init(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + setVisible(state, true); + + if (contact != null) { + data.put(ITEM_SEARCH, contact.getPerson()); + } + } + + public void process(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + if (!this.getSaveCancelSection().getCancelButton().isSelected(state)) { + contact.setPerson((Person)data.get(ITEM_SEARCH)); + } + init(fse); + } + + + /** + * Creates the section with the save and the cancel button. + */ + @Override + public void addSaveCancelSection() { + try { + getSaveCancelSection().getSaveButton().addPrintListener(new PrintListener() { + + public void prepare(PrintEvent e) { + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(e.getPageState()); + Submit target = (Submit) e.getTarget(); + + if (contact.getPerson() != null) { + target.setButtonLabel((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_person.change").localize()); + } else { + target.setButtonLabel((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_person.add").localize()); + } + } + }); + } catch (Exception ex) { + throw new UncheckedWrapperException("this cannot happen", ex); + } + } + + @Override + public void validate(FormSectionEvent e) throws FormProcessException { + if (e.getFormData().get(ITEM_SEARCH) == null) { + throw new FormProcessException((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_person.wrong_type").localize()); + } + } + + public void submitted(FormSectionEvent e) throws FormProcessException { + if (getSaveCancelSection().getCancelButton().isSelected(e.getPageState())) { + init(e); + throw new FormProcessException((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.select_person.cancelled").localize()); + } + } +} \ No newline at end of file diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactDeleteAddressForm.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactDeleteAddressForm.java new file mode 100644 index 000000000..fd4145935 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactDeleteAddressForm.java @@ -0,0 +1,77 @@ +/* + * ContactDeleteAddressForm.java + * + * Created on 17. Juli 2009, 10:10 + * + * To change this template, choose Tools | Template Manager + * and open the template in the editor. + */ +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.PrintEvent; +import com.arsdigita.bebop.event.PrintListener; +import com.arsdigita.bebop.form.Submit; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.util.UncheckedWrapperException; + +/** + * + * @author quasi + */ +public class ContactDeleteAddressForm extends BasicPageForm implements FormProcessListener { + + /** + * ID of the form + */ + public static final String ID = "BaseContactDeleteAddress"; + + ContactDeleteAddressForm(ItemSelectionModel itemModel, ContactAddressPropertiesStep step) { + super(ID, itemModel); + addSaveCancelSection(); + } + + public void init(FormSectionEvent fse) { + } + + @Override + public void addWidgets() { + add(new Label((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.delete_address.label").localize())); + } + + /** + * Creates the section with the save and the cancel button. + */ + @Override + public void addSaveCancelSection() { + try { + getSaveCancelSection().getSaveButton().addPrintListener(new PrintListener() { + + public void prepare(PrintEvent e) { + Contact contact = (Contact) getItemSelectionModel().getSelectedObject(e.getPageState()); + Submit target = (Submit) e.getTarget(); + target.setButtonLabel((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.delete_address.button_label").localize()); + } + }); + } catch (Exception ex) { + throw new UncheckedWrapperException("this cannot happen", ex); + } + } + + public final void process(final FormSectionEvent fse) throws FormProcessException { + + final PageState state = fse.getPageState(); + final Contact contact = (Contact) getItemSelectionModel().getSelectedObject(state); + + if (contact != null && contact.getAddress() != null) { + contact.unsetAddress(); + } + } +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactDeletePersonForm.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactDeletePersonForm.java new file mode 100644 index 000000000..0442d802c --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactDeletePersonForm.java @@ -0,0 +1,80 @@ +/* + * ContactDeletePersonForm.java + * + * Created on 17. Juli 2009, 10:10 + * + * To change this template, choose Tools | Template Manager + * and open the template in the editor. + */ + +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.PrintEvent; +import com.arsdigita.bebop.event.PrintListener; +import com.arsdigita.bebop.form.Submit; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.util.UncheckedWrapperException; + +/** + * + * @author quasi + */ +public class ContactDeletePersonForm extends BasicPageForm implements FormProcessListener { + + /** + * ID of the form + */ + public static final String ID = "ContactDeletePerson"; + + ContactDeletePersonForm(ItemSelectionModel itemModel, ContactPersonPropertiesStep step) { + super(ID, itemModel); + addSaveCancelSection(); + } + + public void init(FormSectionEvent fse) { + + } + + @Override + public void addWidgets() { + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.delete_person.label").localize())); + } + + /** + * Creates the section with the save and the cancel button. + */ + @Override + public void addSaveCancelSection() { + try { + getSaveCancelSection().getSaveButton().addPrintListener(new PrintListener() { + + public void prepare(PrintEvent e) { + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(e.getPageState()); + Submit target = (Submit) e.getTarget(); + target.setButtonLabel((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.delete_person").localize()); + } + }); + } catch (Exception ex) { + throw new UncheckedWrapperException("this cannot happen", ex); + } + } + + public final void process(final FormSectionEvent fse) throws FormProcessException { + + final PageState state = fse.getPageState(); + final Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + if (contact != null && contact.getPerson() != null) { + contact.unsetPerson(); + } + } + +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEditAddressPropertyForm.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEditAddressPropertyForm.java new file mode 100644 index 000000000..487697f54 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEditAddressPropertyForm.java @@ -0,0 +1,189 @@ +/* + * ContactEditAddressPropertyForm.java + * + * Created on 8. Juli 2009, 10:27 + * + * To change this template, choose Tools | Template Manager + * and open the template in the editor. + */ + +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +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.ParameterEvent; +import com.arsdigita.bebop.event.ParameterListener; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.form.SingleSelect; +import com.arsdigita.bebop.form.TextArea; +import com.arsdigita.bebop.form.TextField; +import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.bebop.parameters.StringInRangeValidationListener; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.bebop.parameters.ParameterData; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import java.util.Iterator; +import java.util.Map; +import com.arsdigita.cms.basetypes.Address; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; + +import org.apache.log4j.Logger; + +/** + * + * @author quasi + */ +public class ContactEditAddressPropertyForm extends BasicPageForm implements FormProcessListener, FormInitListener, FormSubmissionListener { + + private static final Logger logger = Logger.getLogger(ContactPropertyForm.class); + + private ContactAddressPropertiesStep m_step; + + public static final String ADDRESS = Address.ADDRESS; + public static final String POSTAL_CODE = Address.POSTAL_CODE; + public static final String CITY = Address.CITY; + public static final String STATE = Address.STATE; + public static final String ISO_COUNTRY_CODE = Address.ISO_COUNTRY_CODE; + + /** + * ID of the form + */ + public static final String ID = "ContactEditAddress"; + + /** + * Constrctor taking an ItemSelectionModel + * + * @param itemModel + */ + public ContactEditAddressPropertyForm(ItemSelectionModel itemModel) { + this(itemModel, null); + } + + /** + * Constrctor taking an ItemSelectionModel and an instance of ContactPropertiesStep. + * + * @param itemModel + * @param step + */ + public ContactEditAddressPropertyForm(ItemSelectionModel itemModel, ContactAddressPropertiesStep step) { + super(ID, itemModel); + m_step = step; + addSubmissionListener(this); + } + + @Override + public void addWidgets() { + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.address").localize())); + ParameterModel addressParam = new StringParameter(ADDRESS); + addressParam.addParameterListener( new NotNullValidationListener( ) ); + addressParam.addParameterListener( new StringInRangeValidationListener(0, 1000) ); + TextArea address = new TextArea(addressParam); + address.setRows(5); + address.setCols(30); + add(address); + + if(!Contact.getConfig().getHideAddressPostalCode()) { + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.postal_code").localize())); + ParameterModel postalCodeParam = new StringParameter(POSTAL_CODE); + TextField postalCode = new TextField(postalCodeParam); + /* XXX NumberListener ?*/ + add(postalCode); + } + + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.city").localize())); + ParameterModel cityParam = new StringParameter(CITY); + TextField city = new TextField(cityParam); + add(city); + + if(!Contact.getConfig().getHideAddressState()) { + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.state").localize())); + ParameterModel stateParam = new StringParameter(STATE); + TextField state = new TextField(stateParam); + add(state); + } + + if (!Contact.getConfig().getHideAddressCountry()) { + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.baseAddress.iso_country_code").localize())); + ParameterModel countryParam = new StringParameter(ISO_COUNTRY_CODE); + countryParam.addParameterListener(new StringInRangeValidationListener(0, 2)); + + SingleSelect country = new SingleSelect(countryParam); + + country.addOption(new Option("", new Label((String)BasetypesGlobalizationUtil.globalize("cms.ui.select_one" ).localize()))); + + Iterator countries = Address.getSortedListOfCountries(null).entrySet().iterator(); + while(countries.hasNext()) { + Map.Entry elem = (Map.Entry)countries.next(); + country.addOption(new Option(elem.getValue().toString(), elem.getKey().toString())); + } + + country.addValidationListener( + new ParameterListener() { + public void validate(ParameterEvent e) throws FormProcessException { + ParameterData data = e.getParameterData(); + String isoCode = (String) data.getValue() ; + if (isoCode == null || isoCode.length() == 0) { + data.addError((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.address.error_iso_country").localize()); + } + } + } + ); + + add(country); + } + + } + + public void init(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + if(contact.getAddress() != null) { + data.put(ADDRESS, contact.getAddress().getAddress()); + data.put(POSTAL_CODE, contact.getAddress().getPostalCode()); + data.put(CITY, contact.getAddress().getCity()); + data.put(STATE, contact.getAddress().getState()); + if(!Address.getConfig().getHideCountryCodeSelection()) { + data.put(ISO_COUNTRY_CODE, contact.getAddress().getIsoCountryCode()); + } + } + } + + public void submitted(FormSectionEvent fse) { + if (m_step != null && + getSaveCancelSection().getCancelButton().isSelected(fse.getPageState())) { + m_step.cancelStreamlinedCreation(fse.getPageState()); + } + } + + public void process(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + if (contact.getAddress() != null && + getSaveCancelSection().getSaveButton().isSelected(fse.getPageState())) { + contact.getAddress().setAddress((String)data.get(ADDRESS)); + contact.getAddress().setPostalCode((String)data.get(POSTAL_CODE)); + contact.getAddress().setCity((String)data.get(CITY)); + contact.getAddress().setState((String)data.get(STATE)); + contact.getAddress().setIsoCountryCode((String)data.get(ISO_COUNTRY_CODE)); + + contact.getAddress().save(); + } + + if (m_step != null) { + m_step.maybeForwardToNextStep(fse.getPageState()); + } + } +} \ No newline at end of file diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEditPersonPropertyForm.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEditPersonPropertyForm.java new file mode 100644 index 000000000..8afee36d3 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEditPersonPropertyForm.java @@ -0,0 +1,141 @@ +/* + * ContactEditPersonPropertyForm.java + * + * Created on 8. Juli 2009, 10:27 + * + * To change this template, choose Tools | Template Manager + * and open the template in the editor. + */ + +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +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.form.TextField; +import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.bebop.parameters.StringInRangeValidationListener; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.basetypes.Person; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; + +import org.apache.log4j.Logger; + +/** + * + * @author quasi + */ +public class ContactEditPersonPropertyForm extends BasicPageForm implements FormProcessListener, FormInitListener, FormSubmissionListener { + + private static final Logger logger = Logger.getLogger(ContactPropertyForm.class); + + private ContactPersonPropertiesStep m_step; + + public static final String SURNAME = Person.SURNAME; + public static final String GIVENNAME = Person.GIVENNAME; + public static final String TITLEPRE = Person.TITLEPRE; + public static final String TITLEPOST = Person.TITLEPOST; + + /** + * ID of the form + */ + public static final String ID = "ContactEditPerson"; + + /** + * Constrctor taking an ItemSelectionModel + * + * @param itemModel + */ + public ContactEditPersonPropertyForm(ItemSelectionModel itemModel) { + this(itemModel, null); + } + + /** + * Constrctor taking an ItemSelectionModel and an instance of ContactPropertiesStep. + * + * @param itemModel + * @param step + */ + public ContactEditPersonPropertyForm(ItemSelectionModel itemModel, ContactPersonPropertiesStep step) { + super(ID, itemModel); + m_step = step; + addSubmissionListener(this); + } + + @Override + public void addWidgets() { + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.person.surname").localize())); + ParameterModel surnameParam = new StringParameter(SURNAME); + surnameParam.addParameterListener( new NotNullValidationListener( ) ); + surnameParam.addParameterListener( new StringInRangeValidationListener(0, 1000) ); + TextField surname = new TextField(surnameParam); + add(surname); + + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.person.givenname").localize())); + ParameterModel givennameParam = new StringParameter(GIVENNAME); + givennameParam.addParameterListener( new NotNullValidationListener( ) ); + givennameParam.addParameterListener( new StringInRangeValidationListener(0, 1000) ); + TextField givenname = new TextField(givennameParam); + add(givenname); + + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.person.titlepre").localize())); + ParameterModel titlepreParam = new StringParameter(TITLEPRE); + titlepreParam.addParameterListener( new StringInRangeValidationListener(0, 1000) ); + TextField titlepre = new TextField(titlepreParam); + add(titlepre); + + add(new Label((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.person.titlepost").localize())); + ParameterModel titlepostParam = new StringParameter(TITLEPOST); + titlepostParam.addParameterListener( new StringInRangeValidationListener(0, 1000) ); + TextField titlepost = new TextField(titlepostParam); + add(titlepost); + } + + public void init(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + if(contact.getPerson() != null) { + data.put(SURNAME, contact.getPerson().getSurname()); + data.put(GIVENNAME, contact.getPerson().getGivenName()); + data.put(TITLEPRE, contact.getPerson().getTitlePre()); + data.put(TITLEPOST, contact.getPerson().getTitlePost()); + } + } + + public void submitted(FormSectionEvent fse) { + if (m_step != null && + getSaveCancelSection().getCancelButton().isSelected(fse.getPageState())) { + m_step.cancelStreamlinedCreation(fse.getPageState()); + } + } + + public void process(FormSectionEvent fse) { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Contact contact = (Contact)getItemSelectionModel().getSelectedObject(state); + + if (contact.getPerson() != null && + getSaveCancelSection().getSaveButton().isSelected(fse.getPageState())) { + contact.getPerson().setSurname((String)data.get(SURNAME)); + contact.getPerson().setGivenName((String)data.get(GIVENNAME)); + contact.getPerson().setTitlePre((String)data.get(TITLEPRE)); + contact.getPerson().setTitlePost((String)data.get(TITLEPOST)); + + contact.getPerson().save(); + } + + if (m_step != null) { + m_step.maybeForwardToNextStep(fse.getPageState()); + } + } +} \ No newline at end of file diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntriesPropertiesStep.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntriesPropertiesStep.java new file mode 100644 index 000000000..8dbd99a36 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntriesPropertiesStep.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.BasicItemForm; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; +import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; + +/** + * A UI step to manipulate Phones for the Contact object + * which is retrieved from the ItemSelectionModel. + * + * + * @author Shashin Shinde sshinde@redhat.com + * @version $Id: PhoBaseContactEntriesPropertiesStepva 287 2005-02-22 00:29:02Z sskracic $ + */ +public class ContactEntriesPropertiesStep extends SimpleEditStep { + + /** The name of the editing sheet added to this step */ + private static String ADD_CONTACT_ENTRY_SHEET_NAME = "addContactEntry"; + + public ContactEntriesPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public ContactEntriesPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent, String prefix) { + super(itemModel, parent, prefix); + + BasicItemForm addContactEntrySheet = new ContactEntryAddForm(itemModel); + add(ADD_CONTACT_ENTRY_SHEET_NAME, (String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.add_contactEntry").localize(), new WorkflowLockedComponentAccess(addContactEntrySheet, itemModel), addContactEntrySheet.getSaveCancelSection().getCancelButton()); + + ContactEntriesTable contactEntriesTable = new ContactEntriesTable(itemModel); + setDisplayComponent(contactEntriesTable); + + } + +} \ No newline at end of file diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntriesTable.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntriesTable.java new file mode 100644 index 000000000..76c9cb72a --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntriesTable.java @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2008 Sören Bernstein All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.cms.basetypes.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.ItemSelectionModel; +import com.arsdigita.cms.SecurityManager; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.basetypes.ContactEntry; +import com.arsdigita.cms.basetypes.ContactEntryCollection; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; +import com.arsdigita.cms.dispatcher.Utilities; +import com.arsdigita.cms.util.GlobalizationUtil; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; + +/** + * Lists all existing contact entries for a selected contact. + * + * @author Sören Bernstein (quasimodo) quasi@barkhof.uni-bremen.de + */ +public class ContactEntriesTable extends Table implements TableActionListener{ + + + private final String TABLE_COL_EDIT = "table_col_edit"; + private final String TABLE_COL_DEL = "table_col_del"; + + private ItemSelectionModel m_itemModel; + + /** + * Creates a new instance of ContactEntriesTable + */ + public ContactEntriesTable(final ItemSelectionModel itemModel) { + + super(); + this.m_itemModel = itemModel; + + // if table is empty: + setEmptyView(new Label(BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.none"))); + TableColumnModel tab_model = getColumnModel(); + + // define columns + tab_model.add(new TableColumn(0, BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.key").localize(), TABLE_COL_EDIT)); + tab_model.add(new TableColumn(1, BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.value").localize())); + tab_model.add(new TableColumn(2, BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.description").localize())); + tab_model.add(new TableColumn(3, BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.action").localize(), TABLE_COL_DEL)); + + setModelBuilder(new ContactTableModelBuilder(itemModel)); + + tab_model.get(0).setCellRenderer(new EditCellRenderer()); + tab_model.get(3).setCellRenderer(new DeleteCellRenderer()); + + addTableActionListener(this); + + } + + /** + * XXXX + * + */ + private class ContactTableModelBuilder extends LockableImpl implements TableModelBuilder { + + private ItemSelectionModel m_itemModel; + + public ContactTableModelBuilder(ItemSelectionModel itemModel) { + m_itemModel = itemModel; + } + + public TableModel makeModel(Table table, PageState state) { + + table.getRowSelectionModel().clearSelection(state); + + Contact contact = (Contact) m_itemModel.getSelectedObject(state); + +// if (contact != null && contact.hasContactEntries()) { + return new ContactTableModel(table, state, contact); +// } else { +// return Table.EMPTY_MODEL; +// } + } + } + + /** + * XXX + * + */ + private class ContactTableModel implements TableModel { + + final private int MAX_DESC_LENGTH = 25; + + private Table m_table; + private ContactEntryCollection m_contactEntryCollection; + private ContactEntry m_contactEntry; + + private ContactTableModel(Table t, PageState ps, Contact contact) { + m_table = t; + m_contactEntryCollection = contact.getContactEntries(); + } + + public int getColumnCount() { + return m_table.getColumnModel().size(); + } + + /** + * Check collection for the existence of another row. + * + * If exists, fetch the value of current ContactEntryCollection object + * into m_contactEntry class variable. + */ + public boolean nextRow() { + + if(m_contactEntryCollection != null && m_contactEntryCollection.next()){ + m_contactEntry = m_contactEntryCollection.getContactEntry(); + return true; + + } else { + + return false; + + } + } + + /** + * Return the + * @see com.arsdigita.bebop.table.TableModel#getElementAt(int) + */ + public Object getElementAt(int columnIndex) { + switch (columnIndex){ + case 0: + return (String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.key." + m_contactEntry.getKey()).localize(); + case 1: + return m_contactEntry.getValue(); + case 2: + return (m_contactEntry.getDescription() != null && m_contactEntry.getDescription().length() > MAX_DESC_LENGTH) + ? m_contactEntry.getDescription().substring(0, MAX_DESC_LENGTH) + : m_contactEntry.getDescription(); + case 3: + return GlobalizationUtil.globalize("cms.ui.delete").localize(); + default: + return null; + } + } + + /** + * + * @see com.arsdigita.bebop.table.TableModel#getKeyAt(int) + */ + public Object getKeyAt(int columnIndex) { + return m_contactEntry.getID(); + } + + } + + /** + * Check for the permissions to edit item and put either a Label or + * a ControlLink accordingly. + */ + private class EditCellRenderer extends LockableImpl implements TableCellRenderer { + + public Component getComponent(Table table, PageState state, Object value, + boolean isSelected, Object key, + int row, int column) { + + SecurityManager sm = Utilities.getSecurityManager(state); + Contact contact = (Contact) m_itemModel.getSelectedObject(state); + + boolean canEdit = sm.canAccess(state.getRequest(), + SecurityManager.EDIT_ITEM, + contact); + if(canEdit) { + ControlLink link = new ControlLink(value.toString()); + return link; + } else { + return new Label(value.toString()); + } + } + } + + /** + * Check for the permissions to delete item and put either a Label or + * a ControlLink accordingly. + */ + private class DeleteCellRenderer extends LockableImpl implements TableCellRenderer { + + public Component getComponent(Table table, PageState state, Object value, + boolean isSelected, Object key, + int row, int column) { + + SecurityManager sm = Utilities.getSecurityManager(state); + Contact contact = (Contact) m_itemModel.getSelectedObject(state); + + boolean canDelete = sm.canAccess(state.getRequest(), + SecurityManager.DELETE_ITEM, + contact); + if(canDelete) { + ControlLink link = new ControlLink(value.toString()); + link.setConfirmation((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.confirm_delete").localize()); + return link; + } else { + return new Label(value.toString()); + } + } + } + + /** + * Provide implementation to TableActionListener method. + * Code that comes into picture when a link on the table is clicked. + * Handles edit and delete event. + */ + public void cellSelected(TableActionEvent evt) { + + PageState state = evt.getPageState(); + + // Get selected ContactEntry + ContactEntry contactEntry = + new ContactEntry(new BigDecimal(evt.getRowKey().toString())); + + // Get Contact + Contact contact = (Contact) m_itemModel.getSelectedObject(state); + + // Get selected column + TableColumn col = getColumnModel().get(evt.getColumn().intValue()); + + // Edit + if(col.getHeaderKey().toString().equals(TABLE_COL_EDIT)) { + + } + + // Delete + if(col.getHeaderKey().toString().equals(TABLE_COL_DEL)) { + contact.removeContactEntry(contactEntry); + } + + } + + /** + * provide Implementation to TableActionListener method. + * Does nothing in our case. + */ + public void headSelected(TableActionEvent e) { + throw new UnsupportedOperationException("Not Implemented"); + } + + +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntryAddForm.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntryAddForm.java new file mode 100644 index 000000000..56ec0f0ac --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactEntryAddForm.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2008 Sören Bernstein All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.form.SingleSelect; +import com.arsdigita.bebop.form.TextField; +import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.basetypes.ContactEntry; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; +import com.arsdigita.cms.ui.authoring.BasicItemForm; +import com.arsdigita.bebop.parameters.StringParameter; +import java.util.StringTokenizer; + +import org.apache.log4j.Logger; + +/** + * @author Sören Bernstein (quasimodo) quasi@barkhof.uni-bremen.de + */ +public class ContactEntryAddForm extends BasicItemForm { + private static final Logger s_log = Logger.getLogger(ContactEntryAddForm.class); + + private ItemSelectionModel m_itemModel; + + /** Creates a new instance of CategoryLocalizationAddForm */ + public ContactEntryAddForm(ItemSelectionModel itemModel) { + + super("ContactEntryAddForm",itemModel); + m_itemModel = itemModel; + + } + + @Override + protected void addWidgets() { + + // Key field + add(new Label(BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.key"))); + ParameterModel contactEntryKeyParam = new StringParameter(ContactEntry.KEY); + SingleSelect contactEntryKey = new SingleSelect(contactEntryKeyParam); + contactEntryKey.addValidationListener(new NotNullValidationListener()); + contactEntryKey.addOption(new Option("", new Label((String)BasetypesGlobalizationUtil.globalize("cms.ui.select_one").localize()))); + + // Add the Options to the SingleSelect widget + StringTokenizer keyList = Contact.getConfig().getContactEntryKeys(); + while(keyList.hasMoreElements()) { + String currentKey = keyList.nextToken(); + contactEntryKey.addOption(new Option(currentKey, ((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.key." + currentKey).localize()))); + } + + add(contactEntryKey); + + // Value field + add(new Label(BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.value"))); + ParameterModel contactEntryValueParam = new StringParameter(ContactEntry.VALUE); + TextField contactEntryValue = new TextField(contactEntryValueParam); + contactEntryValue.addValidationListener(new NotNullValidationListener()); + add(contactEntryValue); + + // Description field, only for internal usage + add(new Label(BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry.description"))); + ParameterModel contactEntryDescriptionParam = new StringParameter(ContactEntry.DESCRIPTION); + TextField contactEntryDescription = new TextField(contactEntryDescriptionParam); + add(contactEntryDescription); + + } + + public void init(FormSectionEvent fse) { + + } + + public void process(FormSectionEvent fse) { + FormData data = fse.getFormData(); + Contact contact = (Contact)m_itemModel.getSelectedObject(fse.getPageState()); + + // save only if save button was pressed + if (contact != null + && getSaveCancelSection().getSaveButton().isSelected(fse.getPageState())) { + + ContactEntry contactEntry = new ContactEntry(contact, + (String)data.get(ContactEntry.KEY), + (String)data.get(ContactEntry.VALUE), + (String)data.get(ContactEntry.DESCRIPTION)); + + contact.addContactEntry(contactEntry); + } + } +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPersonPropertiesStep.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPersonPropertiesStep.java new file mode 100644 index 000000000..05bb5d386 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPersonPropertiesStep.java @@ -0,0 +1,84 @@ +/* + * ContactPersonPropertiesStep.java + * + * Created on 4. Juli 2009, 15:12 + * + * To change this template, choose Tools | Template Manager + * and open the template in the editor. + */ + +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; +import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; +import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.cms.basetypes.Person; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; + +/** + * + * @author quasi + */ +public class ContactPersonPropertiesStep extends SimpleEditStep { + + public static final String ADD_PERSON_SHEET_NAME = "addPerson"; + public static final String EDIT_PERSON_SHEET_NAME = "editPerson"; + public static final String CHANGE_PERSON_SHEET_NAME = "changePerson"; + public static final String DELETE_PERSON_SHEET_NAME = "deletePerson"; + + /** + * Creates a new instance of ContactPersonPropertiesStep + */ + public ContactPersonPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) { + this(itemModel, parent, ""); + } + + public ContactPersonPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent, String prefix) { + super(itemModel, parent, prefix); + +//XXX +// if(false/*EMPTY*/) { + + BasicPageForm addPersonSheet = new ContactAttachPersonPropertyForm(itemModel, this); + add(ADD_PERSON_SHEET_NAME, (String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.attach_person").localize(), new WorkflowLockedComponentAccess(addPersonSheet, itemModel), addPersonSheet.getSaveCancelSection().getCancelButton()); + + /* Set the displayComponent for this step */ +// setDisplayComponent(getEmptyPersonPropertySheet(itemModel)); + +// } else { + + BasicPageForm editPersonSheet = new ContactEditPersonPropertyForm(itemModel, this); + add(EDIT_PERSON_SHEET_NAME, (String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.edit_person").localize(), new WorkflowLockedComponentAccess(editPersonSheet, itemModel), editPersonSheet.getSaveCancelSection().getCancelButton()); + +// BasicPageForm changePersonSheet = new ContactEditPersonPropertyForm(itemModel, this); +// add(CHANGE_PERSON_SHEET_NAME, (String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.reattach_person").localize(), new WorkflowLockedComponentAccess(changePersonSheet, itemModel), changePersonSheet.getSaveCancelSection().getCancelButton()); + + BasicPageForm deletePersonSheet = new ContactDeletePersonForm(itemModel, this); + add(DELETE_PERSON_SHEET_NAME, (String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.delete_person").localize(), new WorkflowLockedComponentAccess(deletePersonSheet, itemModel), deletePersonSheet.getSaveCancelSection().getCancelButton()); + + /* Set the displayComponent for this step */ + setDisplayComponent(getPersonPropertySheet(itemModel)); +// } + + } + + public static Component getPersonPropertySheet(ItemSelectionModel itemModel) { + DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel); + + sheet.add((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.person.surname").localize(), "person." + Person.SURNAME); + sheet.add((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.person.givenname").localize(), "person." + Person.GIVENNAME); + sheet.add((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.person.titlepre").localize(), "person." + Person.TITLEPRE); + sheet.add((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.person.titlepost").localize(), "person." + Person.TITLEPOST); + + return sheet; + } + + public static Component getEmptyPersonPropertySheet(ItemSelectionModel itemModel) { + return new Label(((String)BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.emptyPerson").localize())); + } +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPropertiesStep.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPropertiesStep.java new file mode 100644 index 000000000..94c16f3b3 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPropertiesStep.java @@ -0,0 +1,123 @@ +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.ContentPage; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; +import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; +import com.arsdigita.domain.DomainObject; +import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; +import com.arsdigita.cms.util.GlobalizationUtil; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.SegmentedPanel; +import com.arsdigita.cms.basetypes.Contact; +import com.arsdigita.cms.basetypes.util.BasetypesGlobalizationUtil; + +import java.text.DateFormat; +import org.apache.log4j.Logger; + +/** + * AuthoringStep for the basic properties of a basic contact + */ +public class ContactPropertiesStep extends SimpleEditStep { + + private static final Logger logger = Logger.getLogger(ContactPropertiesStep.class); + /** + * Name of the this edit sheet (Don't know if this this really needed. + * It has the same value in almost all PropertiesStep classes) + */ + public static final String EDIT_BASIC_SHEET_NAME = "editBasic"; + + /** + * Constructor for the PropertiesStep. + * + * @param itemModel + * @param parent + */ + public ContactPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) { + super(itemModel, parent); + + setDefaultEditKey(EDIT_BASIC_SHEET_NAME); + SegmentedPanel segmentedPanel = createEditSheet(itemModel, parent); + + /* Sets the composed segmentedPanel as display component */ + setDisplayComponent(segmentedPanel); + } + + protected SegmentedPanel createEditSheet(ItemSelectionModel itemModel, AuthoringKitWizard parent) { + /* Use a Segmented Panel for the multiple parts of data */ + SegmentedPanel segmentedPanel = new SegmentedPanel(); + + /* The different parts of information are displayed in seperated segments each containing a SimpleEditStep */ + /* Well, not so simple anymore... */ + /* A new SimpleEditStep */ + SimpleEditStep basicProperties = new SimpleEditStep(itemModel, parent, EDIT_BASIC_SHEET_NAME); + + /* Create the edit component for this SimpleEditStep and the corresponding link */ + BasicPageForm editBasicSheet = new ContactPropertyForm(itemModel, this); + basicProperties.add(EDIT_BASIC_SHEET_NAME, (String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.edit_basic_properties").localize(), new WorkflowLockedComponentAccess(editBasicSheet, itemModel), editBasicSheet.getSaveCancelSection().getCancelButton()); + + /* Set the displayComponent for this step */ + basicProperties.setDisplayComponent(getContactPropertySheet(itemModel)); + + /* Add the SimpleEditStep to the segmented panel */ + segmentedPanel.addSegment(new Label((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.basic_properties").localize()), basicProperties); + + // If not disabled via registry, add the ui for attaching a person + if (!Contact.getConfig().getHidePerson()) { + + ContactPersonPropertiesStep personProperties = new ContactPersonPropertiesStep(itemModel, parent); + segmentedPanel.addSegment(new Label((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.person").localize()), personProperties); + + } + + if (!Contact.getConfig().getHideAddress()) { + + ContactAddressPropertiesStep addressProperties = new ContactAddressPropertiesStep(itemModel, parent); + segmentedPanel.addSegment(new Label((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.address").localize()), addressProperties); + + } + + ContactEntriesPropertiesStep contactEntries = new ContactEntriesPropertiesStep(itemModel, parent); + segmentedPanel.addSegment(new Label((String) BasetypesGlobalizationUtil.globalize("cms.basetypes.ui.contact.contactEntry").localize()), contactEntries); + + return segmentedPanel; + } + + /** + * Creates and returns the sheet for editing the basic properties + * of a contact. (@see ContactPropertyForm). + * + * @param itemModel + * @return The sheet for editing the properties of the contact. + */ + public static Component getContactPropertySheet(ItemSelectionModel itemModel) { + + + /* The DisplayComponent for the Basic Properties */ + DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel); + + sheet.add(GlobalizationUtil.globalize("cms.basetypes.ui.name"), "name"); + sheet.add(GlobalizationUtil.globalize("cms.basetypes.ui.title"), "title"); + + if (!ContentSection.getConfig().getHideLaunchDate()) { + sheet.add(GlobalizationUtil.globalize("cms.ui.authoring.page_launch_date"), ContentPage.LAUNCH_DATE, new DomainObjectPropertySheet.AttributeFormatter() { + + public String format(DomainObject obj, String attribute, PageState state) { + ContentPage page = (ContentPage) obj; + if (page.getLaunchDate() != null) { + return DateFormat.getDateInstance(DateFormat.LONG).format(page.getLaunchDate()); + } else { + return (String) GlobalizationUtil.globalize("cms.ui.unknown").localize(); + } + } + }); + } + + return sheet; + } +} diff --git a/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPropertyForm.java b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPropertyForm.java new file mode 100644 index 000000000..fee7f34b2 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/basetypes/ui/ContactPropertyForm.java @@ -0,0 +1,97 @@ +package com.arsdigita.cms.basetypes.ui; + +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +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.cms.ItemSelectionModel; +import com.arsdigita.bebop.FormData; +import com.arsdigita.cms.basetypes.Contact; + +import org.apache.log4j.Logger; + +/** + * Form for editing the basic properties of a basic contact. + */ +public class ContactPropertyForm extends BasicPageForm implements FormProcessListener, FormInitListener, FormSubmissionListener { + + private static final Logger logger = Logger.getLogger(ContactPropertyForm.class); + + private ContactPropertiesStep m_step; + + public static final String PERSON = Contact.PERSON; + public static final String ADRESS = Contact.ADDRESS; + public static final String CONTACT_ENTRIES= Contact.CONTACT_ENTRIES; + + /** + * ID of the form + */ + public static final String ID = "Contact_edit"; + + /** + * Constrctor taking an ItemSelectionModel + * + * @param itemModel + */ + public ContactPropertyForm(ItemSelectionModel itemModel) { + this(itemModel, null); + } + + /** + * Constrctor taking an ItemSelectionModel and an instance of BaseContactPropertiesStep. + * + * @param itemModel + * @param step + */ + public ContactPropertyForm(ItemSelectionModel itemModel, ContactPropertiesStep step) { + super(ID, itemModel); + m_step = step; + addSubmissionListener(this); + } + + @Override + public void addWidgets() { + super.addWidgets(); + +/* + add(new Label((String)BaseContactGlobalizationUtil.globalize("cms.basetypes.ui.contact.basic_properties.description").localize()))); + TextArea description = new TextArea(DESCRIPTION); + description.setRows(5); + description.setCols(30); + add(description); +*/ + } + + @Override + public void init(FormSectionEvent e) throws FormProcessException { + FormData data = e.getFormData(); + Contact contact = (Contact)super.initBasicWidgets(e); + +// data.put(DESCRIPTION, contact.getDescription()); + } + + @Override + public void process(FormSectionEvent e) throws FormProcessException { + FormData data = e.getFormData(); + + Contact contact = (Contact)super.processBasicWidgets(e); + + if((contact != null) && (getSaveCancelSection().getSaveButton().isSelected(e.getPageState()))) { +// contact.setDescription((String)data.get(DESCRIPTION)); + + contact.save(); + } + + if(m_step != null) { + m_step.maybeForwardToNextStep(e.getPageState()); + } + } + + public void submitted(FormSectionEvent e) throws FormProcessException { + if((m_step != null) && (getSaveCancelSection().getCancelButton().isSelected(e.getPageState()))) { + m_step.cancelStreamlinedCreation(e.getPageState()); + } + } +} \ No newline at end of file diff --git a/ccm-core/src/com/arsdigita/auditing/package.html b/ccm-core/src/com/arsdigita/auditing/package.html index 59c612a2e..163728c17 100755 --- a/ccm-core/src/com/arsdigita/auditing/package.html +++ b/ccm-core/src/com/arsdigita/auditing/package.html @@ -3,13 +3,14 @@ Auditing Service - - + +

The Auditing Service provides a standard API and common mechanism for providing a Domain Object with auditing information. Developers of Domain Objects can use this standard mechanism with almost no overhead, significantly speeding up the - development process.

+ development process. +

For a more complete description, see the full