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 2016/05/12 15:46:19 UTC

syncope git commit: [SYNCOPE-848] Refactoring completed

Repository: syncope
Updated Branches:
  refs/heads/master 67fe7075b -> 951a64a7a


[SYNCOPE-848] Refactoring completed


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/951a64a7
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/951a64a7
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/951a64a7

Branch: refs/heads/master
Commit: 951a64a7aa83c92ed619a3b306ddf92d0968a468
Parents: 67fe707
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Thu May 12 17:46:11 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Thu May 12 17:46:11 2016 +0200

----------------------------------------------------------------------
 .../client/console/panels/SchemaTypePanel.java  |  11 +-
 .../client/console/panels/VirSchemaDetails.java | 111 ++++++++++++-------
 .../client/console/rest/SchemaRestClient.java   |  45 --------
 .../META-INF/resources/css/syncopeConsole.css   |   4 +-
 .../console/panels/SchemasPanel.properties      |   3 +-
 .../console/panels/SchemasPanel_it.properties   |   3 +-
 .../panels/SchemasPanel_pt_BR.properties        |   3 +-
 .../console/panels/SchemasPanel_ru.properties   |  29 ++---
 .../client/console/panels/VirSchemaDetails.html |   2 +-
 .../console/panels/VirSchemaDetails.properties  |   2 +-
 .../panels/VirSchemaDetails_it.properties       |   2 +-
 .../panels/VirSchemaDetails_pt_BR.properties    |   2 +-
 .../panels/VirSchemaDetails_ru.properties       |  11 +-
 .../syncope/common/lib/to/VirSchemaTO.java      |  10 +-
 .../api/dao/ExternalResourceDAO.java            |   2 -
 .../jpa/dao/JPAExternalResourceDAO.java         |   5 -
 .../persistence/jpa/outer/VirSchemaTest.java    |   9 +-
 .../java/data/SchemaDataBinderImpl.java         |  25 ++++-
 .../apache/syncope/fit/core/VirAttrITCase.java  |  12 +-
 .../syncope/fit/core/VirSchemaITCase.java       |   8 +-
 20 files changed, 154 insertions(+), 145 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
index 21a85b6..9bcff62 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
@@ -70,10 +70,12 @@ public class SchemaTypePanel extends TypesDirectoryPanel<AbstractSchemaTO, Schem
         private static final long serialVersionUID = 3109256773218160485L;
 
         {
-            put(SchemaType.PLAIN, Arrays.asList(new String[] { "key", "type",
-                "mandatoryCondition", "uniqueConstraint", "multivalue", "readonly" }));
-            put(SchemaType.DERIVED, Arrays.asList(new String[] { "key", "expression" }));
-            put(SchemaType.VIRTUAL, Arrays.asList(new String[] { "key", "provision", "extAttrName", "readonly" }));
+            put(SchemaType.PLAIN, Arrays.asList(new String[] {
+                "key", "type", "mandatoryCondition", "uniqueConstraint", "multivalue", "readonly" }));
+            put(SchemaType.DERIVED, Arrays.asList(new String[] {
+                "key", "expression" }));
+            put(SchemaType.VIRTUAL, Arrays.asList(new String[] {
+                "key", "resource", "anyType", "extAttrName", "readonly" }));
         }
     };
 
