[CST-5755] Ported process special group tracking

This commit is contained in:
Jurgen Mamani
2022-04-28 14:17:15 +02:00
parent 365827ce92
commit e4a4b913b9
13 changed files with 230 additions and 12 deletions

View File

@@ -21,6 +21,8 @@ import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.regex.Pattern;
@@ -43,7 +45,9 @@ import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.core.LogHelper;
import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group;
import org.dspace.eperson.service.EPersonService;
import org.dspace.eperson.service.GroupService;
import org.dspace.scripts.service.ProcessService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -72,15 +76,26 @@ public class ProcessServiceImpl implements ProcessService {
@Autowired
private EPersonService ePersonService;
@Autowired
private GroupService groupService;
@Override
public Process create(Context context, EPerson ePerson, String scriptName,
List<DSpaceCommandLineParameter> parameters) throws SQLException {
List<DSpaceCommandLineParameter> parameters, final List<Group> specialGroups) throws SQLException {
Process process = new Process();
process.setEPerson(ePerson);
process.setName(scriptName);
process.setParameters(DSpaceCommandLineParameter.concatenate(parameters));
process.setCreationTime(new Date());
Optional.ofNullable(specialGroups)
.ifPresent(sg -> {
Set<Group> specialGroupsSet = new HashSet<>(sg);
for (Group group : specialGroupsSet) {
process.addGroup(group);
}
});
Process createdProcess = processDAO.create(context, process);
log.info(LogHelper.getHeader(context, "process_create",
"Process has been created for eperson with email " + ePerson.getEmail()
@@ -162,10 +177,24 @@ public class ProcessServiceImpl implements ProcessService {
MetadataField dspaceProcessFileTypeField = metadataFieldService
.findByString(context, Process.BITSTREAM_TYPE_METADATAFIELD, '.');
bitstreamService.addMetadata(context, bitstream, dspaceProcessFileTypeField, null, type);
authorizeService.addPolicy(context, bitstream, Constants.READ, context.getCurrentUser());
authorizeService.addPolicy(context, bitstream, Constants.WRITE, context.getCurrentUser());
authorizeService.addPolicy(context, bitstream, Constants.DELETE, context.getCurrentUser());
bitstreamService.update(context, bitstream);
if (Objects.isNull(context.getCurrentUser())) {
Group anonymous = groupService.findByName(context, Group.ANONYMOUS);
authorizeService.addPolicy(context, bitstream, Constants.READ, anonymous);
} else {
authorizeService.addPolicy(context, bitstream, Constants.READ, context.getCurrentUser());
authorizeService.addPolicy(context, bitstream, Constants.WRITE, context.getCurrentUser());
authorizeService.addPolicy(context, bitstream, Constants.DELETE, context.getCurrentUser());
}
try {
context.turnOffAuthorisationSystem();
bitstreamService.update(context, bitstream);
context.restoreAuthSystemState();
} catch (SQLException | AuthorizeException e) {
log.info(e.getMessage());
throw new RuntimeException(e.getMessage(), e);
}
process.addBitstream(bitstream);
update(context, process);
}