Loading src/main/java/com/inteligr8/maven/aps/modeling/goal/ApsShareGoal.java +62 −54 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -82,9 +84,14 @@ public class ApsShareGoal extends ApsAddressibleGoal { private void shareModels(ModelsApi.ModelType modelType, Set<String> readers, Set<String> 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<String> groupsAddressed = new HashSet<>(); Set<String> readersUnaddressed = new HashSet<>(readers); Loading @@ -92,29 +99,52 @@ public class ApsShareGoal extends ApsAddressibleGoal { ShareInfoRequest changeRequest = new ShareInfoRequest(); ResultList<SharePermission> shares = this.getApsApi().getShareApi().getShareInfo(modelId.toString()); 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"); } } } readersUnaddressed.removeAll(groupsAddressed); for (String reader : readersUnaddressed) this.analyzeChanges(modelName, reader, PermissionLevel.Read, changeRequest); editorsUnaddressed.removeAll(groupsAddressed); 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 + "'"); this.getApsApi().getShareApi().setShareInfo(modelId.toString(), changeRequest); } } } private void analyzeChanges(String modelName, Set<String> readers, Set<String> 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 continue; 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)); continue; 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)); continue; 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 continue; return; } } Loading @@ -125,37 +155,15 @@ public class ApsShareGoal extends ApsAddressibleGoal { 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)); } } editorsUnaddressed.removeAll(groupsAddressed); for (String editor : editorsUnaddressed) { Long groupId = this.identityIndex.getValue(editor); 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 '" + editor + "' does not exist in APS; ignoring ..."); this.getLog().warn("The named group '" + groupName + "' 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)); } } if (!changeRequest.getAdded().isEmpty() || !changeRequest.getUpdated().isEmpty() || !changeRequest.getRemoved().isEmpty()) { this.getLog().info("Sharing model: " + modelType + " => '" + modelName + "'"); this.getApsApi().getShareApi().setShareInfo(modelId.toString(), changeRequest); } this.getLog().debug("The named group '" + groupName + "' granted the " + plevel + " role of model '" + modelName + "'"); changeRequest.getAdded().add(new PermissionLight().withGroupId(groupId).withPermission(plevel)); } } Loading Loading
src/main/java/com/inteligr8/maven/aps/modeling/goal/ApsShareGoal.java +62 −54 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -82,9 +84,14 @@ public class ApsShareGoal extends ApsAddressibleGoal { private void shareModels(ModelsApi.ModelType modelType, Set<String> readers, Set<String> 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<String> groupsAddressed = new HashSet<>(); Set<String> readersUnaddressed = new HashSet<>(readers); Loading @@ -92,29 +99,52 @@ public class ApsShareGoal extends ApsAddressibleGoal { ShareInfoRequest changeRequest = new ShareInfoRequest(); ResultList<SharePermission> shares = this.getApsApi().getShareApi().getShareInfo(modelId.toString()); 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"); } } } readersUnaddressed.removeAll(groupsAddressed); for (String reader : readersUnaddressed) this.analyzeChanges(modelName, reader, PermissionLevel.Read, changeRequest); editorsUnaddressed.removeAll(groupsAddressed); 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 + "'"); this.getApsApi().getShareApi().setShareInfo(modelId.toString(), changeRequest); } } } private void analyzeChanges(String modelName, Set<String> readers, Set<String> 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 continue; 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)); continue; 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)); continue; 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 continue; return; } } Loading @@ -125,37 +155,15 @@ public class ApsShareGoal extends ApsAddressibleGoal { 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)); } } editorsUnaddressed.removeAll(groupsAddressed); for (String editor : editorsUnaddressed) { Long groupId = this.identityIndex.getValue(editor); 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 '" + editor + "' does not exist in APS; ignoring ..."); this.getLog().warn("The named group '" + groupName + "' 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)); } } if (!changeRequest.getAdded().isEmpty() || !changeRequest.getUpdated().isEmpty() || !changeRequest.getRemoved().isEmpty()) { this.getLog().info("Sharing model: " + modelType + " => '" + modelName + "'"); this.getApsApi().getShareApi().setShareInfo(modelId.toString(), changeRequest); } this.getLog().debug("The named group '" + groupName + "' granted the " + plevel + " role of model '" + modelName + "'"); changeRequest.getAdded().add(new PermissionLight().withGroupId(groupId).withPermission(plevel)); } } Loading