CCM NG: Form for Person asset
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@6153 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
0c0298504c
commit
087c8254e7
|
|
@ -18,19 +18,16 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.ui.assets.forms;
|
package com.arsdigita.cms.ui.assets.forms;
|
||||||
|
|
||||||
import com.arsdigita.bebop.ActionLink;
|
|
||||||
import com.arsdigita.bebop.BoxPanel;
|
import com.arsdigita.bebop.BoxPanel;
|
||||||
import com.arsdigita.bebop.Component;
|
import com.arsdigita.bebop.Component;
|
||||||
import com.arsdigita.bebop.ControlLink;
|
import com.arsdigita.bebop.ControlLink;
|
||||||
import com.arsdigita.bebop.FormProcessException;
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
import com.arsdigita.bebop.Label;
|
import com.arsdigita.bebop.Label;
|
||||||
import com.arsdigita.bebop.Page;
|
|
||||||
import com.arsdigita.bebop.PageState;
|
import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.SimpleContainer;
|
import com.arsdigita.bebop.SimpleContainer;
|
||||||
import com.arsdigita.bebop.Table;
|
import com.arsdigita.bebop.Table;
|
||||||
import com.arsdigita.bebop.Text;
|
import com.arsdigita.bebop.Text;
|
||||||
import com.arsdigita.bebop.event.ActionEvent;
|
|
||||||
import com.arsdigita.bebop.event.ActionListener;
|
|
||||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
import com.arsdigita.bebop.event.PrintEvent;
|
import com.arsdigita.bebop.event.PrintEvent;
|
||||||
import com.arsdigita.bebop.event.PrintListener;
|
import com.arsdigita.bebop.event.PrintListener;
|
||||||
|
|
@ -55,20 +52,13 @@ import com.arsdigita.util.LockableImpl;
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
import org.librecms.assets.ContactEntry;
|
|
||||||
import org.librecms.assets.ContactEntryKeyByLabelComparator;
|
|
||||||
import org.librecms.assets.ContactEntryKey;
|
import org.librecms.assets.ContactEntryKey;
|
||||||
import org.librecms.assets.ContactEntryKeyRepository;
|
|
||||||
import org.librecms.assets.ContactableEntity;
|
import org.librecms.assets.ContactableEntity;
|
||||||
import org.librecms.assets.ContactableEntityManager;
|
|
||||||
import org.librecms.assets.PostalAddress;
|
import org.librecms.assets.PostalAddress;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.TooManyListenersException;
|
import java.util.TooManyListenersException;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static org.librecms.CmsConstants.*;
|
import static org.librecms.CmsConstants.*;
|
||||||
|
|
||||||
|
|
@ -178,6 +168,7 @@ public abstract class AbstractContactableEntityForm<T extends ContactableEntity>
|
||||||
|
|
||||||
if (selectedAssetId != null) {
|
if (selectedAssetId != null) {
|
||||||
// ToDo
|
// ToDo
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,264 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2019 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* 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., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.assets.forms;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.Table;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.bebop.form.Date;
|
||||||
|
import com.arsdigita.bebop.form.Submit;
|
||||||
|
import com.arsdigita.bebop.form.TextField;
|
||||||
|
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.ui.assets.AssetPane;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.util.LockableImpl;
|
||||||
|
|
||||||
|
import org.librecms.assets.Person;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static org.librecms.CmsConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class PersonForm extends AbstractContactableEntityForm<Person> {
|
||||||
|
|
||||||
|
private TextField surnameField;
|
||||||
|
private TextField givenNameField;
|
||||||
|
private TextField prefixField;
|
||||||
|
private TextField suffixField;
|
||||||
|
|
||||||
|
private Submit addPersonNameButton;
|
||||||
|
|
||||||
|
private Date birthdateField;
|
||||||
|
|
||||||
|
public PersonForm(final AssetPane assetPane) {
|
||||||
|
super(assetPane);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addPropertyWidgets() {
|
||||||
|
|
||||||
|
final Label surnameLabel = new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.surname",
|
||||||
|
CMS_BUNDLE));
|
||||||
|
surnameField = new TextField("surname");
|
||||||
|
add(surnameLabel);
|
||||||
|
add(surnameField);
|
||||||
|
|
||||||
|
final Label givenNameLabel = new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.given_name",
|
||||||
|
CMS_BUNDLE));
|
||||||
|
givenNameField = new TextField("givenName");
|
||||||
|
add(givenNameLabel);
|
||||||
|
add(surnameLabel);
|
||||||
|
|
||||||
|
final Label prefixLabel = new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.prefix",
|
||||||
|
CMS_BUNDLE
|
||||||
|
));
|
||||||
|
prefixField = new TextField("prefix");
|
||||||
|
add(prefixLabel);
|
||||||
|
add(prefixField);
|
||||||
|
|
||||||
|
final Label suffixLabel = new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.suffix",
|
||||||
|
CMS_BUNDLE
|
||||||
|
));
|
||||||
|
suffixField = new TextField("suffix");
|
||||||
|
add(suffixLabel);
|
||||||
|
add(suffixField);
|
||||||
|
|
||||||
|
add(buildPersonNamesTable());
|
||||||
|
|
||||||
|
addPersonNameButton = new Submit(new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.add_name",
|
||||||
|
CMS_BUNDLE));
|
||||||
|
add(addPersonNameButton);
|
||||||
|
|
||||||
|
final Label birthdateLabel = new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.birthdate",
|
||||||
|
CMS_BUNDLE));
|
||||||
|
add(birthdateLabel);
|
||||||
|
birthdateField = new Date("birthdate");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<Person> getAssetClass() {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void showLocale(PageState state) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map<String, Object> collectData(FormSectionEvent event) throws
|
||||||
|
FormProcessException {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(final FormSectionEvent event) throws FormProcessException {
|
||||||
|
|
||||||
|
super.init(event);
|
||||||
|
|
||||||
|
// ToDo
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(final FormSectionEvent event) throws
|
||||||
|
FormProcessException {
|
||||||
|
// ToDo
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Table buildPersonNamesTable() {
|
||||||
|
|
||||||
|
final Table table = new Table();
|
||||||
|
|
||||||
|
final TableColumnModel columnModel = table.getColumnModel();
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
0,
|
||||||
|
new Label(
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.surname",
|
||||||
|
CMS_BUNDLE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
));
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
1,
|
||||||
|
new Label(
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.givenName",
|
||||||
|
CMS_BUNDLE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
));
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
2,
|
||||||
|
new Label(
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.prefix",
|
||||||
|
CMS_BUNDLE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
));
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
3,
|
||||||
|
new Label(
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.suffix",
|
||||||
|
CMS_BUNDLE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
));
|
||||||
|
|
||||||
|
table.setModelBuilder(new PersonNamesTableModelBuilder());
|
||||||
|
|
||||||
|
table.setEmptyView(new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.authoring.assets.person.names.none")));
|
||||||
|
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class PersonNamesTableModelBuilder
|
||||||
|
extends LockableImpl
|
||||||
|
implements TableModelBuilder {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableModel makeModel(final Table table, final PageState state) {
|
||||||
|
|
||||||
|
final Long selectedPersonId = getSelectedAssetId(state);
|
||||||
|
if (selectedPersonId == null) {
|
||||||
|
throw new RuntimeException("No asset selected.");
|
||||||
|
}
|
||||||
|
|
||||||
|
final PersonFormController controller
|
||||||
|
= (PersonFormController) getController();
|
||||||
|
final List<String[]> personNames = controller
|
||||||
|
.getPersonNames(selectedPersonId);
|
||||||
|
|
||||||
|
return new PersonNamesTableModel(personNames);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class PersonNamesTableModel implements TableModel {
|
||||||
|
|
||||||
|
private final Iterator<String[]> personNames;
|
||||||
|
|
||||||
|
private String[] currentPersonName;
|
||||||
|
private int row;
|
||||||
|
|
||||||
|
public PersonNamesTableModel(final List<String[]> personNames) {
|
||||||
|
|
||||||
|
this.personNames = Objects
|
||||||
|
.requireNonNull(personNames,
|
||||||
|
"Can't create PersonNamesTableModel without a "
|
||||||
|
+ "list of person names.")
|
||||||
|
.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getColumnCount() {
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean nextRow() {
|
||||||
|
|
||||||
|
if (personNames.hasNext()) {
|
||||||
|
currentPersonName = personNames.next();
|
||||||
|
row++;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getElementAt(final int columnIndex) {
|
||||||
|
|
||||||
|
return currentPersonName[columnIndex];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getKeyAt(final int columnIndex) {
|
||||||
|
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,155 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2019 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* 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., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.assets.forms;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.ui.assets.IsControllerForAssetType;
|
||||||
|
|
||||||
|
import org.librecms.assets.Person;
|
||||||
|
import org.librecms.assets.PersonManager;
|
||||||
|
import org.librecms.assets.PersonName;
|
||||||
|
import org.librecms.assets.PersonRepository;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@RequestScoped
|
||||||
|
@IsControllerForAssetType(Person.class)
|
||||||
|
public class PersonFormController
|
||||||
|
extends AbstractContactableEntityFormController<Person> {
|
||||||
|
|
||||||
|
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
|
||||||
|
private PersonRepository personRepository;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PersonManager personManager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map<String, Object> getAssetData(final Person asset,
|
||||||
|
final Locale selectedLocale) {
|
||||||
|
|
||||||
|
final Map<String, Object> data = super.getAssetData(asset,
|
||||||
|
selectedLocale);
|
||||||
|
|
||||||
|
final PersonName personName = asset.getPersonName();
|
||||||
|
data.put(SURNAME, personName.getSurname());
|
||||||
|
data.put(GIVENNAME, personName.getGivenName());
|
||||||
|
data.put(PREFIX, personName.getPrefix());
|
||||||
|
data.put(SUFFIX, personName.getSuffix());
|
||||||
|
|
||||||
|
final List<String[]> names = asset
|
||||||
|
.getPersonNames()
|
||||||
|
.subList(0, asset.getPersonNames().size() - 1)
|
||||||
|
.stream()
|
||||||
|
.map(this::convertPersonName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
data.put(PERSON_NAMES, names);
|
||||||
|
|
||||||
|
data.put(BIRTHDATE, asset.getBirthdate());
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<String[]> getPersonNames(final Long personId) {
|
||||||
|
|
||||||
|
final Person person = personRepository
|
||||||
|
.findById(personId)
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
|
"No Person with ID %d found.", personId)));
|
||||||
|
|
||||||
|
return person
|
||||||
|
.getPersonNames()
|
||||||
|
.subList(0, person.getPersonNames().size() - 1)
|
||||||
|
.stream()
|
||||||
|
.map(this::convertPersonName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] convertPersonName(final PersonName name) {
|
||||||
|
|
||||||
|
final String[] result = new String[4];
|
||||||
|
|
||||||
|
result[SURNAME_INDEX] = name.getSurname();
|
||||||
|
result[GIVENNAME_INDEX] = name.getGivenName();
|
||||||
|
result[PREFIX_INDEX] = name.getPrefix();
|
||||||
|
result[SUFFIX_INDEX] = name.getSuffix();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateAssetProperties(final Person asset,
|
||||||
|
final Locale selectedLocale,
|
||||||
|
final Map<String, Object> data) {
|
||||||
|
|
||||||
|
super.updateAssetProperties(asset, selectedLocale, data);
|
||||||
|
|
||||||
|
if (data.containsKey(BIRTHDATE)) {
|
||||||
|
|
||||||
|
asset.setBirthdate((LocalDate) data.get(BIRTHDATE));
|
||||||
|
}
|
||||||
|
|
||||||
|
final String surname = (String) data.get(SURNAME);
|
||||||
|
final String givenName = (String) data.get(GIVENNAME);
|
||||||
|
final String prefix = (String) data.get(PREFIX);
|
||||||
|
final String suffix = (String) data.get(SUFFIX);
|
||||||
|
|
||||||
|
asset.getPersonName().setSurname(surname);
|
||||||
|
asset.getPersonName().setGivenName(givenName);
|
||||||
|
asset.getPersonName().setPrefix(prefix);
|
||||||
|
asset.getPersonName().setSuffix(suffix);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPersonName(final long personId) {
|
||||||
|
|
||||||
|
final Person person = personRepository
|
||||||
|
.findById(personId)
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
||||||
|
"No Person with ID %d found.", personId)));
|
||||||
|
|
||||||
|
personManager.addPersonName(person);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Person createAsset() {
|
||||||
|
return new Person();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -18,6 +18,10 @@
|
||||||
*/
|
*/
|
||||||
package org.librecms.assets;
|
package org.librecms.assets;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.ui.assets.forms.PersonForm;
|
||||||
|
|
||||||
|
import static org.libreccm.core.CoreConstants.*;
|
||||||
|
|
||||||
import org.hibernate.envers.Audited;
|
import org.hibernate.envers.Audited;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
|
@ -26,15 +30,16 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import javax.persistence.AssociationOverride;
|
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.ElementCollection;
|
import javax.persistence.ElementCollection;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.JoinColumn;
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.JoinTable;
|
import javax.persistence.JoinTable;
|
||||||
|
import javax.persistence.NamedQueries;
|
||||||
|
import javax.persistence.NamedQuery;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
import static org.librecms.CmsConstants.*;
|
import static org.librecms.assets.AssetConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An asset representing a person.
|
* An asset representing a person.
|
||||||
|
|
@ -44,11 +49,11 @@ import static org.librecms.CmsConstants.*;
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "PERSONS", schema = DB_SCHEMA)
|
@Table(name = "PERSONS", schema = DB_SCHEMA)
|
||||||
@Audited
|
@Audited
|
||||||
//@AssetType(assetForm = PersonForm.class,
|
@AssetType(assetForm = PersonForm.class,
|
||||||
// labelBundle = ASSETS_BUNDLE,
|
labelBundle = ASSETS_BUNDLE,
|
||||||
// labelKey = "person.label",
|
labelKey = "person.label",
|
||||||
// descriptionBundle = ASSETS_BUNDLE,
|
descriptionBundle = ASSETS_BUNDLE,
|
||||||
// descriptionKey = "person.description")
|
descriptionKey = "person.description")
|
||||||
public class Person extends ContactableEntity {
|
public class Person extends ContactableEntity {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
@ -234,8 +239,8 @@ public class Person extends ContactableEntity {
|
||||||
public String toString(final String data) {
|
public String toString(final String data) {
|
||||||
|
|
||||||
return super.toString(String.format(
|
return super.toString(String.format(
|
||||||
"surname = \"%s\", "
|
// "surname = \"%s\", +"
|
||||||
+ "personNames = \"%s\", "
|
"personNames = \"%s\", "
|
||||||
// + "givenName = \"%s\", "
|
// + "givenName = \"%s\", "
|
||||||
// + "prefix = \"%s\", "
|
// + "prefix = \"%s\", "
|
||||||
// + "suffix = \"%s\", "
|
// + "suffix = \"%s\", "
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2019 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* 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., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.librecms.assets;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import javax.ejb.TransactionAttribute;
|
||||||
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.transaction.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@RequestScoped
|
||||||
|
public class PersonManager {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PersonRepository personRepository;
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
public void addPersonName(final Person toPerson) {
|
||||||
|
|
||||||
|
final PersonName current = Objects
|
||||||
|
.requireNonNull(toPerson, "Can't add a name to Person null.")
|
||||||
|
.getPersonName();
|
||||||
|
|
||||||
|
toPerson.addPersonName(current);
|
||||||
|
|
||||||
|
personRepository.save(toPerson);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
public void removePersonName(final Person person,
|
||||||
|
final PersonName personName) {
|
||||||
|
|
||||||
|
person.removePersonName(personName);
|
||||||
|
|
||||||
|
personRepository.save(person);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2019 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* 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., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.librecms.assets;
|
||||||
|
|
||||||
|
import org.libreccm.core.AbstractEntityRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
@RequestScoped
|
||||||
|
public class PersonRepository extends AbstractEntityRepository<Long, Person>{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<Person> getEntityClass() {
|
||||||
|
return Person.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIdAttributeName() {
|
||||||
|
return "objectId";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long getIdOfEntity(final Person entity) {
|
||||||
|
|
||||||
|
return entity.getObjectId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isNew(final Person entity) {
|
||||||
|
|
||||||
|
return entity.getObjectId() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Person> findBySurname(final String surname) {
|
||||||
|
|
||||||
|
Objects.requireNonNull(surname);
|
||||||
|
|
||||||
|
return findAll()
|
||||||
|
.stream()
|
||||||
|
.filter(
|
||||||
|
person -> surname.equals(person.getPersonName().getSurname())
|
||||||
|
)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue