SciProject Contacts Step completly ported
parent
eaff75777f
commit
5c9ad7eaa8
|
|
@ -5,14 +5,42 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.contenttypes.ui;
|
package com.arsdigita.cms.contenttypes.ui;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.BoxPanel;
|
||||||
|
import com.arsdigita.bebop.Component;
|
||||||
|
import com.arsdigita.bebop.ControlLink;
|
||||||
import com.arsdigita.bebop.FormProcessException;
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.Table;
|
import com.arsdigita.bebop.Table;
|
||||||
|
import com.arsdigita.bebop.Text;
|
||||||
import com.arsdigita.bebop.event.TableActionEvent;
|
import com.arsdigita.bebop.event.TableActionEvent;
|
||||||
import com.arsdigita.bebop.event.TableActionListener;
|
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.ItemSelectionModel;
|
||||||
|
import com.arsdigita.dispatcher.DispatcherHelper;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.util.LockableImpl;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
|
import org.libreccm.configuration.ConfigurationManager;
|
||||||
|
import org.libreccm.security.PermissionChecker;
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
|
import org.librecms.contentsection.privileges.ItemPrivileges;
|
||||||
|
import org.scientificcms.contenttypes.sciproject.Contact;
|
||||||
|
import org.scientificcms.contenttypes.sciproject.SciProject;
|
||||||
|
import org.scientificcms.contenttypes.sciproject.SciProjectConfig;
|
||||||
|
import org.scientificcms.contenttypes.sciproject.SciProjectConstants;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -42,18 +70,383 @@ public class SciProjectContactsTable
|
||||||
this.itemModel = itemModel;
|
this.itemModel = itemModel;
|
||||||
this.editStep = editStep;
|
this.editStep = editStep;
|
||||||
|
|
||||||
throw new UnsupportedOperationException("ToDo");
|
setEmptyView(new Label(new GlobalizedMessage(
|
||||||
|
"cms.contenttypes.ui.sciproject.contacts.none",
|
||||||
|
SciProjectConstants.SCI_PROJECT_BUNDLE)));
|
||||||
|
|
||||||
|
final TableColumnModel columnModel = getColumnModel();
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
0,
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.contenttypes.ui.sciproject.contact.type",
|
||||||
|
SciProjectConstants.SCI_PROJECT_BUNDLE)));
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
1,
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.contenttypes.ui.sciproject.contact.title",
|
||||||
|
SciProjectConstants.SCI_PROJECT_BUNDLE),
|
||||||
|
TABLE_COL_EDIT));
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
2,
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.contenttypes.ui.sciproject.contact.edit",
|
||||||
|
SciProjectConstants.SCI_PROJECT_BUNDLE),
|
||||||
|
TABLE_COL_EDIT_ASSOC));
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
3,
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.contenttypes.ui.sciproject.contact.action",
|
||||||
|
SciProjectConstants.SCI_PROJECT_BUNDLE),
|
||||||
|
TABLE_COL_DEL));
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
4,
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.contenttypes.ui.sciproject.contact.up",
|
||||||
|
SciProjectConstants.SCI_PROJECT_BUNDLE),
|
||||||
|
TABLE_COL_UP));
|
||||||
|
columnModel.add(new TableColumn(
|
||||||
|
5,
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.contenttypes.ui.sciproject.contact.down",
|
||||||
|
SciProjectConstants.SCI_PROJECT_BUNDLE),
|
||||||
|
TABLE_COL_DOWN));
|
||||||
|
|
||||||
|
setModelBuilder(new SciProjectContactsTableModelBuilder(itemModel));
|
||||||
|
|
||||||
|
columnModel.get(1).setCellRenderer(new EditCellRenderer());
|
||||||
|
columnModel.get(2).setCellRenderer(new EditAssocCellRenderer());
|
||||||
|
columnModel.get(3).setCellRenderer(new DeleteCellRenderer());
|
||||||
|
columnModel.get(4).setCellRenderer(new UpCellRenderer());
|
||||||
|
columnModel.get(5).setCellRenderer(new DownCellRenderer());
|
||||||
|
|
||||||
|
addTableActionListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cellSelected(final TableActionEvent event) throws FormProcessException {
|
public void cellSelected(final TableActionEvent event) throws
|
||||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
FormProcessException {
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
final SciProject selected = (SciProject) itemModel
|
||||||
|
.getSelectedItem(state);
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final SciProjectController controller = cdiUtil
|
||||||
|
.findBean(SciProjectController.class);
|
||||||
|
final Contact contact = controller.findContact(selected.getObjectId(),
|
||||||
|
event.getRowKey())
|
||||||
|
.get();
|
||||||
|
|
||||||
|
final TableColumn column = getColumnModel()
|
||||||
|
.get(event.getColumn().intValue());
|
||||||
|
|
||||||
|
if (TABLE_COL_EDIT_ASSOC.equals(column.getHeaderKey())) {
|
||||||
|
editStep.setSelectedContact(contact.getContactable());
|
||||||
|
editStep.setSelectedContactType(contact.getContactType());
|
||||||
|
|
||||||
|
editStep.showComponent(state,
|
||||||
|
SciProjectUiConstants.ADD_CONTACT_SHEET_NAME);
|
||||||
|
} else if(TABLE_COL_DEL.equals(column.getHeaderKey())) {
|
||||||
|
controller.removeContact(selected.getObjectId(),
|
||||||
|
contact.getContactId());
|
||||||
|
} else if(TABLE_COL_UP.equals(column.getHeaderKey())) {
|
||||||
|
controller.swapWithPrevious(selected.getObjectId(),
|
||||||
|
contact.getContactId());
|
||||||
|
} else if(TABLE_COL_DOWN.equals(column.getHeaderKey())) {
|
||||||
|
controller.swapWithNext(selected.getObjectId(),
|
||||||
|
contact.getContactId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void headSelected(final TableActionEvent event) {
|
public void headSelected(final TableActionEvent event) {
|
||||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SciProjectContactsTableModelBuilder
|
||||||
|
extends LockableImpl
|
||||||
|
implements TableModelBuilder {
|
||||||
|
|
||||||
|
private final ItemSelectionModel itemModel;
|
||||||
|
|
||||||
|
public SciProjectContactsTableModelBuilder(
|
||||||
|
final ItemSelectionModel itemModel) {
|
||||||
|
|
||||||
|
this.itemModel = itemModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableModel makeModel(final Table table, final PageState state) {
|
||||||
|
|
||||||
|
table.getRowSelectionModel().clearSelection(state);
|
||||||
|
final SciProject selected = (SciProject) itemModel
|
||||||
|
.getSelectedItem(state);
|
||||||
|
|
||||||
|
return new SciProjectContactsTableModel(table, state, selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SciProjectContactsTableModel implements TableModel {
|
||||||
|
|
||||||
|
private final Table table;
|
||||||
|
private final List<Map<String, Object>> data;
|
||||||
|
private final Iterator<Map<String, Object>> iterator;
|
||||||
|
private Map<String, Object> currentRow;
|
||||||
|
|
||||||
|
public SciProjectContactsTableModel(final Table table,
|
||||||
|
final PageState state,
|
||||||
|
final SciProject selected) {
|
||||||
|
|
||||||
|
this.table = table;
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final SciProjectController controller = cdiUtil
|
||||||
|
.findBean(SciProjectController.class);
|
||||||
|
data = controller.getContacts(selected.getObjectId());
|
||||||
|
iterator = data.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getColumnCount() {
|
||||||
|
return table.getColumnModel().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean nextRow() {
|
||||||
|
|
||||||
|
if (iterator.hasNext()) {
|
||||||
|
|
||||||
|
currentRow = iterator.next();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getElementAt(final int columnIndex) {
|
||||||
|
|
||||||
|
switch (columnIndex) {
|
||||||
|
case 0: {
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final ConfigurationManager confManager = cdiUtil
|
||||||
|
.findBean(ConfigurationManager.class);
|
||||||
|
final SciProjectConfig config = confManager
|
||||||
|
.findConfiguration(SciProjectConfig.class);
|
||||||
|
final String type = (String) currentRow
|
||||||
|
.get(SciProjectController.CONTACT_TYPE);
|
||||||
|
return new GlobalizedMessage(type,
|
||||||
|
config
|
||||||
|
.getContactTypesBundleName());
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
return currentRow.get(SciProjectController.CONTACT_NAME);
|
||||||
|
case 2:
|
||||||
|
return new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.edit_assoc", CmsConstants.CMS_BUNDLE));
|
||||||
|
case 3:
|
||||||
|
return new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.delete", CmsConstants.CMS_BUNDLE));
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getKeyAt(final int columnIndex) {
|
||||||
|
return currentRow.get(SciProjectController.CONTACT_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class EditCellRenderer
|
||||||
|
extends LockableImpl
|
||||||
|
implements TableCellRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getComponent(
|
||||||
|
Table table,
|
||||||
|
PageState state,
|
||||||
|
Object value,
|
||||||
|
boolean isSelected,
|
||||||
|
Object key,
|
||||||
|
int row,
|
||||||
|
int col) {
|
||||||
|
|
||||||
|
// final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
// final PermissionChecker permissionChecker = cdiUtil
|
||||||
|
// .findBean(PermissionChecker.class);
|
||||||
|
//
|
||||||
|
// final SciProject selected = (SciProject) itemModel
|
||||||
|
// .getSelectedItem(state);
|
||||||
|
// final boolean canEdit = permissionChecker
|
||||||
|
// .isPermitted(ItemPrivileges.EDIT, selected);
|
||||||
|
//
|
||||||
|
// if (canEdit) {
|
||||||
|
// final SciProjectController controller = cdiUtil
|
||||||
|
// .findBean(SciProjectController.class);
|
||||||
|
// final ContentItemManager itemManager = cdiUtil
|
||||||
|
// .findBean(ContentItemManager.class);
|
||||||
|
// final ContentSectionManager sectionManager = cdiUtil
|
||||||
|
// .findBean(ContentSectionManager.class);
|
||||||
|
// final Optional<Contact> contact = controller
|
||||||
|
// .findContact(selected.getObjectId(), key);
|
||||||
|
//
|
||||||
|
// final ContentSection section = itemManager
|
||||||
|
// .getItemFolder(selected)
|
||||||
|
// .get()
|
||||||
|
// .getSection();
|
||||||
|
// final ItemResolver resolver = sectionManager
|
||||||
|
// .getItemResolver(section);
|
||||||
|
// } else {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
final SciProject selected = (SciProject) itemModel
|
||||||
|
.getSelectedItem(state);
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final SciProjectController controller = cdiUtil
|
||||||
|
.findBean(SciProjectController.class);
|
||||||
|
final Optional<Contact> contact = controller
|
||||||
|
.findContact(selected.getObjectId(), key);
|
||||||
|
final String name = contact.get().getContactable().getDisplayName();
|
||||||
|
final String type = contact.get().getContactType();
|
||||||
|
|
||||||
|
final Label typeLabel = new Label(new GlobalizedMessage(
|
||||||
|
type, controller.getContactTypesBundleName()));
|
||||||
|
|
||||||
|
final Text nameText = new Text(name);
|
||||||
|
|
||||||
|
final BoxPanel panel = new BoxPanel(BoxPanel.HORIZONTAL);
|
||||||
|
panel.add(nameText);
|
||||||
|
panel.add(typeLabel);
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class EditAssocCellRenderer
|
||||||
|
extends LockableImpl
|
||||||
|
implements TableCellRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getComponent(
|
||||||
|
Table table,
|
||||||
|
PageState state,
|
||||||
|
Object value,
|
||||||
|
boolean isSelected,
|
||||||
|
Object key,
|
||||||
|
int row,
|
||||||
|
int col) {
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final PermissionChecker permissionChecker = cdiUtil
|
||||||
|
.findBean(PermissionChecker.class);
|
||||||
|
|
||||||
|
final SciProject selected = (SciProject) itemModel
|
||||||
|
.getSelectedItem(state);
|
||||||
|
final boolean canEdit = permissionChecker
|
||||||
|
.isPermitted(ItemPrivileges.EDIT, selected);
|
||||||
|
|
||||||
|
if (canEdit) {
|
||||||
|
return new ControlLink((Component) value);
|
||||||
|
} else {
|
||||||
|
return new Text("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DeleteCellRenderer
|
||||||
|
extends LockableImpl
|
||||||
|
implements TableCellRenderer {
|
||||||
|
|
||||||
|
public Component getComponent(
|
||||||
|
Table table,
|
||||||
|
PageState state,
|
||||||
|
Object value,
|
||||||
|
boolean isSelected,
|
||||||
|
Object key,
|
||||||
|
int row,
|
||||||
|
int col) {
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final PermissionChecker permissionChecker = cdiUtil
|
||||||
|
.findBean(PermissionChecker.class);
|
||||||
|
|
||||||
|
final SciProject selected = (SciProject) itemModel
|
||||||
|
.getSelectedItem(state);
|
||||||
|
final boolean canEdit = permissionChecker
|
||||||
|
.isPermitted(ItemPrivileges.EDIT, selected);
|
||||||
|
|
||||||
|
if (canEdit) {
|
||||||
|
final ControlLink link = new ControlLink((Component) value);
|
||||||
|
link.setConfirmation(new GlobalizedMessage(
|
||||||
|
"cms.contenttypes.ui.sciproject.confirm_delete",
|
||||||
|
SciProjectConstants.SCI_PROJECT_BUNDLE
|
||||||
|
));
|
||||||
|
return link;
|
||||||
|
} else {
|
||||||
|
return new Text("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class UpCellRenderer extends LockableImpl implements
|
||||||
|
TableCellRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getComponent(
|
||||||
|
Table table,
|
||||||
|
PageState state,
|
||||||
|
Object value,
|
||||||
|
boolean isSelected,
|
||||||
|
Object key,
|
||||||
|
int row,
|
||||||
|
int col) {
|
||||||
|
|
||||||
|
if (0 == row) {
|
||||||
|
return new Label();
|
||||||
|
} else {
|
||||||
|
ControlLink link = new ControlLink("up");
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DownCellRenderer extends LockableImpl implements
|
||||||
|
TableCellRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getComponent(
|
||||||
|
Table table,
|
||||||
|
PageState state,
|
||||||
|
Object value,
|
||||||
|
boolean isSelected,
|
||||||
|
Object key,
|
||||||
|
int row,
|
||||||
|
int col) {
|
||||||
|
|
||||||
|
final SciProject selected = (SciProject) itemModel
|
||||||
|
.getSelectedItem(state);
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final SciProjectController controller = cdiUtil
|
||||||
|
.findBean(SciProjectController.class);
|
||||||
|
final List<Map<String, Object>> contacts = controller
|
||||||
|
.getContacts(selected.getObjectId());
|
||||||
|
|
||||||
|
if ((contacts.size() - 1) == row) {
|
||||||
|
return new Label();
|
||||||
|
} else {
|
||||||
|
ControlLink link = new ControlLink("down");
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,13 @@ import org.scientificcms.contenttypes.sciproject.SciProjectRepository;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.enterprise.context.RequestScoped;
|
import javax.enterprise.context.RequestScoped;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
@ -31,6 +35,10 @@ import javax.transaction.Transactional;
|
||||||
@RequestScoped
|
@RequestScoped
|
||||||
class SciProjectController {
|
class SciProjectController {
|
||||||
|
|
||||||
|
public static final String CONTACT_NAME = "name";
|
||||||
|
public static final String CONTACT_TYPE = "contactType";
|
||||||
|
public static final String CONTACT_ID = "contactId";
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ConfigurationManager confManager;
|
private ConfigurationManager confManager;
|
||||||
|
|
||||||
|
|
@ -51,6 +59,57 @@ class SciProjectController {
|
||||||
return conf.getContactTypesBundleName();
|
return conf.getContactTypesBundleName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
public List<Map<String, Object>> getContacts(final long forProjectId) {
|
||||||
|
|
||||||
|
final SciProject project = projectRepository
|
||||||
|
.findById(forProjectId, SciProject.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format("No SciProject with ID %d found.",
|
||||||
|
forProjectId))
|
||||||
|
);
|
||||||
|
|
||||||
|
return project
|
||||||
|
.getContacts()
|
||||||
|
.stream()
|
||||||
|
.map(this::buildContactEntry)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> buildContactEntry(final Contact fromContact) {
|
||||||
|
|
||||||
|
Objects.requireNonNull(fromContact);
|
||||||
|
|
||||||
|
final Map<String, Object> result = new HashMap<>();
|
||||||
|
result.put(CONTACT_ID, fromContact.getContactId());
|
||||||
|
result.put(CONTACT_TYPE, fromContact.getContactType());
|
||||||
|
result.put(CONTACT_NAME, fromContact.getContactable().getDisplayName());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
public Optional<Contact> findContact(final long projectId,
|
||||||
|
final Object key) {
|
||||||
|
|
||||||
|
final SciProject project = projectRepository
|
||||||
|
.findById(projectId, SciProject.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format("No SciProject with ID %d found.",
|
||||||
|
projectId))
|
||||||
|
);
|
||||||
|
|
||||||
|
final long contactId = (long) key;
|
||||||
|
|
||||||
|
return project
|
||||||
|
.getContacts()
|
||||||
|
.stream()
|
||||||
|
.filter(contact -> contact.getContactId() == contactId)
|
||||||
|
.findAny();
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public void addContact(final long projectId,
|
public void addContact(final long projectId,
|
||||||
final long contactableId,
|
final long contactableId,
|
||||||
|
|
@ -106,6 +165,99 @@ class SciProjectController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
public void removeContact(final long projectId, final long contactId) {
|
||||||
|
|
||||||
|
final SciProject project = projectRepository
|
||||||
|
.findById(projectId, SciProject.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format("No SciProject with ID %d found.",
|
||||||
|
projectId))
|
||||||
|
);
|
||||||
|
|
||||||
|
final Optional<Contact> contact = project
|
||||||
|
.getContacts()
|
||||||
|
.stream()
|
||||||
|
.filter(current -> current.getContactId() == contactId)
|
||||||
|
.findAny();
|
||||||
|
|
||||||
|
if (contact.isPresent()) {
|
||||||
|
projectMananger.removeContact(contact.get().getContactable(),
|
||||||
|
project);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
public void swapWithPrevious(final long projectId, final long contactId) {
|
||||||
|
|
||||||
|
final SciProject project = projectRepository
|
||||||
|
.findById(projectId, SciProject.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format("No SciProject with ID %d found.",
|
||||||
|
projectId))
|
||||||
|
);
|
||||||
|
|
||||||
|
final List<Contact> contacts = project.getContacts();
|
||||||
|
Contact contact = null;
|
||||||
|
int index = -1;
|
||||||
|
for (int i = 0; i < contacts.size(); i++) {
|
||||||
|
|
||||||
|
if (contacts.get(i).getContactId() == contactId) {
|
||||||
|
contact = contacts.get(i);
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index > 0 && contact != null) {
|
||||||
|
final long order = contact.getOrder();
|
||||||
|
final Contact prevContact = contacts.get(index - 1);
|
||||||
|
final long prevOrder = prevContact.getOrder();
|
||||||
|
|
||||||
|
contact.setOrder(prevOrder);
|
||||||
|
prevContact.setOrder(order);
|
||||||
|
|
||||||
|
projectRepository.save(project);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
public void swapWithNext(final long projectId, final long contactId) {
|
||||||
|
|
||||||
|
final SciProject project = projectRepository
|
||||||
|
.findById(projectId, SciProject.class)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new IllegalArgumentException(
|
||||||
|
String.format("No SciProject with ID %d found.",
|
||||||
|
projectId))
|
||||||
|
);
|
||||||
|
|
||||||
|
final List<Contact> contacts = project.getContacts();
|
||||||
|
Contact contact = null;
|
||||||
|
int index = -1;
|
||||||
|
for (int i = 0; i < contacts.size(); i++) {
|
||||||
|
|
||||||
|
if (contacts.get(i).getContactId() == contactId) {
|
||||||
|
contact = contacts.get(i);
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index < contacts.size() && contact != null) {
|
||||||
|
final long order = contact.getOrder();
|
||||||
|
final Contact nextContact = contacts.get(index + 1);
|
||||||
|
final long nextOrder = nextContact.getOrder();
|
||||||
|
|
||||||
|
contact.setOrder(nextOrder);
|
||||||
|
nextContact.setOrder(order);
|
||||||
|
|
||||||
|
projectRepository.save(project);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public boolean hasContact(final long projectId,
|
public boolean hasContact(final long projectId,
|
||||||
final long contactableId) {
|
final long contactableId) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue