You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2015/06/11 16:17:17 UTC

[27/70] syncope git commit: [SYNCOPE-666] Initial commit, Travis CI builds disabled

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
new file mode 100644
index 0000000..6d2eb1b
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlRootElement(name = "anyObject")
+@XmlType
+public class AnyObjectTO extends AnyTO {
+
+    private static final long serialVersionUID = 8841697496476959639L;
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
new file mode 100644
index 0000000..bac9947
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
@@ -0,0 +1,180 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlType
+public abstract class AnyTO extends ConnObjectTO {
+
+    private static final long serialVersionUID = -754311920679872084L;
+
+    private long key;
+
+    private String type;
+
+    private String realm;
+
+    private String status;
+
+    private final Set<AttrTO> derAttrs = new LinkedHashSet<>();
+
+    private final Set<AttrTO> virAttrs = new LinkedHashSet<>();
+
+    private final Set<String> resources = new HashSet<>();
+
+    private final List<PropagationStatus> propagationStatusTOs = new ArrayList<>();
+
+    private final List<RelationshipTO> relationships = new ArrayList<>();
+
+    private final List<MembershipTO> memberships = new ArrayList<>();
+
+    private final List<Long> dynGroups = new ArrayList<>();
+
+    public long getKey() {
+        return key;
+    }
+
+    public void setKey(final long key) {
+        this.key = key;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(final String type) {
+        this.type = type;
+    }
+
+    public String getRealm() {
+        return realm;
+    }
+
+    public void setRealm(final String realm) {
+        this.realm = realm;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(final String status) {
+        this.status = status;
+    }
+
+    @XmlElementWrapper(name = "derAttrs")
+    @XmlElement(name = "attribute")
+    @JsonProperty("derAttrs")
+    public Set<AttrTO> getDerAttrs() {
+        return derAttrs;
+    }
+
+    @JsonIgnore
+    public Map<String, AttrTO> getDerAttrMap() {
+        Map<String, AttrTO> result = new HashMap<>(derAttrs.size());
+        for (AttrTO attributeTO : derAttrs) {
+            result.put(attributeTO.getSchema(), attributeTO);
+        }
+
+        return Collections.unmodifiableMap(result);
+    }
+
+    @XmlElementWrapper(name = "virAttrs")
+    @XmlElement(name = "attribute")
+    @JsonProperty("virAttrs")
+    public Set<AttrTO> getVirAttrs() {
+        return virAttrs;
+    }
+
+    @JsonIgnore
+    public Map<String, AttrTO> getVirAttrMap() {
+        Map<String, AttrTO> result = new HashMap<>(virAttrs.size());
+        for (AttrTO attributeTO : virAttrs) {
+            result.put(attributeTO.getSchema(), attributeTO);
+        }
+
+        return Collections.unmodifiableMap(result);
+    }
+
+    @XmlElementWrapper(name = "resources")
+    @XmlElement(name = "resource")
+    @JsonProperty("resources")
+    public Set<String> getResources() {
+        return resources;
+    }
+
+    @XmlElementWrapper(name = "propagationStatuses")
+    @XmlElement(name = "propagationStatus")
+    @JsonProperty("propagationStatuses")
+    public List<PropagationStatus> getPropagationStatusTOs() {
+        return propagationStatusTOs;
+    }
+
+    @XmlElementWrapper(name = "relationships")
+    @XmlElement(name = "relationship")
+    @JsonProperty("relationships")
+    public List<RelationshipTO> getRelationships() {
+        return relationships;
+    }
+
+    @XmlElementWrapper(name = "memberships")
+    @XmlElement(name = "membership")
+    @JsonProperty("memberships")
+    public List<MembershipTO> getMemberships() {
+        return memberships;
+    }
+
+    @JsonIgnore
+    public Map<Long, MembershipTO> getMembershipMap() {
+        Map<Long, MembershipTO> result;
+
+        if (getMemberships() == null) {
+            result = Collections.emptyMap();
+        } else {
+            result = new HashMap<>(getMemberships().size());
+            for (MembershipTO membership : getMemberships()) {
+                result.put(membership.getRightKey(), membership);
+            }
+            result = Collections.unmodifiableMap(result);
+        }
+
+        return result;
+    }
+
+    @XmlElementWrapper(name = "dynGroups")
+    @XmlElement(name = "role")
+    @JsonProperty("dynGroups")
+    public List<Long> getDynGroups() {
+        return dynGroups;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConfTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConfTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConfTO.java
index 4856a48..77e1af2 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConfTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConfTO.java
@@ -23,7 +23,7 @@ import javax.xml.bind.annotation.XmlType;
 
 @XmlRootElement(name = "conf")
 @XmlType
-public class ConfTO extends AbstractAttributableTO {
+public class ConfTO extends AnyTO {
 
     private static final long serialVersionUID = -3825039700228595590L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
index da0bd2b..873b15d 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java
@@ -19,19 +19,13 @@
 package org.apache.syncope.common.lib.to;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
 @XmlRootElement(name = "group")
 @XmlType
 @JsonIgnoreProperties({ "displayName" })
-public class GroupTO extends AbstractSubjectTO {
+public class GroupTO extends AnyTO {
 
     private static final long serialVersionUID = -7785920258290147542L;
 
@@ -41,19 +35,9 @@ public class GroupTO extends AbstractSubjectTO {
 
     private Long groupOwner;
 
-    private final List<String> gPlainAttrTemplates = new ArrayList<>();
-
-    private final List<String> gDerAttrTemplates = new ArrayList<>();
-
-    private final List<String> gVirAttrTemplates = new ArrayList<>();
-
-    private final List<String> mPlainAttrTemplates = new ArrayList<>();
+    private String aDynMembershipCond;
 
-    private final List<String> mDerAttrTemplates = new ArrayList<>();
-
-    private final List<String> mVirAttrTemplates = new ArrayList<>();
-
-    private String dynMembershipCond;
+    private String uDynMembershipCond;
 
     public String getName() {
         return name;
@@ -79,54 +63,20 @@ public class GroupTO extends AbstractSubjectTO {
         this.groupOwner = groupOwner;
     }
 
-    @XmlElementWrapper(name = "gPlainAttrTemplates")
-    @XmlElement(name = "gPlainAttrTemplate")
-    @JsonProperty("gPlainAttrTemplates")
-    public List<String> getGPlainAttrTemplates() {
-        return gPlainAttrTemplates;
-    }
-
-    @XmlElementWrapper(name = "gDerAttrTemplates")
-    @XmlElement(name = "gDerAttrTemplate")
-    @JsonProperty("gDerAttrTemplates")
-    public List<String> getGDerAttrTemplates() {
-        return gDerAttrTemplates;
-    }
-
-    @XmlElementWrapper(name = "gVirAttrTemplates")
-    @XmlElement(name = "gVirAttrTemplate")
-    @JsonProperty("gVirAttrTemplates")
-    public List<String> getGVirAttrTemplates() {
-        return gVirAttrTemplates;
-    }
-
-    @XmlElementWrapper(name = "mPlainAttrTemplates")
-    @XmlElement(name = "mPlainAttrTemplate")
-    @JsonProperty("mPlainAttrTemplates")
-    public List<String> getMPlainAttrTemplates() {
-        return mPlainAttrTemplates;
-    }
-
-    @XmlElementWrapper(name = "mDerAttrTemplates")
-    @XmlElement(name = "mDerAttrTemplate")
-    @JsonProperty("mDerAttrTemplates")
-    public List<String> getMDerAttrTemplates() {
-        return mDerAttrTemplates;
+    public String getADynMembershipCond() {
+        return aDynMembershipCond;
     }
 
-    @XmlElementWrapper(name = "mVirAttrTemplates")
-    @XmlElement(name = "mVirAttrTemplate")
-    @JsonProperty("mVirAttrTemplates")
-    public List<String> getMVirAttrTemplates() {
-        return mVirAttrTemplates;
+    public void setADynMembershipCond(final String aDynMembershipCond) {
+        this.aDynMembershipCond = aDynMembershipCond;
     }
 
-    public String getDynMembershipCond() {
-        return dynMembershipCond;
+    public String getUDynMembershipCond() {
+        return uDynMembershipCond;
     }
 
-    public void setDynMembershipCond(final String dynMembershipCond) {
-        this.dynMembershipCond = dynMembershipCond;
+    public void setUDynMembershipCond(final String uDynMembershipCond) {
+        this.uDynMembershipCond = uDynMembershipCond;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java
index 7d81cd8..cf5dc71 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MappingTO.java
@@ -36,19 +36,19 @@ public class MappingTO extends AbstractBaseBean {
 
     private static final long serialVersionUID = 8447688036282611118L;
 
-    private String accountLink;
+    private String connObjectLink;
 
     private final List<MappingItemTO> items = new ArrayList<>();
 
-    public String getAccountLink() {
-        return accountLink;
+    public String getConnObjectLink() {
+        return connObjectLink;
     }
 
-    public void setAccountLink(final String accountLink) {
-        this.accountLink = accountLink;
+    public void setConnObjectLink(final String connObjectLink) {
+        this.connObjectLink = connObjectLink;
     }
 
-    public MappingItemTO getAccountIdItem() {
+    public MappingItemTO getConnObjectKeyItem() {
         return CollectionUtils.find(getItems(), new Predicate<MappingItemTO>() {
 
             @Override
@@ -58,48 +58,28 @@ public class MappingTO extends AbstractBaseBean {
         });
     }
 
-    protected boolean addAccountIdItem(final MappingItemTO accountIdItem) {
-        if (IntMappingType.UserVirtualSchema == accountIdItem.getIntMappingType()
-                || IntMappingType.GroupVirtualSchema == accountIdItem.getIntMappingType()
-                || IntMappingType.MembershipVirtualSchema == accountIdItem.getIntMappingType()
-                || IntMappingType.Password == accountIdItem.getIntMappingType()) {
+    protected boolean addConnObjectKeyItem(final MappingItemTO connObjectItem) {
+        if (IntMappingType.UserVirtualSchema == connObjectItem.getIntMappingType()
+                || IntMappingType.GroupVirtualSchema == connObjectItem.getIntMappingType()
+                || IntMappingType.AnyVirtualSchema == connObjectItem.getIntMappingType()
+                || IntMappingType.Password == connObjectItem.getIntMappingType()) {
 
             throw new IllegalArgumentException("Virtual attributes cannot be set as accountId");
         }
-        if (IntMappingType.Password == accountIdItem.getIntMappingType()) {
+        if (IntMappingType.Password == connObjectItem.getIntMappingType()) {
             throw new IllegalArgumentException("Password attributes cannot be set as accountId");
         }
 
-        accountIdItem.setExtAttrName(accountIdItem.getExtAttrName());
-        accountIdItem.setAccountid(true);
+        connObjectItem.setExtAttrName(connObjectItem.getExtAttrName());
+        connObjectItem.setAccountid(true);
 
-        return this.addItem(accountIdItem);
+        return this.add(connObjectItem);
     }
 
-    public boolean setAccountIdItem(final MappingItemTO accountIdItem) {
-        return accountIdItem == null
-                ? removeItem(getAccountIdItem())
-                : addAccountIdItem(accountIdItem);
-    }
-
-    public MappingItemTO getPasswordItem() {
-        return CollectionUtils.find(getItems(), new Predicate<MappingItemTO>() {
-
-            @Override
-            public boolean evaluate(final MappingItemTO item) {
-                return item.isPassword();
-            }
-        });
-    }
-
-    public boolean setPasswordItem(final MappingItemTO passwordItem) {
-        if (passwordItem == null) {
-            return this.removeItem(getPasswordItem());
-        } else {
-            passwordItem.setExtAttrName(null);
-            passwordItem.setPassword(true);
-            return addItem(passwordItem);
-        }
+    public boolean setConnObjectKeyItem(final MappingItemTO connObjectKeyItem) {
+        return connObjectKeyItem == null
+                ? remove(getConnObjectKeyItem())
+                : addConnObjectKeyItem(connObjectKeyItem);
     }
 
     @XmlElementWrapper(name = "items")
@@ -109,11 +89,11 @@ public class MappingTO extends AbstractBaseBean {
         return items;
     }
 
-    public boolean addItem(final MappingItemTO item) {
+    public boolean add(final MappingItemTO item) {
         return item == null ? false : this.items.contains(item) || this.items.add(item);
     }
 
-    public boolean removeItem(final MappingItemTO item) {
+    public boolean remove(final MappingItemTO item) {
         return this.items.remove(item);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
index 2d2c7fa..5c435e4 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
@@ -23,20 +23,15 @@ import javax.xml.bind.annotation.XmlType;
 
 @XmlRootElement(name = "membership")
 @XmlType
-public class MembershipTO extends AbstractAttributableTO {
+public class MembershipTO extends RelationshipTO {
 
     private static final long serialVersionUID = 5992828670273935861L;
 
-    private long groupKey;
-
     private String groupName;
 
-    public long getGroupKey() {
-        return groupKey;
-    }
-
-    public void setGroupKey(final long groupId) {
-        this.groupKey = groupId;
+    @Override
+    public String getRightType() {
+        return "group";
     }
 
     public String getGroupName() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
index d56d2ea..662a465 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
@@ -20,7 +20,9 @@ package org.apache.syncope.common.lib.to;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -39,9 +41,7 @@ public class NotificationTO extends AbstractBaseBean {
 
     private final List<String> events = new ArrayList<>();
 
-    private String userAbout;
-
-    private String groupAbout;
+    private final Map<String, String> abouts = new HashMap<>();
 
     private String recipients;
 
@@ -63,20 +63,8 @@ public class NotificationTO extends AbstractBaseBean {
 
     private boolean active;
 
-    public String getUserAbout() {
-        return userAbout;
-    }
-
-    public void setUserAbout(final String userAbout) {
-        this.userAbout = userAbout;
-    }
-
-    public String getGroupAbout() {
-        return groupAbout;
-    }
-
-    public void setGroupAbout(final String groupAbout) {
-        this.groupAbout = groupAbout;
+    public Map<String, String> getAbouts() {
+        return abouts;
     }
 
     @XmlElementWrapper(name = "events")

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java
index 7c6ec08..0ebfb70 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java
@@ -20,9 +20,9 @@ package org.apache.syncope.common.lib.to;
 
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.PropagationMode;
 import org.apache.syncope.common.lib.types.ResourceOperation;
-import org.apache.syncope.common.lib.types.SubjectType;
 
 @XmlRootElement(name = "propagationTask")
 @XmlType
@@ -34,9 +34,9 @@ public class PropagationTaskTO extends AbstractTaskTO {
 
     private ResourceOperation propagationOperation;
 
-    private String accountId;
+    private String connObjectKey;
 
-    private String oldAccountId;
+    private String oldConnObjectKey;
 
     private String xmlAttributes;
 
@@ -44,24 +44,24 @@ public class PropagationTaskTO extends AbstractTaskTO {
 
     private String objectClassName;
 
-    private SubjectType subjectType;
+    private AnyTypeKind anyTypeKind;
 
-    private Long subjectId;
+    private Long anyKey;
 
-    public String getAccountId() {
-        return accountId;
+    public String getConnObjectKey() {
+        return connObjectKey;
     }
 
-    public void setAccountId(final String accountId) {
-        this.accountId = accountId;
+    public void setConnObjectKey(final String connObjectKey) {
+        this.connObjectKey = connObjectKey;
     }
 
-    public String getOldAccountId() {
-        return oldAccountId;
+    public String getOldConnObjectKey() {
+        return oldConnObjectKey;
     }
 
-    public void setOldAccountId(final String oldAccountId) {
-        this.oldAccountId = oldAccountId;
+    public void setOldConnObjectKey(final String oldConnObjectKey) {
+        this.oldConnObjectKey = oldConnObjectKey;
     }
 
     public PropagationMode getPropagationMode() {
@@ -85,7 +85,6 @@ public class PropagationTaskTO extends AbstractTaskTO {
     }
 
     public void setPropagationOperation(final ResourceOperation propagationOperation) {
-
         this.propagationOperation = propagationOperation;
     }
 
@@ -105,19 +104,19 @@ public class PropagationTaskTO extends AbstractTaskTO {
         this.objectClassName = objectClassName;
     }
 
-    public SubjectType getSubjectType() {
-        return subjectType;
+    public AnyTypeKind getAnyTypeKind() {
+        return anyTypeKind;
     }
 
-    public void setSubjectType(final SubjectType subjectType) {
-        this.subjectType = subjectType;
+    public void setAnyTypeKind(final AnyTypeKind anyTypeKind) {
+        this.anyTypeKind = anyTypeKind;
     }
 
-    public Long getSubjectId() {
-        return subjectId;
+    public Long getAnyKey() {
+        return anyKey;
     }
 
-    public void setSubjectId(final Long subjectId) {
-        this.subjectId = subjectId;
+    public void setAnyKey(final Long anyKey) {
+        this.anyKey = anyKey;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
new file mode 100644
index 0000000..c4ff740
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import org.apache.syncope.common.lib.AbstractBaseBean;
+
+public class ProvisionTO extends AbstractBaseBean {
+
+    private static final long serialVersionUID = 8298910216218007927L;
+
+    private long key;
+
+    private String anyType;
+
+    private String objectClass;
+
+    private String syncToken;
+
+    private MappingTO mapping;
+
+    public long getKey() {
+        return key;
+    }
+
+    public void setKey(final long key) {
+        this.key = key;
+    }
+
+    public String getAnyType() {
+        return anyType;
+    }
+
+    public void setAnyType(final String anyType) {
+        this.anyType = anyType;
+    }
+
+    public String getObjectClass() {
+        return objectClass;
+    }
+
+    public void setObjectClass(final String objectClass) {
+        this.objectClass = objectClass;
+    }
+
+    public String getSyncToken() {
+        return syncToken;
+    }
+
+    public void setSyncToken(final String syncToken) {
+        this.syncToken = syncToken;
+    }
+
+    public MappingTO getMapping() {
+        return mapping;
+    }
+
+    public void setMapping(final MappingTO mapping) {
+        this.mapping = mapping;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java
index 8ddf044..e1839af 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java
@@ -18,6 +18,8 @@
  */
 package org.apache.syncope.common.lib.to;
 
+import java.util.HashMap;
+import java.util.Map;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
@@ -27,23 +29,10 @@ public class PushTaskTO extends AbstractProvisioningTaskTO {
 
     private static final long serialVersionUID = -2143537546915809018L;
 
-    private String userFilter;
+    private final Map<String, String> filters = new HashMap<>();
 
-    private String groupFilter;
-
-    public String getUserFilter() {
-        return userFilter;
-    }
-
-    public void setUserFilter(final String filter) {
-        this.userFilter = filter;
+    public Map<String, String> getFilters() {
+        return filters;
     }
 
-    public String getGroupFilter() {
-        return groupFilter;
-    }
-
-    public void setGroupFilter(final String filter) {
-        this.groupFilter = filter;
-    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java
new file mode 100644
index 0000000..2585b2b
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+
+@XmlRootElement(name = "relationship")
+@XmlType
+public class RelationshipTO extends AbstractBaseBean {
+
+    private static final long serialVersionUID = 360672942026613929L;
+
+    private long key;
+
+    private String leftType;
+
+    private long leftKey;
+
+    private String rightType;
+
+    private long rightKey;
+
+    public long getKey() {
+        return key;
+    }
+
+    public void setKey(final long key) {
+        this.key = key;
+    }
+
+    public String getLeftType() {
+        return leftType;
+    }
+
+    public void setLeftType(final String leftType) {
+        this.leftType = leftType;
+    }
+
+    public long getLeftKey() {
+        return leftKey;
+    }
+
+    public void setLeftKey(final long leftKey) {
+        this.leftKey = leftKey;
+    }
+
+    public String getRightType() {
+        return rightType;
+    }
+
+    public void setRightType(final String rightType) {
+        this.rightType = rightType;
+    }
+
+    public long getRightKey() {
+        return rightKey;
+    }
+
+    public void setRightKey(final long rightKey) {
+        this.rightKey = rightKey;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
index 43f5ff0..fb97113 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.common.lib.to;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -27,6 +28,8 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.PropagationMode;
 import org.apache.syncope.common.lib.types.TraceLevel;
@@ -52,9 +55,7 @@ public class ResourceTO extends AbstractAnnotatedBean {
      */
     private String connectorDisplayName;
 
-    private MappingTO umapping;
-
-    private MappingTO gmapping;
+    private final List<ProvisionTO> provisions = new ArrayList<>();
 
     private boolean propagationPrimary;
 
@@ -132,22 +133,6 @@ public class ResourceTO extends AbstractAnnotatedBean {
         this.connectorDisplayName = connectorDisplayName;
     }
 
-    public MappingTO getUmapping() {
-        return umapping;
-    }
-
-    public void setUmapping(final MappingTO umapping) {
-        this.umapping = umapping;
-    }
-
-    public MappingTO getGmapping() {
-        return gmapping;
-    }
-
-    public void setGmapping(final MappingTO gmapping) {
-        this.gmapping = gmapping;
-    }
-
     public boolean isPropagationPrimary() {
         return propagationPrimary;
     }
@@ -228,6 +213,24 @@ public class ResourceTO extends AbstractAnnotatedBean {
         this.syncPolicy = syncPolicy;
     }
 
+    @JsonIgnore
+    public ProvisionTO getProvision(final String anyType) {
+        return CollectionUtils.find(provisions, new Predicate<ProvisionTO>() {
+
+            @Override
+            public boolean evaluate(final ProvisionTO provisionTO) {
+                return anyType != null && anyType.equals(provisionTO.getAnyType());
+            }
+        });
+    }
+
+    @XmlElementWrapper(name = "provisions")
+    @XmlElement(name = "provision")
+    @JsonProperty("provisions")
+    public List<ProvisionTO> getProvisions() {
+        return provisions;
+    }
+
     @XmlElementWrapper(name = "connConfProperties")
     @XmlElement(name = "property")
     @JsonProperty("connConfProperties")
@@ -243,22 +246,6 @@ public class ResourceTO extends AbstractAnnotatedBean {
         this.syncTraceLevel = syncTraceLevel;
     }
 
-    public String getUsyncToken() {
-        return usyncToken;
-    }
-
-    public void setUsyncToken(final String syncToken) {
-        this.usyncToken = syncToken;
-    }
-
-    public String getRsyncToken() {
-        return rsyncToken;
-    }
-
-    public void setRsyncToken(final String syncToken) {
-        this.rsyncToken = syncToken;
-    }
-
     @XmlElementWrapper(name = "propagationActionsClassNames")
     @XmlElement(name = "propagationActionsClassName")
     @JsonProperty("propagationActionsClassNames")

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java
index e62ffe4..4974505 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java
@@ -18,6 +18,8 @@
  */
 package org.apache.syncope.common.lib.to;
 
+import java.util.HashMap;
+import java.util.Map;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
@@ -29,9 +31,7 @@ public class SyncTaskTO extends AbstractProvisioningTaskTO {
 
     private String destinationRealm;
 
-    private UserTO userTemplate;
-
-    private GroupTO groupTemplate;
+    private final Map<String, AnyTO> templates = new HashMap<>();
 
     private boolean fullReconciliation;
 
@@ -43,20 +43,8 @@ public class SyncTaskTO extends AbstractProvisioningTaskTO {
         this.destinationRealm = destinationRealm;
     }
 
-    public UserTO getUserTemplate() {
-        return userTemplate;
-    }
-
-    public void setUserTemplate(final UserTO userTemplate) {
-        this.userTemplate = userTemplate;
-    }
-
-    public GroupTO getGroupTemplate() {
-        return groupTemplate;
-    }
-
-    public void setGroupTemplate(final GroupTO groupTemplate) {
-        this.groupTemplate = groupTemplate;
+    public Map<String, AnyTO> getTemplates() {
+        return templates;
     }
 
     public boolean isFullReconciliation() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncopeTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncopeTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncopeTO.java
index 03dda04..243a79f 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncopeTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncopeTO.java
@@ -43,12 +43,16 @@ public class SyncopeTO extends AbstractBaseBean {
 
     private final List<String> connIdLocations = new ArrayList<>();
 
-    private String attributableTransformer;
+    private String anyTransformer;
+
+    private String anyObjectWorkflowAdapter;
 
     private String userWorkflowAdapter;
 
     private String groupWorkflowAdapter;
 
+    private String anyObjectProvisioningManager;
+
     private String userProvisioningManager;
 
     private String groupProvisioningManager;
@@ -96,8 +100,12 @@ public class SyncopeTO extends AbstractBaseBean {
         return connIdLocations;
     }
 
-    public String getAttributableTransformer() {
-        return attributableTransformer;
+    public String getAnyTransformer() {
+        return anyTransformer;
+    }
+
+    public String getAnyObjectWorkflowAdapter() {
+        return anyObjectWorkflowAdapter;
     }
 
     public String getUserWorkflowAdapter() {
@@ -108,6 +116,10 @@ public class SyncopeTO extends AbstractBaseBean {
         return groupWorkflowAdapter;
     }
 
+    public String getAnyObjectProvisioningManager() {
+        return anyObjectProvisioningManager;
+    }
+
     public String getUserProvisioningManager() {
         return userProvisioningManager;
     }
@@ -199,8 +211,12 @@ public class SyncopeTO extends AbstractBaseBean {
         this.pwdResetRequiringSecurityQuestions = pwdResetRequiringSecurityQuestions;
     }
 
-    public void setAttributableTransformer(final String attributableTransformer) {
-        this.attributableTransformer = attributableTransformer;
+    public void setAnyTransformer(final String anyTransformer) {
+        this.anyTransformer = anyTransformer;
+    }
+
+    public void setAnyObjectWorkflowAdapter(final String anyObjectWorkflowAdapter) {
+        this.anyObjectWorkflowAdapter = anyObjectWorkflowAdapter;
     }
 
     public void setUserWorkflowAdapter(final String userWorkflowAdapter) {
@@ -211,6 +227,10 @@ public class SyncopeTO extends AbstractBaseBean {
         this.groupWorkflowAdapter = groupWorkflowAdapter;
     }
 
+    public void setAnyObjectProvisioningManager(final String anyObjectProvisioningManager) {
+        this.anyObjectProvisioningManager = anyObjectProvisioningManager;
+    }
+
     public void setUserProvisioningManager(final String userProvisioningManager) {
         this.userProvisioningManager = userProvisioningManager;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
index 2feeffe..5de7b01 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java
@@ -18,15 +18,11 @@
  */
 package org.apache.syncope.common.lib.to;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -36,7 +32,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 
 @XmlRootElement(name = "user")
 @XmlType
-public class UserTO extends AbstractSubjectTO {
+public class UserTO extends AnyTO {
 
     private static final long serialVersionUID = 7791304495192615740L;
 
@@ -46,12 +42,6 @@ public class UserTO extends AbstractSubjectTO {
 
     private final List<Long> dynRoles = new ArrayList<>();
 
-    private final List<MembershipTO> memberships = new ArrayList<>();
-
-    private final List<Long> dynGroups = new ArrayList<>();
-
-    private String status;
-
     private String token;
 
     private Date tokenExpireTime;
@@ -90,45 +80,6 @@ public class UserTO extends AbstractSubjectTO {
         return dynRoles;
     }
 
-    @XmlElementWrapper(name = "memberships")
-    @XmlElement(name = "membership")
-    @JsonProperty("memberships")
-    public List<MembershipTO> getMemberships() {
-        return memberships;
-    }
-
-    @JsonIgnore
-    public Map<Long, MembershipTO> getMembershipMap() {
-        Map<Long, MembershipTO> result;
-
-        if (getMemberships() == null) {
-            result = Collections.emptyMap();
-        } else {
-            result = new HashMap<>(getMemberships().size());
-            for (MembershipTO membership : getMemberships()) {
-                result.put(membership.getGroupKey(), membership);
-            }
-            result = Collections.unmodifiableMap(result);
-        }
-
-        return result;
-    }
-
-    @XmlElementWrapper(name = "dynGroups")
-    @XmlElement(name = "role")
-    @JsonProperty("dynGroups")
-    public List<Long> getDynGroups() {
-        return dynGroups;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(final String status) {
-        this.status = status;
-    }
-
     public String getToken() {
         return token;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
new file mode 100644
index 0000000..c7b4e47
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.types;
+
+import javax.xml.bind.annotation.XmlEnum;
+
+@XmlEnum
+public enum AnyTypeKind {
+
+    USER,
+    GROUP,
+    ANY_OBJECT;
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/types/AttributableType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AttributableType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AttributableType.java
deleted file mode 100644
index fab34f0..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AttributableType.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.types;
-
-import javax.xml.bind.annotation.XmlEnum;
-
-@XmlEnum
-public enum AttributableType {
-
-    USER,
-    GROUP,
-    MEMBERSHIP,
-    CONFIGURATION;
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java
index a149d6c..81caa77 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java
@@ -80,6 +80,18 @@ public final class Entitlement {
 
     public static final String GROUP_DELETE = "GROUP_DELETE";
 
+    public static final String ANY_OBJECT_SEARCH = "ANY_OBJECT_SEARCH";
+
+    public static final String ANY_OBJECT_LIST = "ANY_OBJECT_LIST";
+
+    public static final String ANY_OBJECT_CREATE = "ANY_OBJECT_CREATE";
+
+    public static final String ANY_OBJECT_READ = "ANY_OBJECT_READ";
+
+    public static final String ANY_OBJECT_UPDATE = "ANY_OBJECT_UPDATE";
+
+    public static final String ANY_OBJECT_DELETE = "ANY_OBJECT_DELETE";
+
     public static final String RESOURCE_LIST = "RESOURCE_LIST";
 
     public static final String RESOURCE_CREATE = "RESOURCE_CREATE";

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/types/EntityViolationType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/EntityViolationType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/EntityViolationType.java
index c02913f..2192bd5 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/EntityViolationType.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/EntityViolationType.java
@@ -27,20 +27,13 @@ public enum EntityViolationType {
     InvalidAccountPolicy("org.apache.syncope.core.persistence.validation.accountpolicy"),
     InvalidConnInstanceLocation("org.apache.syncope.core.persistence.validation.conninstance.location"),
     InvalidConnPoolConf("org.apache.syncope.core.persistence.validation.conninstance.poolConf"),
-    InvalidCPlainSchema("org.apache.syncope.core.persistence.validation.attrvalue.cPlainSchema"),
     InvalidMapping("org.apache.syncope.core.persistence.validation.mapping"),
-    InvalidMPlainSchema("org.apache.syncope.core.persistence.validation.attrvalue.mPlainSchema"),
-    InvalidMDerSchema("org.apache.syncope.core.persistence.validation.attrvalue.mDerSchema"),
-    InvalidMVirSchema("org.apache.syncope.core.persistence.validation.attrvalue.mVirSchema"),
     InvalidName("org.apache.syncope.core.persistence.validation.name"),
     InvalidNotification("org.apache.syncope.core.persistence.validation.notification"),
     InvalidPassword("org.apache.syncope.core.persistence.validation.user.password"),
     InvalidPasswordPolicy("org.apache.syncope.core.persistence.validation.passwordpolicy"),
     InvalidPolicy("org.apache.syncope.core.persistence.validation.policy"),
     InvalidPropagationTask("org.apache.syncope.core.persistence.validation.propagationtask"),
-    InvalidGPlainSchema("org.apache.syncope.core.persistence.validation.attrvalue.gPlainSchema"),
-    InvalidGDerSchema("org.apache.syncope.core.persistence.validation.attrvalue.gDerSchema"),
-    InvalidGVirSchema("org.apache.syncope.core.persistence.validation.attrvalue.gVirSchema"),
     InvalidRealm("org.apache.syncope.core.persistence.validation.realm"),
     InvalidReport("org.apache.syncope.core.persistence.validation.report"),
     InvalidResource("org.apache.syncope.core.persistence.validation.externalresource"),
@@ -51,9 +44,9 @@ public enum EntityViolationType {
     InvalidSchedTask("org.apache.syncope.core.persistence.validation.schedtask"),
     InvalidSyncTask("org.apache.syncope.core.persistence.validation.synctask"),
     InvalidSyncPolicy("org.apache.syncope.core.persistence.validation.syncpolicy"),
-    InvalidUPlainSchema("org.apache.syncope.core.persistence.validation.attrvalue.uPlainSchema"),
-    InvalidUDerSchema("org.apache.syncope.core.persistence.validation.attrvalue.derSchema"),
-    InvalidUVirSchema("org.apache.syncope.core.persistence.validation.attrvalue.uVirSchema"),
+    InvalidPlainSchema("org.apache.syncope.core.persistence.validation.attrvalue.plainSchema"),
+    InvalidDerSchema("org.apache.syncope.core.persistence.validation.attrvalue.derSchema"),
+    InvalidVirSchema("org.apache.syncope.core.persistence.validation.attrvalue.virSchema"),
     InvalidUsername("org.apache.syncope.core.persistence.validation.user.username"),
     InvalidValueList("org.apache.syncope.core.persistence.validation.attr.valueList"),
     MoreThanOneNonNull("org.apache.syncope.core.persistence.validation.attrvalue.moreThanOneNonNull");

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java
index c329d72..1b50f43 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/IntMappingType.java
@@ -35,71 +35,71 @@ public enum IntMappingType {
     // -------------------------
     // User attribute types (the same in UserMappingType)
     // -------------------------
-    UserPlainSchema(AttributableType.USER),
-    UserDerivedSchema(AttributableType.USER),
-    UserVirtualSchema(AttributableType.USER),
-    UserId(AttributableType.USER),
-    Username(AttributableType.USER),
-    Password(AttributableType.USER),
+    UserPlainSchema(AnyTypeKind.USER),
+    UserDerivedSchema(AnyTypeKind.USER),
+    UserVirtualSchema(AnyTypeKind.USER),
+    UserId(AnyTypeKind.USER),
+    Username(AnyTypeKind.USER),
+    Password(AnyTypeKind.USER),
     // -------------------------
     // Group attribute types (the same in GroupMappingType)
     // -------------------------
-    GroupPlainSchema(AttributableType.GROUP),
-    GroupDerivedSchema(AttributableType.GROUP),
-    GroupVirtualSchema(AttributableType.GROUP),
-    GroupId(AttributableType.GROUP),
-    GroupName(AttributableType.GROUP),
-    GroupOwnerSchema(AttributableType.GROUP),
+    GroupPlainSchema(AnyTypeKind.GROUP),
+    GroupDerivedSchema(AnyTypeKind.GROUP),
+    GroupVirtualSchema(AnyTypeKind.GROUP),
+    GroupId(AnyTypeKind.GROUP),
+    GroupName(AnyTypeKind.GROUP),
+    GroupOwnerSchema(AnyTypeKind.GROUP),
     // -------------------------
-    // Membership attribute types (the same in MembershipMappingType)
+    // Any attribute types (the same in AnyMappingType)
     // -------------------------
-    MembershipPlainSchema(AttributableType.MEMBERSHIP),
-    MembershipDerivedSchema(AttributableType.MEMBERSHIP),
-    MembershipVirtualSchema(AttributableType.MEMBERSHIP),
-    MembershipId(AttributableType.MEMBERSHIP);
+    AnyPlainSchema(AnyTypeKind.ANY_OBJECT),
+    AnyDerivedSchema(AnyTypeKind.ANY_OBJECT),
+    AnyVirtualSchema(AnyTypeKind.ANY_OBJECT),
+    AnyId(AnyTypeKind.ANY_OBJECT);
 
-    private final AttributableType attributableType;
+    private final AnyTypeKind anyTypeKind;
 
-    private IntMappingType(final AttributableType attributableType) {
-        this.attributableType = attributableType;
+    private IntMappingType(final AnyTypeKind anyTypeKind) {
+        this.anyTypeKind = anyTypeKind;
     }
 
-    public AttributableType getAttributableType() {
-        return attributableType;
+    public AnyTypeKind getAnyTypeKind() {
+        return anyTypeKind;
     }
 
     /**
-     * Get attribute types for a certain attributable type.
+     * Get attribute types for a certain any object type.
      *
-     * @param attributableType attributable type
+     * @param anyTypeKind any object type
      * @param toBeFiltered types to be filtered from the result.
      * @return set of attribute types.
      */
     public static Set<IntMappingType> getAttributeTypes(
-            final AttributableType attributableType, final Collection<IntMappingType> toBeFiltered) {
+            final AnyTypeKind anyTypeKind, final Collection<IntMappingType> toBeFiltered) {
 
-        final Set<IntMappingType> res = getAttributeTypes(attributableType);
+        final Set<IntMappingType> res = getAttributeTypes(anyTypeKind);
         res.removeAll(toBeFiltered);
 
         return res;
     }
 
     /**
-     * Get attribute types for a certain attributable type.
+     * Get attribute types for a certain any object type.
      *
-     * @param attributableType attributable type
+     * @param anyTypeKind any object type
      * @return set of attribute types.
      */
-    public static Set<IntMappingType> getAttributeTypes(final AttributableType attributableType) {
+    public static Set<IntMappingType> getAttributeTypes(final AnyTypeKind anyTypeKind) {
         EnumSet<?> enumset;
 
-        switch (attributableType) {
+        switch (anyTypeKind) {
             case GROUP:
                 enumset = EnumSet.allOf(GroupMappingType.class);
                 break;
 
-            case MEMBERSHIP:
-                enumset = EnumSet.allOf(MembershipMappingType.class);
+            case ANY_OBJECT:
+                enumset = EnumSet.allOf(AnyMappingType.class);
                 break;
 
             case USER:
@@ -119,18 +119,18 @@ public enum IntMappingType {
     public static Set<IntMappingType> getEmbedded() {
         return EnumSet.of(IntMappingType.UserId, IntMappingType.Username, IntMappingType.Password,
                 IntMappingType.GroupId, IntMappingType.GroupName, IntMappingType.GroupOwnerSchema,
-                IntMappingType.MembershipId);
+                IntMappingType.AnyId);
     }
 
     /**
-     * Check if attribute type belongs to the specified attributable type set.
+     * Check if attribute type belongs to the specified any object type set.
      *
-     * @param attributableType attributable type.
+     * @param anyTypeKind any object type.
      * @param type attribute type.
-     * @return true if attribute type belongs to the specified attributable type set.
+     * @return true if attribute type belongs to the specified any object type set.
      */
-    public static boolean contains(final AttributableType attributableType, final String type) {
-        switch (attributableType) {
+    public static boolean contains(final AnyTypeKind anyTypeKind, final String type) {
+        switch (anyTypeKind) {
             case GROUP:
                 for (GroupMappingType c : GroupMappingType.values()) {
                     if (c.name().equals(type)) {
@@ -139,8 +139,8 @@ public enum IntMappingType {
                 }
                 break;
 
-            case MEMBERSHIP:
-                for (MembershipMappingType c : MembershipMappingType.values()) {
+            case ANY_OBJECT:
+                for (AnyMappingType c : AnyMappingType.values()) {
                     if (c.name().equals(type)) {
                         return true;
                     }
@@ -188,14 +188,14 @@ public enum IntMappingType {
     }
 
     /**
-     * Membership attribute types.
+     * Any attribute types.
      */
-    private enum MembershipMappingType {
+    private enum AnyMappingType {
 
-        MembershipPlainSchema,
-        MembershipDerivedSchema,
-        MembershipVirtualSchema,
-        MembershipId;
+        AnyPlainSchema,
+        AnyDerivedSchema,
+        AnyVirtualSchema,
+        AnyId;
 
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/types/SubjectType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SubjectType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/SubjectType.java
deleted file mode 100644
index 538f19a..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SubjectType.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.types;
-
-import javax.xml.bind.annotation.XmlEnum;
-
-@XmlEnum
-public enum SubjectType {
-
-    USER,
-    GROUP;
-
-    public AttributableType asAttributableType() {
-        return this == USER
-                ? AttributableType.USER
-                : AttributableType.GROUP;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java
index a904209..34f95dd 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpec.java
@@ -24,31 +24,15 @@ import java.util.List;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlType;
-import org.apache.syncope.common.lib.annotation.ClassList;
-import org.apache.syncope.common.lib.annotation.SchemaList;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
 
 @XmlType
 public class SyncPolicySpec implements PolicySpec {
 
     private static final long serialVersionUID = -3144027171719498127L;
 
-    /**
-     * User attributes and fields for matching during synchronization.
-     */
-    @SchemaList(extended = true)
-    private final List<String> uAltSearchSchemas = new ArrayList<>();
-
-    @ClassList
-    private String userJavaRule;
-
-    /**
-     * Group attributes and fields for matching during synchronization.
-     */
-    @SchemaList(extended = true)
-    private final List<String> gAltSearchSchemas = new ArrayList<>();
-
-    @ClassList
-    private String groupJavaRule;
+    private final List<SyncPolicySpecItem> items = new ArrayList<>();
 
     /**
      * Conflict resolution action.
@@ -65,33 +49,20 @@ public class SyncPolicySpec implements PolicySpec {
         this.conflictResolutionAction = conflictResolutionAction;
     }
 
-    @XmlElementWrapper(name = "userAltSearchSchemas")
-    @XmlElement(name = "userAltSearchSchema")
-    @JsonProperty("userAltSearchSchemas")
-    public List<String> getuAltSearchSchemas() {
-        return uAltSearchSchemas;
-    }
-
-    @XmlElementWrapper(name = "groupAltSearchSchemas")
-    @XmlElement(name = "groupAltSearchSchema")
-    @JsonProperty("groupAltSearchSchemas")
-    public List<String> getrAltSearchSchemas() {
-        return gAltSearchSchemas;
-    }
-
-    public String getGroupJavaRule() {
-        return groupJavaRule;
-    }
-
-    public void setGroupJavaRule(final String groupJavaRule) {
-        this.groupJavaRule = groupJavaRule;
-    }
+    public SyncPolicySpecItem getItem(final String anyTypeKey) {
+        return CollectionUtils.find(items, new Predicate<SyncPolicySpecItem>() {
 
-    public String getUserJavaRule() {
-        return userJavaRule;
+            @Override
+            public boolean evaluate(final SyncPolicySpecItem item) {
+                return anyTypeKey != null && anyTypeKey.equals(item.getAnyTypeKey());
+            }
+        });
     }
 
-    public void setUserJavaRule(final String userJavaRule) {
-        this.userJavaRule = userJavaRule;
+    @XmlElementWrapper(name = "items")
+    @XmlElement(name = "item")
+    @JsonProperty("items")
+    public List<SyncPolicySpecItem> getItems() {
+        return items;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpecItem.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpecItem.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpecItem.java
new file mode 100644
index 0000000..4acb61b
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/SyncPolicySpecItem.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.types;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlType;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+import org.apache.syncope.common.lib.annotation.ClassList;
+import org.apache.syncope.common.lib.annotation.SchemaList;
+
+@XmlType
+public class SyncPolicySpecItem extends AbstractBaseBean {
+
+    private static final long serialVersionUID = 692466729711976485L;
+
+    private String anyTypeKey;
+
+    @SchemaList(extended = true)
+    private final List<String> altSearchSchemas = new ArrayList<>();
+
+    @ClassList
+    private String javaRule;
+
+    public String getAnyTypeKey() {
+        return anyTypeKey;
+    }
+
+    public void setAnyTypeKey(final String anyTypeKey) {
+        this.anyTypeKey = anyTypeKey;
+    }
+
+    public String getJavaRule() {
+        return javaRule;
+    }
+
+    public void setJavaRule(final String javaRule) {
+        this.javaRule = javaRule;
+    }
+
+    @XmlElementWrapper(name = "altSearchSchemas")
+    @XmlElement(name = "altSearchSchema")
+    @JsonProperty("altSearchSchemas")
+    public List<String> getAltSearchSchemas() {
+        return altSearchSchemas;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AnyKey.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AnyKey.java b/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AnyKey.java
new file mode 100644
index 0000000..6db8870
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/AnyKey.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.wrap;
+
+public class AnyKey extends AbstractWrappable<Long> {
+
+    private static final long serialVersionUID = -8664228651057889297L;
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectKey.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectKey.java b/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectKey.java
deleted file mode 100644
index 930cf35..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectKey.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.wrap;
-
-public class SubjectKey extends AbstractWrappable<Long> {
-
-    private static final long serialVersionUID = -8664228651057889297L;
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyListQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyListQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyListQuery.java
new file mode 100644
index 0000000..e4fdf04
--- /dev/null
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnyListQuery.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.rest.api.beans;
+
+import java.util.List;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.MatrixParam;
+import org.apache.syncope.common.lib.SyncopeConstants;
+
+public class AnyListQuery extends ListQuery {
+
+    private static final long serialVersionUID = -5197167078435619636L;
+
+    private List<String> realms;
+
+    public List<String> getRealms() {
+        return realms;
+    }
+
+    @DefaultValue(SyncopeConstants.ROOT_REALM)
+    @MatrixParam("realm")
+    public void setRealms(final List<String> realms) {
+        this.realms = realms;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnySearchQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnySearchQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnySearchQuery.java
new file mode 100644
index 0000000..3e0a516
--- /dev/null
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AnySearchQuery.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.rest.api.beans;
+
+import javax.ws.rs.QueryParam;
+import org.apache.syncope.common.rest.api.service.JAXRSService;
+
+public class AnySearchQuery extends AnyListQuery {
+
+    private static final long serialVersionUID = -6736562952418964707L;
+
+    private String fiql;
+
+    public String getFiql() {
+        return fiql;
+    }
+
+    @QueryParam(JAXRSService.PARAM_FIQL)
+    public void setFiql(final String fiql) {
+        this.fiql = fiql;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SubjectListQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SubjectListQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SubjectListQuery.java
deleted file mode 100644
index 47ff005..0000000
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SubjectListQuery.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.rest.api.beans;
-
-import java.util.List;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.MatrixParam;
-import org.apache.syncope.common.lib.SyncopeConstants;
-
-public class SubjectListQuery extends ListQuery {
-
-    private static final long serialVersionUID = -5197167078435619636L;
-
-    private List<String> realms;
-
-    public List<String> getRealms() {
-        return realms;
-    }
-
-    @DefaultValue(SyncopeConstants.ROOT_REALM)
-    @MatrixParam("realm")
-    public void setRealms(final List<String> realms) {
-        this.realms = realms;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SubjectSearchQuery.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SubjectSearchQuery.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SubjectSearchQuery.java
deleted file mode 100644
index d7f7344..0000000
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SubjectSearchQuery.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.rest.api.beans;
-
-import javax.ws.rs.QueryParam;
-import org.apache.syncope.common.rest.api.service.JAXRSService;
-
-public class SubjectSearchQuery extends SubjectListQuery {
-
-    private static final long serialVersionUID = -6736562952418964707L;
-
-    private String fiql;
-
-    public String getFiql() {
-        return fiql;
-    }
-
-    @QueryParam(JAXRSService.PARAM_FIQL)
-    public void setFiql(final String fiql) {
-        this.fiql = fiql;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/GroupService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/GroupService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/GroupService.java
index b612a6e..635be02 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/GroupService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/GroupService.java
@@ -41,8 +41,8 @@ import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.types.ResourceAssociationActionType;
 import org.apache.syncope.common.lib.types.ResourceDeassociationActionType;
 import org.apache.syncope.common.lib.wrap.ResourceName;
-import org.apache.syncope.common.rest.api.beans.SubjectListQuery;
-import org.apache.syncope.common.rest.api.beans.SubjectSearchQuery;
+import org.apache.syncope.common.rest.api.beans.AnyListQuery;
+import org.apache.syncope.common.rest.api.beans.AnySearchQuery;
 
 /**
  * REST operations for groups.
@@ -85,7 +85,7 @@ public interface GroupService extends JAXRSService {
      */
     @GET
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    PagedResult<GroupTO> list(@BeanParam SubjectListQuery listQuery);
+    PagedResult<GroupTO> list(@BeanParam AnyListQuery listQuery);
 
     /**
      * Returns a paged list of groups matching the given query.
@@ -96,7 +96,7 @@ public interface GroupService extends JAXRSService {
     @GET
     @Path("search")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    PagedResult<GroupTO> search(@BeanParam SubjectSearchQuery searchQuery);
+    PagedResult<GroupTO> search(@BeanParam AnySearchQuery searchQuery);
 
     /**
      * Creates a new group.

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
index 06b6b32..48ba21a 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
@@ -38,8 +38,7 @@ import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.ResourceDeassociationActionType;
-import org.apache.syncope.common.lib.types.SubjectType;
-import org.apache.syncope.common.lib.wrap.SubjectKey;
+import org.apache.syncope.common.lib.wrap.AnyKey;
 
 /**
  * REST operations for external resources.
@@ -51,15 +50,15 @@ public interface ResourceService extends JAXRSService {
      * Returns connector object from the external resource, for the given type and key.
      *
      * @param resourceKey Name of resource to read connector object from
-     * @param type user /group
-     * @param key user key / group key
+     * @param anyTypeKey any object type
+     * @param key any object key
      * @return connector object from the external resource, for the given type and key
      */
     @GET
-    @Path("{resourceKey}/{type}/{key}")
+    @Path("{resourceKey}/{anyTypeKey}/{key}")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    ConnObjectTO getConnectorObject(@NotNull @PathParam("resourceKey") String resourceKey,
-            @NotNull @PathParam("type") SubjectType type, @NotNull @PathParam("key") Long key);
+    ConnObjectTO readConnObject(@NotNull @PathParam("resourceKey") String resourceKey,
+            @NotNull @PathParam("anyTypeKey") String anyTypeKey, @NotNull @PathParam("key") Long key);
 
     /**
      * Returns the resource with matching name.
@@ -117,7 +116,7 @@ public interface ResourceService extends JAXRSService {
     void delete(@NotNull @PathParam("resourceKey") String resourceKey);
 
     /**
-     * Checks wether the connection to resource could be established.
+     * Checks whether the connection to resource could be established.
      *
      * @param resourceTO resource to be checked
      * @return true if connection to resource could be established
@@ -128,12 +127,12 @@ public interface ResourceService extends JAXRSService {
     boolean check(@NotNull ResourceTO resourceTO);
 
     /**
-     * De-associate users or groups (depending on the provided subject type) from the given resource.
+     * De-associate any objects from the given resource.
      *
      * @param resourceKey name of resource
-     * @param subjectType subject type (user or group)
+     * @param anyTypeKey any object kind
      * @param type resource de-association action type
-     * @param subjectKeys users or groups against which the bulk action will be performed
+     * @param keys any object keys against which the bulk action will be performed
      * @return <tt>Response</tt> object featuring {@link BulkActionResult} as <tt>Entity</tt>
      */
     @Descriptions({
@@ -141,12 +140,12 @@ public interface ResourceService extends JAXRSService {
                 value = "Featuring <tt>BulkActionResult</tt> as <tt>Entity</tt>")
     })
     @POST
-    @Path("{resourceKey}/bulkDeassociation/{subjType}/{type}")
+    @Path("{resourceKey}/bulkDeassociation/{anyTypeKey}/{type}")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
     BulkActionResult bulkDeassociation(@NotNull @PathParam("resourceKey") String resourceKey,
-            @NotNull @PathParam("subjType") SubjectType subjectType,
-            @NotNull @PathParam("type") ResourceDeassociationActionType type, @NotNull List<SubjectKey> subjectKeys);
+            @NotNull @PathParam("anyTypeKey") String anyTypeKey,
+            @NotNull @PathParam("type") ResourceDeassociationActionType type, @NotNull List<AnyKey> keys);
 
     /**
      * Executes the provided bulk action.

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java
index d3f850b..4ffb3f6 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java
@@ -34,7 +34,6 @@ import org.apache.cxf.jaxrs.model.wadl.Description;
 import org.apache.cxf.jaxrs.model.wadl.Descriptions;
 import org.apache.cxf.jaxrs.model.wadl.DocTarget;
 import org.apache.syncope.common.lib.to.AbstractSchemaTO;
-import org.apache.syncope.common.lib.types.AttributableType;
 import org.apache.syncope.common.lib.types.SchemaType;
 
 /**
@@ -47,36 +46,32 @@ public interface SchemaService extends JAXRSService {
      * Returns schema matching the given kind, type and name.
      *
      * @param <T> actual SchemaTO
-     * @param attrType kind for schemas to be read
-     * @param schemaType type for schemas to be read
+     * @param type type for schemas to be read
      * @param schemaKey name of schema to be read
      * @return schema matching the given kind, type and name
      */
     @GET
     @Path("{key}")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    <T extends AbstractSchemaTO> T read(@NotNull @PathParam("kind") AttributableType attrType,
-            @NotNull @PathParam("type") SchemaType schemaType, @NotNull @PathParam("key") String schemaKey);
+    <T extends AbstractSchemaTO> T read(
+            @NotNull @PathParam("type") SchemaType type, @NotNull @PathParam("key") String schemaKey);
 
     /**
      * Returns a list of schemas with matching kind and type.
      *
      * @param <T> actual SchemaTO
-     * @param attrType kind for schemas to be listed
-     * @param schemaType type for schemas to be listed
+     * @param type type for schemas to be listed
      * @return list of schemas with matching kind and type
      */
     @GET
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    <T extends AbstractSchemaTO> List<T> list(
-            @NotNull @PathParam("kind") AttributableType attrType, @NotNull @PathParam("type") SchemaType schemaType);
+    <T extends AbstractSchemaTO> List<T> list(@NotNull @PathParam("type") SchemaType type);
 
     /**
      * Creates a new schema.
      *
      * @param <T> actual SchemaTO
-     * @param attrType kind for schema to be created
-     * @param schemaType type for schema to be created
+     * @param type type for schema to be created
      * @param schemaTO schema to be created
      * @return <tt>Response</tt> object featuring <tt>Location</tt> header of created schema
      */
@@ -85,35 +80,33 @@ public interface SchemaService extends JAXRSService {
     })
     @POST
     @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    <T extends AbstractSchemaTO> Response create(@NotNull @PathParam("kind") AttributableType attrType,
-            @NotNull @PathParam("type") SchemaType schemaType, @NotNull T schemaTO);
+    <T extends AbstractSchemaTO> Response create(
+            @NotNull @PathParam("type") SchemaType type, @NotNull T schemaTO);
 
     /**
      * Updates the schema matching the given kind, type and name.
      *
      * @param <T> actual SchemaTO
-     * @param attrType kind for schemas to be updated
-     * @param schemaType type for schemas to be updated
+     * @param type type for schemas to be updated
      * @param schemaKey name of schema to be updated
      * @param schemaTO updated schema to be stored
      */
     @PUT
     @Path("{key}")
     @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    <T extends AbstractSchemaTO> void update(@NotNull @PathParam("kind") AttributableType attrType,
-            @NotNull @PathParam("type") SchemaType schemaType,
+    <T extends AbstractSchemaTO> void update(
+            @NotNull @PathParam("type") SchemaType type,
             @NotNull @PathParam("key") String schemaKey, @NotNull T schemaTO);
 
     /**
      * Deletes the schema matching the given kind, type and name.
      *
-     * @param attrType kind for schema to be deleted
-     * @param schemaType type for schema to be deleted
+     * @param type type for schema to be deleted
      * @param schemaKey name of schema to be deleted
      */
     @DELETE
     @Path("{key}")
-    void delete(@NotNull @PathParam("kind") AttributableType attrType,
-            @NotNull @PathParam("type") SchemaType schemaType,
+    void delete(
+            @NotNull @PathParam("type") SchemaType type,
             @NotNull @PathParam("key") String schemaKey);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java
index 8c13935..9e280a5 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java
@@ -46,8 +46,8 @@ import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.ResourceAssociationActionType;
 import org.apache.syncope.common.lib.types.ResourceDeassociationActionType;
 import org.apache.syncope.common.lib.wrap.ResourceName;
-import org.apache.syncope.common.rest.api.beans.SubjectListQuery;
-import org.apache.syncope.common.rest.api.beans.SubjectSearchQuery;
+import org.apache.syncope.common.rest.api.beans.AnyListQuery;
+import org.apache.syncope.common.rest.api.beans.AnySearchQuery;
 
 /**
  * REST operations for users.
@@ -102,7 +102,7 @@ public interface UserService extends JAXRSService {
      */
     @GET
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    PagedResult<UserTO> list(@BeanParam SubjectListQuery listQuery);
+    PagedResult<UserTO> list(@BeanParam AnyListQuery listQuery);
 
     /**
      * Returns a paged list of users matching the given query.
@@ -113,7 +113,7 @@ public interface UserService extends JAXRSService {
     @GET
     @Path("search")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    PagedResult<UserTO> search(@BeanParam SubjectSearchQuery searchQuery);
+    PagedResult<UserTO> search(@BeanParam AnySearchQuery searchQuery);
 
     /**
      * Creates a new user.