@@ -96,6 +98,7 @@ public class SchemaTypePanel extends TypesDirectoryPanel<AbstractSchemaTO, Schem
                 @Override
                 public WizardModalPanel<AbstractSchemaTO> build(
                         final String id, final int index, final AjaxWizard.Mode mode) {
+
                     final AbstractSchemaTO modelObject = newModelObject();
                     return new SchemaModalPanel(modal, modelObject, pageRef) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
index d0124c5..b0a3412 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
@@ -19,10 +19,16 @@
 package org.apache.syncope.client.console.panels;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.console.rest.ResourceRestClient;
 import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
@@ -30,11 +36,13 @@ import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownCho
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.to.AbstractSchemaTO;
+import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
+import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.ProvisionTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.model.PropertyModel;
 
 public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
@@ -43,16 +51,21 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
 
     private final ResourceRestClient resourceRestClient = new ResourceRestClient();
 
-    private Map<String, String> anys = new HashMap<>();
+    private final ConnectorRestClient connRestClient = new ConnectorRestClient();
 
-    private final AjaxDropDownChoicePanel<String> provision;
+    private final Map<String, String> anyTypes = new HashMap<>();
+
+    private final AjaxDropDownChoicePanel<String> anyType;
+
+    private ResourceTO selectedResource;
 
     public VirSchemaDetails(final String id,
             final PageReference pageReference,
             final AbstractSchemaTO schemaTO) {
+
         super(id, pageReference, schemaTO);
 
-        final AjaxCheckBoxPanel readonly = new AjaxCheckBoxPanel("readonly", getString("readonly"),
+        AjaxCheckBoxPanel readonly = new AjaxCheckBoxPanel("readonly", getString("readonly"),
                 new PropertyModel<Boolean>(schemaTO, "readonly"));
         schemaForm.add(readonly);
 
@@ -60,26 +73,28 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
                 "resource", getString("resource"), new PropertyModel<String>(schemaTO, "resource"));
         resource.setChoices(CollectionUtils.collect(resourceRestClient.list(),
                 EntityTOUtils.<ResourceTO>keyTransformer(), new ArrayList<String>()));
-
         resource.setOutputMarkupId(true);
         resource.addRequiredLabel();
+        if (resource.getModelObject() != null) {
+            populateAnyTypes(resource.getModelObject());
+        }
         schemaForm.add(resource);
 
-        provision = new AjaxDropDownChoicePanel<>(
-                "provision", getString("provision"), new PropertyModel<String>(schemaTO, "provision"));
-
-        provision.setChoices(new ArrayList<>(anys.keySet()));
-        provision.setChoiceRenderer(new AnyTypeRenderer());
-        provision.setOutputMarkupId(true);
-        provision.setOutputMarkupPlaceholderTag(true);
-        provision.addRequiredLabel();
-        provision.setVisible(false);
-
-        schemaForm.add(provision);
+        anyType = new AjaxDropDownChoicePanel<>(
+                "anyType", getString("anyType"), new PropertyModel<String>(schemaTO, "anyType"));
+        anyType.setChoices(new ArrayList<>(anyTypes.keySet()));
+        anyType.setOutputMarkupId(true);
+        anyType.setOutputMarkupPlaceholderTag(true);
+        anyType.addRequiredLabel();
+        schemaForm.add(anyType);
 
         final AjaxTextFieldPanel extAttrName = new AjaxTextFieldPanel(
                 "extAttrName", getString("extAttrName"), new PropertyModel<String>(schemaTO, "extAttrName"));
+        extAttrName.setOutputMarkupId(true);
         extAttrName.addRequiredLabel();
+        if (selectedResource != null) {
+            extAttrName.setChoices(getExtAttrNames());
+        }
         schemaForm.add(extAttrName);
 
         add(schemaForm);
@@ -90,36 +105,56 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
 
             @Override
             protected void onUpdate(final AjaxRequestTarget target) {
-                anys.clear();
-                if (resource != null & resource.getModelObject() != null) {
-                    for (ProvisionTO provisionTO : resourceRestClient.read(resource.getModelObject()).getProvisions()) {
-                        anys.put(provisionTO.getKey(), provisionTO.getAnyType());
-                    }
+                anyTypes.clear();
+                if (resource.getModelObject() != null) {
+                    populateAnyTypes(resource.getModelObject());
                 }
-                provision.setChoices(new ArrayList<>(anys.keySet()));
-                provision.setModelObject(null);
-                provision.setVisible(true);
-                target.add(provision);
+                anyType.setChoices(new ArrayList<>(anyTypes.keySet()));
+                anyType.setModelObject(null);
+                target.add(anyType);
             }
         });
-    }
 
-    private class AnyTypeRenderer extends ChoiceRenderer<String> {
+        anyType.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
-        private static final long serialVersionUID = 2840364232128308553L;
+            private static final long serialVersionUID = -1107858522700306810L;
 
-        AnyTypeRenderer() {
-            super();
-        }
+            @Override
+            protected void onUpdate(final AjaxRequestTarget target) {
+                if (selectedResource != null && SyncopeConsoleSession.get().owns(StandardEntitlement.CONNECTOR_READ)) {
+                    extAttrName.setChoices(getExtAttrNames());
+                    target.add(extAttrName);
+                }
+            }
+        });
+    }
 
-        @Override
-        public Object getDisplayValue(final String object) {
-            return anys.get(object);
+    private void populateAnyTypes(final String resourceKey) {
+        anyTypes.clear();
+        if (resourceKey != null && SyncopeConsoleSession.get().owns(StandardEntitlement.RESOURCE_READ)) {
+            selectedResource = resourceRestClient.read(resourceKey);
+            for (ProvisionTO provisionTO : selectedResource.getProvisions()) {
+                anyTypes.put(provisionTO.getAnyType(), provisionTO.getObjectClass());
+            }
         }
+    }
 
-        @Override
-        public String getIdValue(final String object, final int index) {
-            return String.valueOf(object != null ? object : 0L);
-        }
+    private List<String> getExtAttrNames() {
+        ConnInstanceTO connInstanceTO = new ConnInstanceTO();
+        connInstanceTO.setKey(selectedResource.getConnector());
+        connInstanceTO.getConf().addAll(selectedResource.getConfOverride());
+
+        ConnIdObjectClassTO connIdObjectClass = IterableUtils.find(
+                connRestClient.buildObjectClassInfo(connInstanceTO, false), new Predicate<ConnIdObjectClassTO>() {
+
+            @Override
+            public boolean evaluate(final ConnIdObjectClassTO object) {
+                return object.getType().equals(anyTypes.get(anyType.getModelObject()));
+            }
+        });
+
+        return connIdObjectClass == null
+                ? Collections.<String>emptyList()
+                : connIdObjectClass.getAttributes();
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
index 355b974..a6ad2eb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
@@ -122,63 +122,18 @@ public class SchemaRestClient extends BaseRestClient {
         return getSchemaNames(SchemaType.VIRTUAL);
     }
 
-    public void createPlainSchema(final PlainSchemaTO schemaTO) {
-        getService(SchemaService.class).create(SchemaType.PLAIN, schemaTO);
-    }
-
-    public PlainSchemaTO readPlainSchema(final String name) {
-        PlainSchemaTO schema = null;
-
-        try {
-            schema = getService(SchemaService.class).read(SchemaType.PLAIN, name);
-        } catch (SyncopeClientException e) {
-            LOG.error("While reading a user schema", e);
-        }
-        return schema;
-    }
-
-    public void updatePlainSchema(final PlainSchemaTO schemaTO) {
-        getService(SchemaService.class).update(SchemaType.PLAIN, schemaTO);
-    }
-
     public PlainSchemaTO deletePlainSchema(final String name) {
         PlainSchemaTO response = getService(SchemaService.class).read(SchemaType.PLAIN, name);
         getService(SchemaService.class).delete(SchemaType.PLAIN, name);
         return response;
     }
 
-    public void createDerSchema(final DerSchemaTO schemaTO) {
-        getService(SchemaService.class).create(SchemaType.DERIVED, schemaTO);
-    }
-
-    public DerSchemaTO readDerSchema(final String name) {
-        DerSchemaTO derivedSchemaTO = null;
-        try {
-            derivedSchemaTO = getService(SchemaService.class).read(SchemaType.DERIVED, name);
-        } catch (SyncopeClientException e) {
-            LOG.error("While reading a derived user schema", e);
-        }
-        return derivedSchemaTO;
-    }
-
-    public void updateVirSchema(final VirSchemaTO schemaTO) {
-        getService(SchemaService.class).update(SchemaType.VIRTUAL, schemaTO);
-    }
-
     public DerSchemaTO deleteDerSchema(final String name) {
         DerSchemaTO schemaTO = getService(SchemaService.class).read(SchemaType.DERIVED, name);
         getService(SchemaService.class).delete(SchemaType.DERIVED, name);
         return schemaTO;
     }
 
-    public void createVirSchema(final VirSchemaTO schemaTO) {
-        getService(SchemaService.class).create(SchemaType.VIRTUAL, schemaTO);
-    }
-
-    public void updateDerSchema(final DerSchemaTO schemaTO) {
-        getService(SchemaService.class).update(SchemaType.DERIVED, schemaTO);
-    }
-
     public VirSchemaTO deleteVirSchema(final String name) {
         VirSchemaTO schemaTO = getService(SchemaService.class).read(SchemaType.VIRTUAL, name);
         getService(SchemaService.class).delete(SchemaType.VIRTUAL, name);

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
index 5ab7913..267b425 100644
--- a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
+++ b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
@@ -229,8 +229,8 @@ a.help span a {
 }
 
 .wizard-view {
-  max-height: 500px;
-  height: 500px;
+  max-height: 450px;
+  height: 450px;
   overflow-y: auto;
   overflow-x: hidden;
   padding: 0px 5px 0px 5px;

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel.properties
index 25e0f29..686675a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel.properties
@@ -25,5 +25,6 @@ type=Type
 title=Schema
 readonly=Read-only
 expression=Expression
-provision=Provision
+resource=Resource
 extAttrName=ExtAttrName
+anyType=Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_it.properties
index d859636..52622d0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_it.properties
@@ -25,5 +25,6 @@ title=Schema
 readonly=Read-only
 uniqueConstraint=Univoco
 expression=Express\u00e3o
-provision=Provision
+resource=Resource
 extAttrName=ExtAttrName
+anyType=Tipo

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_pt_BR.properties
index 7fef998..ed0e5fb 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_pt_BR.properties
@@ -25,5 +25,6 @@ type=Tipo
 title=Esquema
 readonly=Apenas leitura
 expression=Espressione
-provision=Provision
+resource=Resource
 extAttrName=ExtAttrName
+anyType=Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_ru.properties
index bd92235..b18d2d2 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SchemasPanel_ru.properties
@@ -15,29 +15,30 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-# any.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 ${key}
+# any.edit=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082 ${key}
 any.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 ${key}
-# any.new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442
+# any.new=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082
 any.new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442
-# mandatoryCondition=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439
+# mandatoryCondition=\u00d0\u009e\u00d0\u00b1\u00d1\u008f\u00d0\u00b7\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b9
 mandatoryCondition=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439
-# enumerationValues=\u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439
+# enumerationValues=\u00d0\u009f\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9
 enumerationValues=\u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439
-# enumerationKeys=\u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0439
+# enumerationKeys=\u00d0\u009f\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bd\u00d0\u00b0\u00d0\u00b8\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9
 enumerationKeys=\u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0439
-# uniqueConstraint=\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439
+# uniqueConstraint=\u00d0\u00a3\u00d0\u00bd\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b9
 uniqueConstraint=\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439
-# multivalue=\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f
+# multivalue=\u00d0\u009c\u00d0\u00bd\u00d0\u00be\u00d0\u00b6\u00d0\u00b5\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d0\u00b5 \u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
 multivalue=\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f
-# type=\u0422\u0438\u043f
+# type=\u00d0\u00a2\u00d0\u00b8\u00d0\u00bf
 type=\u0422\u0438\u043f
-# title=\u0410\u0442\u0440\u0438\u0431\u0443\u0442
+# title=\u00d0\u0090\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082
 title=\u0410\u0442\u0440\u0438\u0431\u0443\u0442
-# readonly=\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435
+# readonly=\u00d0\u00a2\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00ba\u00d0\u00be \u00d1\u0087\u00d1\u0082\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
 readonly=\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435
-# expression=\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435
+# expression=\u00d0\u0092\u00d1\u008b\u00d1\u0080\u00d0\u00b0\u00d0\u00b6\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
 expression=\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435
-# provision=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435
-provision=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435
-# extAttrName=\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
+# provision=\u00d0\u009f\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
+resource=Resource
+# extAttrName=\u00d0\u0092\u00d0\u00bd\u00d0\u00b5\u00d1\u0088\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9 \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082
 extAttrName=\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
+anyType=Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.html
index abdf05b..86d2ed6 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.html
@@ -31,7 +31,7 @@ under the License.
             <span wicket:id="resource">[resource]</span>
           </div>
           <div class="form-group">
-            <span wicket:id="provision">[provision]</span>
+            <span wicket:id="anyType">[anyType]</span>
           </div>
           <div class="form-group">
             <span wicket:id="extAttrName">[extAttrName]</span>

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.properties
index d76fa24..a93c17a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails.properties
@@ -20,5 +20,5 @@ attributes=Virtual attributes
 title=Virtual Schema
 readonly=Read-only
 resource=Resource
-provision=Provision
+anyType=Type
 extAttrName=External attribute

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_it.properties
index 1dc21b0..24de325 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_it.properties
@@ -20,5 +20,5 @@ attributes=Attributi virtuali
 title=Schema Virtuale
 readonly=Read-only
 resource=Risorsa
-provision=Provision
+anyType=Tipo
 extAttrName=Attributo esterno

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_pt_BR.properties
index e47e9e8..c757d89 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_pt_BR.properties
@@ -20,5 +20,5 @@ attributes=Atributos Virtuais
 title=Esquema Virtual
 readonly=Apenas Leitura
 resource=Recurso
-provision=Provision
+anyType=Type
 extAttrName=Atributo Externo

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_ru.properties
index 05ca185..87eb459 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/VirSchemaDetails_ru.properties
@@ -14,20 +14,11 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
-# required_alert=\u0412\u0441\u0435 \u043f\u043e\u043b\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.
 required_alert=\u0412\u0441\u0435 \u043f\u043e\u043b\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.
-# edit_attribute=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442
 edit_attribute=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442
-# attributes=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
 attributes=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b
-# title=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430
 title=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430
-# readonly=\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435
 readonly=\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435
-# resource=\u0420\u0435\u0441\u0443\u0440\u0441
 resource=\u0420\u0435\u0441\u0443\u0440\u0441
-# provision=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435
-provision=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435
-# extAttrName=\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442
+anyType=Type
 extAttrName=\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java
index 2d0710a..1f10e6b 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java
@@ -29,7 +29,7 @@ public class VirSchemaTO extends AbstractSchemaTO {
 
     private String resource;
 
-    private String provision;
+    private String anyType;
 
     private String extAttrName;
 
@@ -49,12 +49,12 @@ public class VirSchemaTO extends AbstractSchemaTO {
         this.resource = resource;
     }
 
-    public String getProvision() {
-        return provision;
+    public String getAnyType() {
+        return anyType;
     }
 
-    public void setProvision(final String provision) {
-        this.provision = provision;
+    public void setAnyType(final String anyType) {
+        this.anyType = anyType;
     }
 
     public String getExtAttrName() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
index 94914a9..51dd04b 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
@@ -31,8 +31,6 @@ public interface ExternalResourceDAO extends DAO<ExternalResource> {
 
     ExternalResource find(String key);
 
-    Provision findProvision(String key);
-
     List<Provision> findProvisionsByAuxClass(AnyTypeClass anyTypeClass);
 
     List<ExternalResource> findByPolicy(Policy policy);

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
index 1c56720..9692782 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
@@ -91,11 +91,6 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
     }
 
     @Override
-    public Provision findProvision(final String key) {
-        return entityManager().find(JPAProvision.class, key);
-    }
-
-    @Override
     public List<Provision> findProvisionsByAuxClass(final AnyTypeClass anyTypeClass) {
         TypedQuery<Provision> query = entityManager().createQuery(
                 "SELECT e FROM " + JPAProvision.class.getSimpleName()

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
index 334f4a8..7a5b12e 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/VirSchemaTest.java
@@ -23,8 +23,8 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-import java.util.UUID;
 import org.apache.syncope.common.lib.types.IntMappingType;
+import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
 import org.apache.syncope.core.persistence.api.entity.VirSchema;
@@ -44,9 +44,12 @@ public class VirSchemaTest extends AbstractTest {
     @Autowired
     private ExternalResourceDAO resourceDAO;
 
+    @Autowired
+    private AnyTypeDAO anyTypeDAO;
+
     @Test
     public void deal() {
-        Provision provision = resourceDAO.findProvision("209ea85f-f964-49c7-a498-6c9c2baa3bd8");
+        Provision provision = resourceDAO.find("ws-target-resource-1").getProvision(anyTypeDAO.findUser());
         assertNotNull(provision);
         assertTrue(virSchemaDAO.findByProvision(provision).isEmpty());
 
@@ -64,7 +67,7 @@ public class VirSchemaTest extends AbstractTest {
         assertTrue(virSchema.isReadonly());
         assertEquals("EXT_ATTR", virSchema.getExtAttrName());
 
-        provision = resourceDAO.findProvision("209ea85f-f964-49c7-a498-6c9c2baa3bd8");
+        provision = resourceDAO.find("ws-target-resource-1").getProvision(anyTypeDAO.findUser());
         assertNotNull(provision);
         assertFalse(virSchemaDAO.findByProvision(provision).isEmpty());
         assertTrue(virSchemaDAO.findByProvision(provision).contains(virSchema));

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
index ac28f14..10e4f73 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
@@ -34,13 +34,16 @@ import org.apache.syncope.core.persistence.api.entity.VirSchema;
 import org.apache.syncope.core.spring.BeanUtils;
 import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
+import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
+import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.AnyUtils;
 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -70,6 +73,9 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
     private ExternalResourceDAO resourceDAO;
 
     @Autowired
+    private AnyTypeDAO anyTypeDAO;
+
+    @Autowired
     private EntityFactory entityFactory;
 
     @Autowired
@@ -238,10 +244,23 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
             schema.setAnyTypeClass(null);
         }
 
-        Provision provision = resourceDAO.findProvision(schemaTO.getProvision());
+        ExternalResource resource = resourceDAO.find(schemaTO.getResource());
+        if (resource == null) {
+            SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidSchemaDefinition);
+            sce.getElements().add("Resource " + schemaTO.getResource() + " not found");
+            throw sce;
+        }
+        AnyType anyType = anyTypeDAO.find(schemaTO.getAnyType());
+        if (anyType == null) {
+            SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidSchemaDefinition);
+            sce.getElements().add("AnyType " + schemaTO.getAnyType() + " not found");
+            throw sce;
+        }
+        Provision provision = resource.getProvision(anyType);
         if (provision == null) {
             SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidSchemaDefinition);
-            sce.getElements().add("Provision " + schemaTO.getProvision() + " not found");
+            sce.getElements().add("Provision for AnyType" + schemaTO.getAnyType()
+                    + " not found in " + schemaTO.getResource());
             throw sce;
         }
         schema.setProvision(provision);
@@ -265,7 +284,7 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
         BeanUtils.copyProperties(schema, schemaTO, IGNORE_PROPERTIES);
         schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey());
         schemaTO.setResource(schema.getProvision().getResource().getKey());
-        schemaTO.setProvision(schema.getProvision().getKey());
+        schemaTO.setAnyType(schema.getProvision().getAnyType().getKey());
 
         return schemaTO;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
index 04fc00a..413d80d 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
@@ -109,7 +109,8 @@ public class VirAttrITCase extends AbstractITCase {
         VirSchemaTO virSchema = new VirSchemaTO();
         virSchema.setKey("syncope260" + getUUIDString());
         virSchema.setExtAttrName("companyName");
-        virSchema.setProvision(provision.getKey());
+        virSchema.setResource(RESOURCE_NAME_WS2);
+        virSchema.setAnyType(provision.getAnyType());
         virSchema = createSchema(SchemaType.VIRTUAL, virSchema);
         assertNotNull(virSchema);
 
@@ -286,7 +287,8 @@ public class VirAttrITCase extends AbstractITCase {
             VirSchemaTO virSchema = new VirSchemaTO();
             virSchema.setKey("syncope397" + getUUIDString());
             virSchema.setExtAttrName("email");
-            virSchema.setProvision(provision.getKey());
+            virSchema.setResource(RESOURCE_NAME_CSV);
+            virSchema.setAnyType(provision.getAnyType());
             virSchema = createSchema(SchemaType.VIRTUAL, virSchema);
             assertNotNull(virSchema);
 
@@ -467,7 +469,8 @@ public class VirAttrITCase extends AbstractITCase {
                 rvirtualdata = new VirSchemaTO();
                 rvirtualdata.setKey("rvirtualdata");
                 rvirtualdata.setExtAttrName("businessCategory");
-                rvirtualdata.setProvision("20a75199-3f2e-4b9a-9510-c68dd7fc7b3d");
+                rvirtualdata.setResource(RESOURCE_NAME_LDAP);
+                rvirtualdata.setAnyType(AnyTypeKind.GROUP.name());
 
                 rvirtualdata = createSchema(SchemaType.VIRTUAL, rvirtualdata);
             }
@@ -651,7 +654,8 @@ public class VirAttrITCase extends AbstractITCase {
             VirSchemaTO virSchema = new VirSchemaTO();
             virSchema.setKey("syncope691" + getUUIDString());
             virSchema.setExtAttrName("mail");
-            virSchema.setProvision(provision.getKey());
+            virSchema.setResource(ldap.getKey());
+            virSchema.setAnyType(provision.getAnyType());
             virSchema = createSchema(SchemaType.VIRTUAL, virSchema);
             assertNotNull(virSchema);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/951a64a7/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java
index 84d378a..fbe264e 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirSchemaITCase.java
@@ -62,11 +62,12 @@ public class VirSchemaITCase extends AbstractITCase {
         VirSchemaTO schema = new VirSchemaTO();
         schema.setKey("virtualTest" + getUUIDString());
         schema.setExtAttrName("name");
-        schema.setProvision(csv.getProvisions().get(0).getKey());
+        schema.setResource(RESOURCE_NAME_CSV);
+        schema.setAnyType(csv.getProvisions().get(0).getAnyType());
 
         schema = createSchema(SchemaType.VIRTUAL, schema);
         assertNotNull(schema);
-        assertEquals(csv.getProvisions().get(0).getKey(), schema.getProvision());
+        assertEquals(csv.getProvisions().get(0).getAnyType(), schema.getAnyType());
 
         csv = resourceService.read(RESOURCE_NAME_CSV);
         assertNotNull(csv);
@@ -138,7 +139,8 @@ public class VirSchemaITCase extends AbstractITCase {
         VirSchemaTO schema = new VirSchemaTO();
         schema.setKey("http://schemas.examples.org/security/authorization/organizationUnit");
         schema.setExtAttrName("name");
-        schema.setProvision(ws1.getProvisions().get(0).getKey());
+        schema.setResource(RESOURCE_NAME_WS1);
+        schema.setAnyType(ws1.getProvisions().get(0).getAnyType());
 
         try {
             createSchema(SchemaType.VIRTUAL, schema);