Commit e437234c authored by Brian Long's avatar Brian Long
Browse files

share models by tenant

parent 5d172e23
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ public class ModelShareExtension implements Bootstrappable {
            return;
        
        this.logger.trace("scheduled()");
        this.worker.share();
        this.worker.shareAllModels();
    }

}
+20 −8
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import java.util.Map.Entry;
import java.util.Set;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.repository.ModelQuery;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -206,31 +207,42 @@ public class ModelShareWorker implements Bootstrappable {
            map.put(key, value);
    }
    
    public void share() {
        this.logger.trace("Discovering models ...");
    public void shareAllModels() {
        if (this.tenantId != null)
            this.shareAllModels(this.tenantId);
        this.shareAllModels(null);
    }
    
    public void shareAllModels(Long tenantId) {
        this.logger.trace("Discovering models in tenant {} ...", this.tenantId);
        
        long modelCount = 0L;
        int page = 1;
        int perPage = this.modelChunkSize;
        
        List<org.activiti.engine.repository.Model> models = this.services.getRepositoryService().createModelQuery().listPage((page-1)*perPage, perPage);
        ModelQuery query = this.services.getRepositoryService().createModelQuery().latestVersion();
        if (tenantId != null)
            query.modelTenantId(String.valueOf(tenantId));
        else query.modelWithoutTenantId();
        
        List<org.activiti.engine.repository.Model> models = query.listPage((page-1)*perPage, perPage);
        while (!models.isEmpty()) {
            this.logger.trace("Fetched page #{} of {} models", page, models.size());
            this.logger.trace("Fetched page #{} of {} models in tenant {}", page, models.size(), this.tenantId);
            
            for (org.activiti.engine.repository.Model model : models) {
                this.logger.debug("Discovered model: {}: {}: {}", model.getCategory(), model.getId(), model.getName());
                this.share(model);
                this.shareModel(model);
            }
            
            modelCount += models.size();
            page++;
            models = this.services.getRepositoryService().createModelQuery().listPage((page-1)*perPage, perPage);
            models = query.listPage((page-1)*perPage, perPage);
        }

        this.logger.trace("Discovered {} models", modelCount);
        this.logger.trace("Discovered {} models in tenant {}", modelCount, this.tenantId);
    }
    
    public void share(org.activiti.engine.repository.Model orgModel) {
    public void shareModel(org.activiti.engine.repository.Model orgModel) {
        Model model = (Model) this.modelService.getModel(Long.valueOf(orgModel.getId()));
        Map<HashableGroup, SharePermission> shares = this.fetchCurrentModelShares(model);