SciProjectContactAddForm finished

pull/1/head
Jens Pelzetter 2019-08-12 06:16:39 +02:00
parent a88124f013
commit d6e2b8b7a9
3 changed files with 201 additions and 10 deletions

View File

@ -5,8 +5,11 @@
*/
package com.arsdigita.cms.contenttypes.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.Text;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.FormSubmissionListener;
import com.arsdigita.bebop.event.PrintEvent;
@ -27,6 +30,7 @@ import org.apache.logging.log4j.Logger;
import org.libreccm.cdi.utils.CdiUtil;
import org.librecms.CmsConstants;
import org.librecms.assets.ContactableEntity;
import org.scientificcms.contenttypes.sciproject.SciProject;
import org.scientificcms.contenttypes.sciproject.SciProjectConstants;
import java.util.ResourceBundle;
@ -53,7 +57,7 @@ public class SciProjectContactAddForm
private SciProjectContactsStep editStep;
private Label selectedContactLabel;
private Text selectedContactLabel;
public SciProjectContactAddForm(final ItemSelectionModel itemModel,
final SciProjectContactsStep editStep,
@ -74,7 +78,7 @@ public class SciProjectContactAddForm
SciProjectConstants.SCI_PROJECT_BUNDLE));
add(searchWidget);
selectedContactLabel = new Label();
selectedContactLabel = new Text();
add(selectedContactLabel);
final ParameterModel contactTypeParam
@ -127,21 +131,110 @@ public class SciProjectContactAddForm
@Override
public void init(final FormSectionEvent event) throws FormProcessException {
throw new UnsupportedOperationException("ToDo");
final FormData data = event.getFormData();
final PageState state = event.getPageState();
final ContactableEntity selectedContact = editStep.getSelectedContact();
final String selectedType = editStep.getSelectedContactType();
if (selectedContact == null) {
selectedContactLabel.setVisible(state, false);
} else {
data.put(SEARCH, selectedContact);
data.put(CONTACT_TYPE, selectedType);
searchWidget.setVisible(state, false);
selectedContactLabel.setText(selectedContact.getDisplayName());
selectedContactLabel.setVisible(state, true);
}
setVisible(state, true);
}
@Override
public void process(final FormSectionEvent event) throws
FormProcessException {
throw new UnsupportedOperationException("ToDo");
final FormData data = event.getFormData();
final PageState state = event.getPageState();
final SciProject project = (SciProject) getItemSelectionModel()
.getSelectedItem(state);
if (getSaveCancelSection().getSaveButton().isSelected(state)) {
final ContactableEntity selected = editStep.getSelectedContact();
if (selected == null) {
final ContactableEntity contact = (ContactableEntity) data
.get(SEARCH);
final String type = (String) data.get(CONTACT_TYPE);
getController().addContact(project.getObjectId(),
contact.getObjectId(),
type);
} else {
final String type = (String) data.get(CONTACT_TYPE);
getController().updateContactType(project.getObjectId(),
selected.getObjectId(),
type);
}
}
init(event);
}
@Override
public void submitted(final FormSectionEvent event) throws
FormProcessException {
throw new UnsupportedOperationException("ToDo");
final PageState state = event.getPageState();
if (getSaveCancelSection().getCancelButton().isSelected(state)) {
editStep.setSelectedContact(null);
editStep.setSelectedContactType(null);
init(event);
}
}
@Override
public void validate(final FormSectionEvent event)
throws FormProcessException {
final PageState state = event.getPageState();
final FormData data = event.getFormData();
if (editStep.getSelectedContact() == null
&& (data.get(SEARCH) == null)) {
data.addError(new GlobalizedMessage(
"cms.contenttypes.ui.sciproject.select_contact.no_contact_selected",
SciProjectConstants.SCI_PROJECT_BUNDLE));
return;
}
if (editStep.getSelectedContact() == null) {
final SciProject project = (SciProject) getItemSelectionModel()
.getSelectedItem(state);
final ContactableEntity selected = (ContactableEntity) data
.get(SEARCH);
if (getController().hasContact(project.getObjectId(),
selected.getObjectId())) {
data.addError(new GlobalizedMessage(
"cms.contenttypes.ui.sciproject.select_contact.already_added",
SciProjectConstants.SCI_PROJECT_BUNDLE
));
}
}
}
private SciProjectController getController() {

View File

@ -43,7 +43,7 @@ public class SciProjectContactsStep extends SimpleEditStep {
super(itemModel, parent, selectedLanguageParam, parameterSuffix);
final BasicItemForm addContactSheet = new SciProjectContactAddForm(
itemModel, this);
itemModel, this, selectedLanguageParam);
add(SciProjectUiConstants.ADD_CONTACT_SHEET_NAME,
new GlobalizedMessage(

View File

@ -6,14 +6,19 @@
package com.arsdigita.cms.contenttypes.ui;
import org.libreccm.configuration.ConfigurationManager;
import org.librecms.assets.ContactableEntity;
import org.librecms.assets.ContactableEntityRepository;
import org.scientificcms.contenttypes.sciproject.Contact;
import org.scientificcms.contenttypes.sciproject.SciProject;
import org.scientificcms.contenttypes.sciproject.SciProjectConfig;
import org.scientificcms.contenttypes.sciproject.SciProjectMananger;
import org.scientificcms.contenttypes.sciproject.SciProjectRepository;
import java.time.LocalDate;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
@ -29,6 +34,12 @@ class SciProjectController {
@Inject
private ConfigurationManager confManager;
@Inject
private ContactableEntityRepository contactableRepository;
@Inject
private SciProjectMananger projectMananger;
@Inject
private SciProjectRepository projectRepository;
@ -40,6 +51,85 @@ class SciProjectController {
return conf.getContactTypesBundleName();
}
@Transactional(Transactional.TxType.REQUIRED)
public void addContact(final long projectId,
final long contactableId,
final String contactType) {
final SciProject project = projectRepository
.findById(projectId, SciProject.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format("No SciProject with ID %d found.",
projectId))
);
final ContactableEntity contact = contactableRepository
.findById(contactableId)
.orElseThrow(() -> new IllegalArgumentException(
String.format("No ContactableEntity with ID %d found.",
contactableId)));
projectMananger.addContact(contact, project, contactType);
}
@Transactional(Transactional.TxType.REQUIRED)
public void updateContactType(final long projectId,
final long contactableId,
final String contactType) {
final SciProject project = projectRepository
.findById(projectId, SciProject.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format("No SciProject with ID %d found.",
projectId))
);
final ContactableEntity contactable = contactableRepository
.findById(contactableId)
.orElseThrow(() -> new IllegalArgumentException(
String.format("No ContactableEntity with ID %d found.",
contactableId)));
final Optional<Contact> contact = project
.getContacts()
.stream()
.filter(current -> filterContact(current, project, contactable))
.findAny();
if (contact.isPresent()) {
contact.get().setContactType(contactType);
projectRepository.save(project);
}
}
@Transactional(Transactional.TxType.REQUIRED)
public boolean hasContact(final long projectId,
final long contactableId) {
final SciProject project = projectRepository
.findById(projectId, SciProject.class)
.orElseThrow(
() -> new IllegalArgumentException(
String.format("No SciProject with ID %d found.",
projectId))
);
final ContactableEntity contactable = contactableRepository
.findById(contactableId)
.orElseThrow(() -> new IllegalArgumentException(
String.format("No ContactableEntity with ID %d found.",
contactableId)));
return project
.getContacts()
.stream()
.anyMatch(current -> filterContact(current, project, contactable));
}
@Transactional(Transactional.TxType.REQUIRED)
public void save(final long projectId,
final Locale selectedLocale,
@ -68,4 +158,12 @@ class SciProjectController {
projectRepository.save(project);
}
private boolean filterContact(final Contact contact,
final SciProject project,
final ContactableEntity contactable) {
return contact.getProject().equals(project)
&& contact.getContactable().equals(contactable);
}
}