diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/PersonForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/PersonForm.java index 325c70996..335573f13 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/PersonForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/PersonForm.java @@ -36,8 +36,13 @@ import com.arsdigita.util.LockableImpl; import org.librecms.assets.Person; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Objects; @@ -50,8 +55,11 @@ import static org.librecms.CmsConstants.*; public class PersonForm extends AbstractContactableEntityForm { private TextField surnameField; + private TextField givenNameField; + private TextField prefixField; + private TextField suffixField; private Submit addPersonNameButton; @@ -77,7 +85,7 @@ public class PersonForm extends AbstractContactableEntityForm { CMS_BUNDLE)); givenNameField = new TextField("givenName"); add(givenNameLabel); - add(surnameLabel); + add(givenNameField); final Label prefixLabel = new Label(new GlobalizedMessage( "cms.ui.authoring.assets.person.prefix", @@ -107,22 +115,38 @@ public class PersonForm extends AbstractContactableEntityForm { CMS_BUNDLE)); add(birthdateLabel); birthdateField = new Date("birthdate"); + add(birthdateField); } @Override protected Class getAssetClass() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + return Person.class; } @Override - protected void showLocale(PageState state) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + protected void showLocale(final PageState state) { + + // Nothing } @Override - protected Map collectData(FormSectionEvent event) throws - FormProcessException { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + protected Map collectData( + final FormSectionEvent event) throws FormProcessException { + + final PageState state = event.getPageState(); + + final Map data = new HashMap<>(); + + data.put(PersonFormController.SURNAME, surnameField.getValue(state)); + data.put(PersonFormController.GIVENNAME, + givenNameField.getValue(state)); + data.put(PersonFormController.PREFIX, prefixField.getValue(state)); + data.put(PersonFormController.SUFFIX, suffixField.getValue(state)); + + data.put(PersonFormController.BIRTHDATE, + birthdateField.getValue(state)); + + return data; } @Override @@ -130,15 +154,50 @@ public class PersonForm extends AbstractContactableEntityForm { super.init(event); - // ToDo - throw new UnsupportedOperationException(); + final PageState state = event.getPageState(); + + final Map data = getController() + .getAssetData(getSelectedAssetId(state), + getAssetClass(), + getSelectedLocale(state)); + + if (data.containsKey(PersonFormController.SURNAME)) { + surnameField.setValue(state, + data.get(PersonFormController.SURNAME)); + } + + if (data.containsKey(PersonFormController.GIVENNAME)) { + givenNameField.setValue(state, + data.get(PersonFormController.GIVENNAME)); + } + + if (data.containsKey(PersonFormController.PREFIX)) { + prefixField.setValue(state, data.get(PersonFormController.PREFIX)); + } + + if (data.containsKey(PersonFormController.SUFFIX)) { + suffixField.setValue(state, data.get(PersonFormController.SUFFIX)); + } + + if (data.containsKey(PersonFormController.BIRTHDATE)) { + birthdateField.setValue(state, + data.get(PersonFormController.BIRTHDATE)); + } } @Override public void process(final FormSectionEvent event) throws FormProcessException { - // ToDo - throw new UnsupportedOperationException(); + + if (addPersonNameButton.equals(event.getSource())) { + + final PersonFormController controller + = (PersonFormController) getController(); + controller.addPersonName(getSelectedAssetId(event.getPageState())); + + } else { + super.process(event); + } } private Table buildPersonNamesTable() { @@ -218,6 +277,7 @@ public class PersonForm extends AbstractContactableEntityForm { private final Iterator personNames; private String[] currentPersonName; + private int row; public PersonNamesTableModel(final List personNames) { diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/PersonFormController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/PersonFormController.java index c43a1581c..32ecb400e 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/PersonFormController.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/PersonFormController.java @@ -25,7 +25,11 @@ import org.librecms.assets.PersonManager; import org.librecms.assets.PersonName; import org.librecms.assets.PersonRepository; +import java.time.Instant; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Map; @@ -44,15 +48,23 @@ public class PersonFormController extends AbstractContactableEntityFormController { protected static final String SUFFIX = "suffix"; + protected static final String PREFIX = "prefix"; + protected static final String GIVENNAME = "givenName"; + protected static final String SURNAME = "surname"; + protected static final String BIRTHDATE = "birthdate"; + protected static final String PERSON_NAMES = "personNames"; protected static final int SURNAME_INDEX = 0; + protected static final int GIVENNAME_INDEX = 1; + protected static final int PREFIX_INDEX = 2; + protected static final int SUFFIX_INDEX = 3; @Inject @@ -82,7 +94,12 @@ public class PersonFormController .collect(Collectors.toList()); data.put(PERSON_NAMES, names); - data.put(BIRTHDATE, asset.getBirthdate()); + final LocalDate birthdate = asset.getBirthdate(); + if (birthdate != null) { + final Instant instant = Instant.from(birthdate); + final Date birthdateValue = Date.from(instant); + data.put(BIRTHDATE, birthdateValue); + } return data; } @@ -123,7 +140,13 @@ public class PersonFormController if (data.containsKey(BIRTHDATE)) { - asset.setBirthdate((LocalDate) data.get(BIRTHDATE)); + final Date birthdateValue = (Date) data.get(BIRTHDATE); + final Instant instant = birthdateValue.toInstant(); + final LocalDate birthdate = LocalDateTime + .ofInstant(instant, ZoneId.systemDefault()) + .toLocalDate(); + + asset.setBirthdate(birthdate); } final String surname = (String) data.get(SURNAME);