get all models with ModelService

This commit is contained in:
Brian Long 2024-07-08 10:04:31 -04:00
parent e437234c28
commit 2cf1b241f3
2 changed files with 90 additions and 9 deletions
src/main/java/com/inteligr8/alfresco/activiti/share

@ -21,6 +21,10 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.activiti.domain.idm.User;
import com.activiti.security.SecurityUtils;
import com.activiti.service.api.UserService;
@Component
public class ModelShareExtension implements Bootstrappable {
@ -28,6 +32,12 @@ public class ModelShareExtension implements Bootstrappable {
@Autowired
private ModelShareWorker worker;
@Autowired
private UserService userService;
@Value("${inteligr8.modelShareExtension.runAs:admin@app.activiti.com}")
private String runAsUser;
@Value("${inteligr8.modelShareExtension.enabled:true}")
private boolean enabled;
@ -58,8 +68,14 @@ public class ModelShareExtension implements Bootstrappable {
private void scheduled() {
if (!this.enabled || !this.bootstrapped)
return;
this.logger.trace("scheduled()");
this.logger.debug("Assuming user: {}", this.runAsUser);
User runAsUser = this.userService.findUserByEmail(this.runAsUser);
SecurityUtils.assumeUser(runAsUser);
this.logger.debug("Assumed user: {}", runAsUser.getId());
this.worker.shareAllModels();
}

@ -35,6 +35,7 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;
import com.activiti.domain.editor.AbstractModel;
import com.activiti.domain.editor.Model;
import com.activiti.domain.editor.ModelShareInfo;
import com.activiti.domain.editor.SharePermission;
@ -214,20 +215,80 @@ public class ModelShareWorker implements Bootstrappable {
}
public void shareAllModels(Long tenantId) {
this.logger.trace("Discovering models in tenant {} ...", this.tenantId);
this.shareApsFormModels();
this.shareApsDataModels();
this.shareApsDecisionTableModels();
this.shareApsProcessModels();
this.shareApsAppModels();
this.shareAllActivitiModels(tenantId);
}
private void shareApsFormModels() {
this.logger.trace("Discovering APS form models");
List<AbstractModel> models = this.modelService.getModelsByModelTypeAndReferenceId(Model.MODEL_TYPE_FORM, null);
for (AbstractModel model : models) {
this.logger.debug("Discovered APS form model: {} [{}]", model.getName(), model.getId());
this.shareModel((Model) model);
}
}
private void shareApsDataModels() {
this.logger.trace("Discovering APS data models");
List<AbstractModel> models = this.modelService.getModelsByModelTypeAndReferenceId(Model.MODEL_TYPE_DATA_MODEL, null);
for (AbstractModel model : models) {
this.logger.debug("Discovered APS data model: {} [{}]", model.getName(), model.getId());
this.shareModel((Model) model);
}
}
private void shareApsDecisionTableModels() {
this.logger.trace("Discovering APS decision table models");
List<AbstractModel> models = this.modelService.getModelsByModelTypeAndReferenceId(Model.MODEL_TYPE_DECISION_TABLE, null);
for (AbstractModel model : models) {
this.logger.debug("Discovered APS decision table model: {} [{}]", model.getName(), model.getId());
this.shareModel((Model) model);
}
}
private void shareApsProcessModels() {
this.logger.trace("Discovering APS process models");
List<AbstractModel> models = this.modelService.getModelsByModelTypeAndReferenceId(Model.MODEL_TYPE_BPMN, null);
for (AbstractModel model : models) {
this.logger.debug("Discovered APS process model: {} [{}]", model.getName(), model.getId());
this.shareModel((Model) model);
}
}
private void shareApsAppModels() {
this.logger.trace("Discovering APS app models");
List<AbstractModel> models = this.modelService.getModelsByModelTypeAndReferenceId(Model.MODEL_TYPE_APP, null);
for (AbstractModel model : models) {
this.logger.debug("Discovered APS app model: {} [{}]", model.getName(), model.getId());
this.shareModel((Model) model);
}
}
private void shareAllActivitiModels(Long tenantId) {
this.logger.trace("Discovering activiti models in tenant {} ...", tenantId);
long modelCount = 0L;
int page = 1;
int perPage = this.modelChunkSize;
ModelQuery query = this.services.getRepositoryService().createModelQuery().latestVersion();
ModelQuery query = this.services.getRepositoryService().createModelQuery()
.latestVersion();
if (tenantId != null)
query.modelTenantId(String.valueOf(tenantId));
else query.modelWithoutTenantId();
this.logger.trace("Discovering activiti models with page size: {}", perPage);
List<org.activiti.engine.repository.Model> models = query.listPage((page-1)*perPage, perPage);
if (models.isEmpty()) {
this.logger.debug("procDef counts: {}", this.services.getRepositoryService().createProcessDefinitionQuery().latestVersion().count());
}
while (!models.isEmpty()) {
this.logger.trace("Fetched page #{} of {} models in tenant {}", page, models.size(), this.tenantId);
this.logger.trace("Fetched page #{} of {} activiti models in tenant {}", page, models.size(), tenantId);
for (org.activiti.engine.repository.Model model : models) {
this.logger.debug("Discovered model: {}: {}: {}", model.getCategory(), model.getId(), model.getName());
@ -239,15 +300,19 @@ public class ModelShareWorker implements Bootstrappable {
models = query.listPage((page-1)*perPage, perPage);
}
this.logger.trace("Discovered {} models in tenant {}", modelCount, this.tenantId);
this.logger.trace("Discovered {} activiti models in tenant {}", modelCount, tenantId);
}
public void shareModel(org.activiti.engine.repository.Model orgModel) {
Model model = (Model) this.modelService.getModel(Long.valueOf(orgModel.getId()));
this.shareModel(model);
}
public void shareModel(Model model) {
Map<HashableGroup, SharePermission> shares = this.fetchCurrentModelShares(model);
switch (model.getModelType()) {
case 3:
case Model.MODEL_TYPE_APP:
for (Entry<HashableGroup, SharePermission> group : this.groups.entrySet()) {
if (this.appDefsGroups.containsKey(group.getKey())) {
this.logger.trace("The default group permission is overridden by the app group permission: {}", group.getKey());
@ -258,7 +323,7 @@ public class ModelShareWorker implements Bootstrappable {
for (Entry<HashableGroup, SharePermission> group : this.appDefsGroups.entrySet())
this.share(shares, model, group.getKey(), group.getValue());
break;
case 0:
case Model.MODEL_TYPE_BPMN:
for (Entry<HashableGroup, SharePermission> group : this.groups.entrySet()) {
if (this.processDefsGroups.containsKey(group.getKey())) {
this.logger.trace("The default group permission is overridden by the app group permission: {}", group.getKey());
@ -269,7 +334,7 @@ public class ModelShareWorker implements Bootstrappable {
for (Entry<HashableGroup, SharePermission> group : this.processDefsGroups.entrySet())
this.share(shares, model, group.getKey(), group.getValue());
break;
case 1:
case Model.MODEL_TYPE_FORM:
for (Entry<HashableGroup, SharePermission> group : this.groups.entrySet()) {
if (this.formDefsGroups.containsKey(group.getKey())) {
this.logger.trace("The default group permission is overridden by the app group permission: {}", group.getKey());