Skip to content

Commit

Permalink
Merge pull request #2356 from apromore/bugfix/AP-9298/8.5
Browse files Browse the repository at this point in the history
AP-9298 Delete assets option does not work when deleting the user
  • Loading branch information
franklma committed Mar 8, 2023
2 parents f6cdc50 + 6fcbc7b commit e745c5d
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,10 @@ ProcessModelVersion createProcessModelVersion(Integer processId, final String br
ProcessModelVersion updateProcessModelVersion(final Integer processId, final String branchName, final Version version,
final User user, final String lockStatus,
final NativeType nativeType, final InputStream nativeStream) throws ImportException, UpdateProcessException;

/**

void deleteProcessModel(Process process, User user) throws UpdateProcessException;

/**
* Deletes the current process model version of the given branch.
* @param models A map of models that are to be removed.
* @param user with write permission
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -644,7 +644,18 @@ private Set<GroupProcess> filterPublicGroupProcesses(Set<GroupProcess> groupProc
return publicGroupProcesses;
}


@Override
public void deleteProcessModel(final Process process, final User user) throws UpdateProcessException {
List<ProcessModelVersion> processModelVersionList =
processModelVersionRepo.getAllProcessModelVersions(process.getId(), TRUNK_NAME);

List<ProcessData> processDatas = new ArrayList<>();
for (ProcessModelVersion processModelVersion : processModelVersionList) {
processDatas.add(new ProcessData(processModelVersion.getProcessBranch().getProcess().getId(),
new Version(processModelVersion.getVersionNumber())));
}
deleteProcessModel(processDatas, user);
}

/**
* @see ProcessService#deleteProcessModel(List, User) {@inheritDoc}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1021,9 +1021,22 @@ public boolean canDeleteOwnerlessFolder(User user) {
@Transactional
public void deleteOwnerlessArtifact(User user) {

/**
* This is a temporary workaround to address following circular dependency issue.
* Circular dependency between the following tasks:
* :Process-Log-Data-Logic:compileJava
* +--- :Process-Log-Definition-Logic:compileJava
* | \--- :Apromore-Core-Components:Apromore-Manager:compileJava
* | \--- :Process-Log-Data-Logic:compileJava ()
* \--- :Apromore-Core-Components:Apromore-Manager:compileJava ()
*
* So PortalDataService's deleteLog method need be called directly in order to delete ownerless logs,
* which leaves the whole purgeOwnerlessArtifact task not guaranteed to finish in one transaction.
*
* Here is the future task to solve this Circular dependency issue properly
* https://apromore.atlassian.net/browse/AP-9452
*/
folderRepo.deleteAll(getSingleOwnerFolderByUser(user));
logRepo.deleteAll(getSingleOwnerLogByUser(user));
processRepo.deleteAll(getSingleOwnerProcessByUser(user));

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
Expand All @@ -48,6 +49,8 @@
import org.apromore.portal.types.EventQueueEvents;
import org.apromore.portal.types.EventQueueTypes;
import org.apromore.service.AuthorizationService;
import org.apromore.service.EventLogService;
import org.apromore.service.ProcessService;
import org.apromore.service.SecurityService;
import org.apromore.service.UserService;
import org.apromore.service.WorkspaceService;
Expand Down Expand Up @@ -98,6 +101,12 @@ public class DeleteUserController extends SelectorComposer<Window> {
@WireVariable("userService")
private UserService userService;

@WireVariable("processService")
private ProcessService processService;

@WireVariable("eventLogService")
private EventLogService eventLogService;

private Map<String, Object> argMap = (Map<String, Object>) Executions.getCurrent().getArg();
private User selectedUser = (User) argMap.get("selectedUser");
private String selectedUserName;
Expand Down Expand Up @@ -342,7 +351,30 @@ private void applyTransfer() {

private void purgeOwnedAssets() {
try {
/**
* This is a temporary workaround to address following circular dependency issue.
* Circular dependency between the following tasks:
* :Process-Log-Data-Logic:compileJava
* +--- :Process-Log-Definition-Logic:compileJava
* | \--- :Apromore-Core-Components:Apromore-Manager:compileJava
* | \--- :Process-Log-Data-Logic:compileJava ()
* \--- :Apromore-Core-Components:Apromore-Manager:compileJava ()
*
* So in here PortalDataService's deleteLog method is called directly, which leaves the whole
* purgeOwnerlessArtifact task not guaranteed to finish in one transaction.
*
* Here is the future task to solve this Circular dependency issue properly
* https://apromore.atlassian.net/browse/AP-9452
*/
List<Log> logList = workspaceService.getSingleOwnerLogByUser(selectedUser);
for (Log log : logList) {
eventLogService.deleteLogs(Collections.singletonList(log), selectedUser);
}

List<Process> processes = workspaceService.getSingleOwnerProcessByUser(selectedUser);
for (Process process : processes) {
processService.deleteProcessModel(process, selectedUser);
}

workspaceService.deleteOwnerlessArtifact(selectedUser);
Notification.info(getLabel("successDeleteAll_message"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,16 @@ public interface ProcessModelVersionRepository extends JpaRepository<ProcessMode
ProcessModelVersion getProcessModelVersionByUser(Integer processId, String branchName, String versionNumber,
Integer userId);

/**
* Find the process model version for the process id branch and version.
* @param processId the process id.
* @param branchName the branch name.
* @return processModelVersion we found or null.
*/
@Query("SELECT pmv FROM ProcessModelVersion pmv JOIN pmv.processBranch pb JOIN pb.process p " +
"WHERE p.id = ?1 AND pb.branchName = ?2")
List<ProcessModelVersion> getAllProcessModelVersions(Integer processId, String branchName);

/**
* Find a list of process model version for the process id branch and version.
* @param processId the process id.
Expand Down

0 comments on commit e745c5d

Please sign in to comment.