diff --git a/src/main/java/com/inteligr8/maven/aps/modeling/goal/ApsShareGoal.java b/src/main/java/com/inteligr8/maven/aps/modeling/goal/ApsShareGoal.java index e06d788..544d337 100644 --- a/src/main/java/com/inteligr8/maven/aps/modeling/goal/ApsShareGoal.java +++ b/src/main/java/com/inteligr8/maven/aps/modeling/goal/ApsShareGoal.java @@ -28,6 +28,9 @@ import com.inteligr8.maven.aps.modeling.util.Index; @Component( role = org.apache.maven.plugin.Mojo.class ) public class ApsShareGoal extends ApsAddressibleGoal { + @Parameter( property = "aps-model.share.modelName" ) + protected String modelName; + @Parameter( property = "aps-model.share.readers" ) protected String readers; @@ -66,7 +69,6 @@ public class ApsShareGoal extends ApsAddressibleGoal { @Override public void executeEnabled() throws MojoExecutionException, MojoFailureException { - this.getLog().info("editors: " + this.editors); this.normalizeParameters(); this.buildIdentityIndex(); @@ -77,14 +79,19 @@ public class ApsShareGoal extends ApsAddressibleGoal { this.shareModels(ModelsApi.ModelType.Process, this.processReaderSet, this.processEditorSet); if (!this.formReaderSet.isEmpty() || !this.formEditorSet.isEmpty()) - this.shareModels(ModelsApi.ModelType.Form, this.formReaderSet, this.formEditorSet); + this.shareModels(ModelsApi.ModelType.Form, this.formReaderSet, this.formEditorSet); } private void shareModels(ModelsApi.ModelType modelType, Set readers, Set editors) { ResultListDataRepresentation models = this.getApsApi().getModelsApi().get(null, null, modelType.getId(), null); + if (models.getData() == null) + return; + for (Datum datum : models.getData()) { Number modelId = (Number)datum.getAdditionalProperties().get("id"); String modelName = (String)datum.getAdditionalProperties().get("name"); + if (this.modelName != null && !this.modelName.equals(modelName)) + continue; Set groupsAddressed = new HashSet<>(); Set readersUnaddressed = new HashSet<>(readers); @@ -92,65 +99,24 @@ public class ApsShareGoal extends ApsAddressibleGoal { ShareInfoRequest changeRequest = new ShareInfoRequest(); ResultList shares = this.getApsApi().getShareApi().getShareInfo(modelId.toString()); - for (SharePermission share : shares.getData()) { - if (share.getGroup() != null) { - groupsAddressed.add(share.getGroup().getName()); - - if (PermissionLevel.Write.equals(share.getPermission())) { - if (editors.contains(share.getGroup().getName())) { - this.getLog().debug("The named group '" + share.getGroup().getName() + "' is already an editor of model '" + modelName + "'"); - // no change - continue; - } else if (readers.contains(share.getGroup().getName())) { - this.getLog().debug("The named group '" + share.getGroup().getName() + "' reverting from editor to reader of model '" + modelName + "'"); - changeRequest.getUpdated().add(new PermissionLight().withId(share.getId()).withPermission(PermissionLevel.Read)); - continue; - } - } else { - if (editors.contains(share.getGroup().getName())) { - this.getLog().debug("The named group '" + share.getGroup().getName() + "' elevating from reader to editor of model '" + modelName + "'"); - changeRequest.getUpdated().add(new PermissionLight().withId(share.getId()).withPermission(PermissionLevel.Write)); - continue; - } else if (readers.contains(share.getGroup().getName())) { - this.getLog().debug("The named group '" + share.getGroup().getName() + "' is already an reader of model '" + modelName + "'"); - // no change - continue; - } + if (shares.getData() != null) { + for (SharePermission share : shares.getData()) { + if (share.getGroup() != null) { + groupsAddressed.add(share.getGroup().getName()); + this.analyzeChanges(modelName, readers, editors, share, changeRequest); + } else if (share.getPerson() != null) { + this.getLog().debug("Person-based model sharing not supported at this time; ignoring"); } - - if (this.doRevoke) { - this.getLog().debug("The named group '" + share.getGroup().getName() + "' is an unregulated editor of model '" + modelName + "'; revoking ..."); - changeRequest.getRemoved().add(new PermissionLight().withId(share.getId())); - } else { - this.getLog().debug("The named group '" + share.getGroup().getName() + "' is an unregulated editor of model '" + modelName + "'"); - // not touching extra unnamed permissions - } - } else if (share.getPerson() != null) { - this.getLog().debug("Person-based model sharing not supported at this time; ignoring"); } } readersUnaddressed.removeAll(groupsAddressed); - for (String reader : readersUnaddressed) { - Long groupId = this.identityIndex.getValue(reader); - if (groupId == null) { - this.getLog().warn("The named group '" + reader + "' does not exist in APS; ignoring ..."); - } else { - this.getLog().debug("The named group '" + reader + "' becoming a reader of model '" + modelName + "'"); - changeRequest.getAdded().add(new PermissionLight().withGroupId(groupId).withPermission(PermissionLevel.Read)); - } - } + for (String reader : readersUnaddressed) + this.analyzeChanges(modelName, reader, PermissionLevel.Read, changeRequest); editorsUnaddressed.removeAll(groupsAddressed); - for (String editor : editorsUnaddressed) { - Long groupId = this.identityIndex.getValue(editor); - if (groupId == null) { - this.getLog().warn("The named group '" + editor + "' does not exist in APS; ignoring ..."); - } else { - this.getLog().debug("The named group '" + editor + "' becoming an editor of model '" + modelName + "'"); - changeRequest.getAdded().add(new PermissionLight().withGroupId(groupId).withPermission(PermissionLevel.Write)); - } - } + for (String editor : editorsUnaddressed) + this.analyzeChanges(modelName, editor, PermissionLevel.Write, changeRequest); if (!changeRequest.getAdded().isEmpty() || !changeRequest.getUpdated().isEmpty() || !changeRequest.getRemoved().isEmpty()) { this.getLog().info("Sharing model: " + modelType + " => '" + modelName + "'"); @@ -159,6 +125,48 @@ public class ApsShareGoal extends ApsAddressibleGoal { } } + private void analyzeChanges(String modelName, Set readers, Set editors, SharePermission share, ShareInfoRequest changeRequest) { + if (PermissionLevel.Write.equals(share.getPermission())) { + if (editors.contains(share.getGroup().getName())) { + this.getLog().debug("The named group '" + share.getGroup().getName() + "' is already an editor of model '" + modelName + "'"); + // no change + return; + } else if (readers.contains(share.getGroup().getName())) { + this.getLog().debug("The named group '" + share.getGroup().getName() + "' reverting from editor to reader of model '" + modelName + "'"); + changeRequest.getUpdated().add(new PermissionLight().withId(share.getId()).withPermission(PermissionLevel.Read)); + return; + } + } else { + if (editors.contains(share.getGroup().getName())) { + this.getLog().debug("The named group '" + share.getGroup().getName() + "' elevating from reader to editor of model '" + modelName + "'"); + changeRequest.getUpdated().add(new PermissionLight().withId(share.getId()).withPermission(PermissionLevel.Write)); + return; + } else if (readers.contains(share.getGroup().getName())) { + this.getLog().debug("The named group '" + share.getGroup().getName() + "' is already an reader of model '" + modelName + "'"); + // no change + return; + } + } + + if (this.doRevoke) { + this.getLog().debug("The named group '" + share.getGroup().getName() + "' is an unregulated editor of model '" + modelName + "'; revoking ..."); + changeRequest.getRemoved().add(new PermissionLight().withId(share.getId())); + } else { + this.getLog().debug("The named group '" + share.getGroup().getName() + "' is an unregulated editor of model '" + modelName + "'"); + // not touching extra unnamed permissions + } + } + + private void analyzeChanges(String modelName, String groupName, PermissionLevel plevel, ShareInfoRequest changeRequest) { + Long groupId = this.identityIndex.getValue(groupName); + if (groupId == null) { + this.getLog().warn("The named group '" + groupName + "' does not exist in APS; ignoring ..."); + } else { + this.getLog().debug("The named group '" + groupName + "' granted the " + plevel + " role of model '" + modelName + "'"); + changeRequest.getAdded().add(new PermissionLight().withGroupId(groupId).withPermission(plevel)); + } + } + protected void normalizeParameters() { Set readerSet = this.normalizeParameter(this.readers); Set editorSet = this.normalizeParameter(this.editors);