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