Sorting of contacts working

pull/1/head
Jens Pelzetter 2022-05-11 19:28:06 +02:00
parent 2943c5be22
commit cbfdf563f1
3 changed files with 104 additions and 1 deletions

View File

@ -25,6 +25,7 @@ public class SciProjectAuthoringSteps implements MvcAuthoringSteps {
@Override @Override
public Set<Class<?>> getResourceClasses() { public Set<Class<?>> getResourceClasses() {
return Set.of( return Set.of(
SciProjectDescriptionContacts.class,
SciProjectDescriptionStepResources.class, SciProjectDescriptionStepResources.class,
SciProjectDescriptionStepService.class, SciProjectDescriptionStepService.class,
SciProjectFundingStepResources.class, SciProjectFundingStepResources.class,

View File

@ -0,0 +1,102 @@
package org.scientificcms.contenttypes.sciproject.ui;
import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contentsection.ContentSection;
import org.librecms.ui.contentsections.ContentSectionsUi;
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
import org.scientificcms.contenttypes.sciproject.Contact;
import org.scientificcms.contenttypes.sciproject.ContactRepository;
import org.scientificcms.contenttypes.sciproject.SciProject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Path(MvcAuthoringSteps.PATH_PREFIX + "sciproject-description/contacts")
public class SciProjectDescriptionContacts {
@Inject
private ContactRepository contactRepo;
@Inject
private ContentItemRepository itemRepo;
@Inject
private ContentSectionsUi sectionsUi;
@POST
@Path("/save-order")
@Consumes(MediaType.APPLICATION_JSON)
@Transactional(Transactional.TxType.REQUIRED)
public Response saveOrder(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
final List<String> order
) {
final ContentSection contentSection = sectionsUi
.findContentSection(sectionIdentifier)
.orElseThrow(
() -> new NotFoundException(
String.format(
"No content identifed by %s found.",
sectionIdentifier
)
)
);
final ContentItem document = itemRepo
.findByPath(contentSection, documentPath)
.orElseThrow(
() -> new NotFoundException(
String.format(
"No document for path %s in section %s.",
documentPath,
contentSection.getLabel()
)
)
);
if (!(document instanceof SciProject)) {
throw new NotFoundException(
String.format(
"No SciProject for path %s in section %s.",
documentPath,
contentSection.getLabel()
)
);
}
final Map<Long, Long> orderMap = new HashMap<>();
for (int i = 0; i < order.size(); i++) {
orderMap.put(Long.parseLong(order.get(i)), (long) i);
}
final SciProject project = (SciProject) document;
for (final Contact contact : project.getContacts()) {
contact.setOrder(orderMap.get(contact.getContactId()));
contactRepo.save(contact);
}
return Response.ok().build();
}
}

View File

@ -2,6 +2,6 @@ libreccm.debug.suspend=n
libreccm.database.host=localhost libreccm.database.host=localhost
libreccm.database.port=5432 libreccm.database.port=5432
libreccm.database.name=ccm-devel libreccm.database.name=scicms-devel
libreccm.database.user=ccm libreccm.database.user=ccm
libreccm.database.password=ccm47web libreccm.database.password=ccm47web