diff --git a/pom.xml b/pom.xml
index afddb46..9916a84 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
connector-grouper-rest
- 0.3
+ 0.4
jar
Grouper REST Connector
diff --git a/src/main/java/com/evolveum/polygon/connector/grouper/rest/AbstractGroupProcessor.java b/src/main/java/com/evolveum/polygon/connector/grouper/rest/AbstractGroupProcessor.java
index 410b235..52fd5d2 100644
--- a/src/main/java/com/evolveum/polygon/connector/grouper/rest/AbstractGroupProcessor.java
+++ b/src/main/java/com/evolveum/polygon/connector/grouper/rest/AbstractGroupProcessor.java
@@ -131,14 +131,18 @@ private boolean handleGroupJsonObject(Object group, ResultsHandler handler) {
if (group instanceof JSONObject) {
JSONObject gObject = (JSONObject) group;
String name = processor.getStringOrNull(gObject, "name");
- String extension = processor.getStringOrNull(gObject, "extension");
- String uuid = processor.getStringOrNull(gObject, "uuid");
- ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
- builder.setObjectClass(getObjectClass());
- builder.setUid(uuid);
- builder.setName(name);
- builder.addAttribute(ATTR_EXTENSION, extension);
- return handler.handle(builder.build());
+ if (processor.groupNameMatches(name)) {
+ String extension = processor.getStringOrNull(gObject, "extension");
+ String uuid = processor.getStringOrNull(gObject, "uuid");
+ ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
+ builder.setObjectClass(getObjectClass());
+ builder.setUid(uuid);
+ builder.setName(name);
+ builder.addAttribute(ATTR_EXTENSION, extension);
+ return handler.handle(builder.build());
+ } else {
+ return true;
+ }
} else {
throw new IllegalStateException("Expected group as JSONObject, got " + group);
}
@@ -153,12 +157,16 @@ private boolean handleGroupAsMemberJsonObject(Object group, ResultsHandler handl
return true;
}
String name = processor.getStringOrNull(gObject, "name");
- String id = processor.getStringOrNull(gObject, "id");
- ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
- builder.setObjectClass(getObjectClass());
- builder.setUid(id);
- builder.setName(name);
- return handler.handle(builder.build());
+ if (processor.groupNameMatches(name)) {
+ String id = processor.getStringOrNull(gObject, "id");
+ ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
+ builder.setObjectClass(getObjectClass());
+ builder.setUid(id);
+ builder.setName(name);
+ return handler.handle(builder.build());
+ } else {
+ return true;
+ }
} else {
throw new IllegalStateException("Expected group as JSONObject, got " + group);
}
diff --git a/src/main/java/com/evolveum/polygon/connector/grouper/rest/AccountProcessor.java b/src/main/java/com/evolveum/polygon/connector/grouper/rest/AccountProcessor.java
index 4c6254f..fe87bb7 100644
--- a/src/main/java/com/evolveum/polygon/connector/grouper/rest/AccountProcessor.java
+++ b/src/main/java/com/evolveum/polygon/connector/grouper/rest/AccountProcessor.java
@@ -157,7 +157,7 @@ private List selectGroupNames(JSONArray groups) {
if (group instanceof JSONObject) {
JSONObject gObject = (JSONObject) group;
String name = processor.getStringOrNull(gObject, "name");
- if (groupNameMatches(name)) {
+ if (processor.groupNameMatches(name)) {
rv.add(name);
}
} else {
@@ -167,27 +167,6 @@ private List selectGroupNames(JSONArray groups) {
return rv;
}
- private boolean groupNameMatches(String name) {
- if (name == null) {
- return false;
- }
- return groupNameMatches(name, getConfiguration().getGroupIncludePattern()) &&
- !groupNameMatches(name, getConfiguration().getGroupExcludePattern());
- }
-
- private boolean groupNameMatches(String name, String[] patterns) {
- if (patterns == null) {
- return false;
- }
- for (String pattern : patterns) {
- Pattern compiled = Pattern.compile(pattern);
- if (compiled.matcher(name).matches()) {
- return true;
- }
- }
- return false;
- }
-
private GrouperConfiguration getConfiguration() {
return processor.configuration;
}
diff --git a/src/main/java/com/evolveum/polygon/connector/grouper/rest/PlainGroupProcessor.java b/src/main/java/com/evolveum/polygon/connector/grouper/rest/PlainGroupProcessor.java
index e4d5d44..b9ebbf5 100644
--- a/src/main/java/com/evolveum/polygon/connector/grouper/rest/PlainGroupProcessor.java
+++ b/src/main/java/com/evolveum/polygon/connector/grouper/rest/PlainGroupProcessor.java
@@ -138,34 +138,38 @@ private boolean executeGetGroupWithMembersResponse(HttpPost request, JSONObject
JSONObject gObject = (JSONObject) processor.get(response, WS_GET_MEMBERS_RESULTS, RESULTS, WS_GROUP);
String name = processor.getStringOrNull(gObject, "name");
- String extension = processor.getStringOrNull(gObject, "extension");
- String uuid = processor.getStringOrNull(gObject, "uuid");
- ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
- builder.setObjectClass(getObjectClass());
- builder.setUid(uuid);
- builder.setName(name);
- builder.addAttribute(ATTR_EXTENSION, extension);
-
- List subjects = new ArrayList<>();
- JSONArray members = processor.getArray(response, false, WS_GET_MEMBERS_RESULTS, RESULTS, WS_SUBJECTS);
- if (members != null) {
- for (Object memberObject : members) {
- JSONObject member = (JSONObject) memberObject;
- String sourceId = processor.getStringOrNull(member, "sourceId");
- if (sourceId == null || !sourceId.equals(getConfiguration().getSubjectSource())) {
- LOG.info("Skipping non-person member (source={0})", sourceId);
- continue;
- }
- String subjectId = processor.getStringOrNull(member, "id");
- if (subjectId != null) {
- subjects.add(subjectId);
- } else {
- LOG.info("Skipping unnamed member (source={0})", member);
+ if (processor.groupNameMatches(name)) {
+ String extension = processor.getStringOrNull(gObject, "extension");
+ String uuid = processor.getStringOrNull(gObject, "uuid");
+ ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
+ builder.setObjectClass(getObjectClass());
+ builder.setUid(uuid);
+ builder.setName(name);
+ builder.addAttribute(ATTR_EXTENSION, extension);
+
+ List subjects = new ArrayList<>();
+ JSONArray members = processor.getArray(response, false, WS_GET_MEMBERS_RESULTS, RESULTS, WS_SUBJECTS);
+ if (members != null) {
+ for (Object memberObject : members) {
+ JSONObject member = (JSONObject) memberObject;
+ String sourceId = processor.getStringOrNull(member, "sourceId");
+ if (sourceId == null || !sourceId.equals(getConfiguration().getSubjectSource())) {
+ LOG.info("Skipping non-person member (source={0})", sourceId);
+ continue;
+ }
+ String subjectId = processor.getStringOrNull(member, "id");
+ if (subjectId != null) {
+ subjects.add(subjectId);
+ } else {
+ LOG.info("Skipping unnamed member (source={0})", member);
+ }
}
+ builder.addAttribute(ATTR_MEMBER, subjects);
}
- builder.addAttribute(ATTR_MEMBER, subjects);
+ return handler.handle(builder.build());
+ } else {
+ return true;
}
- return handler.handle(builder.build());
}
@Override
diff --git a/src/main/java/com/evolveum/polygon/connector/grouper/rest/Processor.java b/src/main/java/com/evolveum/polygon/connector/grouper/rest/Processor.java
index 49eabd2..9fa18b4 100644
--- a/src/main/java/com/evolveum/polygon/connector/grouper/rest/Processor.java
+++ b/src/main/java/com/evolveum/polygon/connector/grouper/rest/Processor.java
@@ -42,6 +42,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Set;
+import java.util.regex.Pattern;
/**
* @author surmanek
@@ -506,4 +507,25 @@ public String getStringOrNull(JSONObject object, String item) {
public String getString(JSONObject object, String item) {
return (String) get(object, item); // todo error handling
}
+
+ boolean groupNameMatches(String name) {
+ if (name == null) {
+ return false;
+ }
+ return groupNameMatches(name, configuration.getGroupIncludePattern()) &&
+ !groupNameMatches(name, configuration.getGroupExcludePattern());
+ }
+
+ private boolean groupNameMatches(String name, String[] patterns) {
+ if (patterns == null) {
+ return false;
+ }
+ for (String pattern : patterns) {
+ Pattern compiled = Pattern.compile(pattern);
+ if (compiled.matcher(name).matches()) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/src/test/java/com/evolveum/polygon/connector/grouper/test/GrouperTestHelper.java b/src/test/java/com/evolveum/polygon/connector/grouper/test/GrouperTestHelper.java
index 3695241..450090c 100644
--- a/src/test/java/com/evolveum/polygon/connector/grouper/test/GrouperTestHelper.java
+++ b/src/test/java/com/evolveum/polygon/connector/grouper/test/GrouperTestHelper.java
@@ -92,7 +92,8 @@ protected GrouperConfiguration getConfiguration() {
config.setUsername(ADMIN_USERNAME);
config.setPassword(new GuardedString(ADMIN_PASSWORD.toCharArray()));
config.setSuperGroup(SUPER_GROUP);
- config.setGroupIncludePattern(new String[] { SUPER_GROUP });
+ config.setGroupIncludePattern(new String[] { ".*" });
+ config.setGroupExcludePattern(new String[] { ".*_(includes|excludes|systemOfRecord|systemOfRecordAndIncludes)" });
config.setIgnoreSslValidation(true);
config.setSubjectSource(SUBJECT_SOURCE);
config.setExportStem("ref");