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/06/14 16:00:03 UTC

[12/15] syncope git commit: [SYNCOPE-862] Features complete

[SYNCOPE-862] Features complete


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

Branch: refs/heads/SYNCOPE-862
Commit: 8e162494e707c3279f4bc43f951a7c87d869daef
Parents: a4afd4a
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Jun 14 17:57:42 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Jun 14 17:59:30 2016 +0200

----------------------------------------------------------------------
 .../client/console/commons/Constants.java       |  34 +-
 .../NotificationWizardBuilder.java              | 103 +--
 .../client/console/panels/BeanPanel.java        |  60 +-
 .../console/panels/ConnObjectListViewPanel.java |   2 +-
 .../client/console/rest/SchemaRestClient.java   |   1 +
 .../client/console/wizards/any/Groups.java      |  11 +-
 .../console/wizards/any/Relationships.java      |  10 +-
 .../wizards/resources/ResourceMappingPanel.java | 317 ++++------
 .../SyncopeConsoleApplication.properties        |   1 +
 .../SyncopeConsoleApplication_it.properties     |   1 +
 .../SyncopeConsoleApplication_pt_BR.properties  |   1 +
 .../SyncopeConsoleApplication_ru.properties     |   1 +
 .../NotificationWizardBuilder$Details.html      |   3 -
 ...NotificationWizardBuilder$Details.properties |   3 +-
 ...ificationWizardBuilder$Details_it.properties |   3 +-
 ...cationWizardBuilder$Details_pt_BR.properties |   3 +-
 ...ificationWizardBuilder$Details_ru.properties |  14 +-
 .../NotificationWizardBuilder$Events.properties |   2 -
 ...tificationWizardBuilder$Events_it.properties |   2 -
 ...icationWizardBuilder$Events_pt_BR.properties |   2 -
 ...tificationWizardBuilder$Events_ru.properties |  52 +-
 .../console/pages/Notifications.properties      |   2 -
 .../console/pages/Notifications_it.properties   |   2 -
 .../pages/Notifications_pt_BR.properties        |   2 -
 .../console/pages/Notifications_ru.properties   |  50 +-
 .../wizards/resources/ResourceMappingPanel.html |  19 +-
 .../resources/ResourceProvisionPanel.properties |   5 +-
 .../ResourceProvisionPanel_it.properties        |   5 +-
 .../ResourceProvisionPanel_pt_BR.properties     |   5 +-
 .../ResourceProvisionPanel_ru.properties        |   6 +-
 .../syncope/common/lib/to/AnyObjectTO.java      |   2 +-
 .../common/lib/to/GroupableRelatableTO.java     |  36 ++
 .../syncope/common/lib/to/GroupableTO.java      |  31 -
 .../syncope/common/lib/to/RelatableTO.java      |  30 -
 .../apache/syncope/common/lib/to/UserTO.java    |   2 +-
 .../syncope/core/logic/ResourceLogic.java       |   6 +-
 .../logic/report/ReconciliationReportlet.java   |   6 +-
 .../core/persistence/api/dao/SchemaDAO.java     |   2 +-
 .../persistence/jpa/entity/JPAAnyUtils.java     |  11 +-
 .../jpa/entity/resource/JPAMappingItem.java     |   4 +-
 .../entity/ExternalResourceValidator.java       | 102 +--
 .../persistence/jpa/inner/ResourceTest.java     |  65 +-
 .../persistence/jpa/outer/ResourceTest.java     |   1 +
 .../test/resources/domains/MasterContent.xml    |  13 +-
 .../src/test/resources/domains/TwoContent.xml   |   4 +-
 .../core/provisioning/api/IntAttrName.java      | 103 +++
 .../provisioning/api/IntAttrNameParser.java     | 140 -----
 .../core/provisioning/api/MappingManager.java   |   7 +-
 .../api/data/MappingItemTransformer.java        |   4 +-
 .../provisioning/java/ConnectorFacadeProxy.java |   5 +-
 .../provisioning/java/IntAttrNameParser.java    | 120 ++++
 .../provisioning/java/MappingManagerImpl.java   | 623 +++++++------------
 .../provisioning/java/VirAttrHandlerImpl.java   |   5 +-
 .../java/data/AbstractAnyDataBinder.java        |  37 +-
 .../data/DefaultMappingItemTransformer.java     |   2 +-
 .../java/data/JEXLMappingItemTransformer.java   |  46 +-
 .../java/data/NotificationDataBinderImpl.java   |   7 +-
 .../java/data/ResourceDataBinderImpl.java       |  60 +-
 .../java/data/UserDataBinderImpl.java           |   5 +-
 .../notification/NotificationManagerImpl.java   |  30 +-
 .../AbstractPropagationTaskExecutor.java        |   6 +-
 .../propagation/PropagationManagerImpl.java     |   4 +-
 .../pushpull/AbstractPushResultHandler.java     |   4 +-
 .../pushpull/PlainAttrsPullCorrelationRule.java |   6 +-
 .../java/pushpull/PullJobDelegate.java          |  10 +-
 .../provisioning/java/pushpull/PullUtils.java   |  22 +-
 .../java/utils/ConnObjectUtils.java             |   3 +-
 .../provisioning/java/utils/MappingUtils.java   | 239 +++++++
 .../src/main/resources/provisioningContext.xml  |   1 +
 .../java/IntAttrNameParserTest.java             | 161 +++++
 .../core/provisioning/java/MappingTest.java     |   5 +-
 .../reference/PrefixMappingItemTransformer.java |   4 +-
 .../fit/console/NotificationsITCase.java        |  12 +-
 .../syncope/fit/console/TopologyITCase.java     |  13 +-
 .../apache/syncope/fit/core/GroupITCase.java    |  31 +-
 .../syncope/fit/core/MembershipITCase.java      | 112 ++++
 .../syncope/fit/core/MigrationITCase.java       |   4 +-
 .../apache/syncope/fit/core/ResourceITCase.java |  36 +-
 78 files changed, 1491 insertions(+), 1413 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
index 19b1ce1..7157c09 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
@@ -23,7 +23,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverConfig
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
 public final class Constants {
@@ -164,27 +163,9 @@ public final class Constants {
      */
     public static final String GUARDED_BYTE_ARRAY = "org.identityconnectors.common.security.GuardedByteArray";
 
-    public static Component getPopover(
-            final String id,
-            final IModel<String> msg,
-            final Component caller,
-            final TooltipConfig.Placement placement) {
-        return new Label(id, Model.of()).add(new PopoverBehavior(
-                Model.<String>of(),
-                msg,
-                new PopoverConfig().withHtml(true).withPlacement(placement)) {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            protected String createRelAttribute() {
-                return id;
-            }
-        });
-    }
-
     public static Component getJEXLPopover(final Component caller, final TooltipConfig.Placement placement) {
-        return getPopover("jexlInfo",
+        return new Label("jexlInfo", Model.of()).add(new PopoverBehavior(
+                Model.<String>of(),
                 Model.of(caller.getString("jexl_info")
                         + "<ul>"
                         + "<li>" + caller.getString("jexl_ex1") + "</li>"
@@ -192,8 +173,15 @@ public final class Constants {
                         + "</ul>"
                         + "<a href='https://commons.apache.org/proper/commons-jexl/reference/index.html' "
                         + "target='_blank'>" + caller.getString("jexl_syntax_url") + "</a>"),
-                caller,
-                placement);
+                new PopoverConfig().withHtml(true).withPlacement(placement)) {
+
+            private static final long serialVersionUID = -7867802555691605021L;
+
+            @Override
+            protected String createRelAttribute() {
+                return "jexlInfo";
+            }
+        });
     }
 
     private Constants() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
index 4bc8478..cf97161 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
@@ -23,7 +23,6 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.EnumSet;
 import java.util.List;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.Transformer;
@@ -52,7 +51,6 @@ import org.apache.syncope.common.lib.to.NotificationTO;
 import org.apache.syncope.common.lib.to.PlainSchemaTO;
 import org.apache.syncope.common.lib.to.VirSchemaTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.syncope.common.lib.types.TraceLevel;
 import org.apache.wicket.PageReference;
@@ -119,50 +117,34 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationWra
         private static final long serialVersionUID = -7709805590497687958L;
 
         public Details(final NotificationWrapper modelObject) {
-            final NotificationTO notificationTO = modelObject.getInnerObject();
-            final boolean createFlag = notificationTO.getKey() == null;
+            NotificationTO notificationTO = modelObject.getInnerObject();
+            boolean createFlag = notificationTO.getKey() == null;
 
-            final AjaxTextFieldPanel sender = new AjaxTextFieldPanel("sender", getString("sender"),
+            AjaxTextFieldPanel sender = new AjaxTextFieldPanel("sender", getString("sender"),
                     new PropertyModel<String>(notificationTO, "sender"));
             sender.addRequiredLabel();
             sender.addValidator(EmailAddressValidator.getInstance());
             add(sender);
 
-            final AjaxTextFieldPanel subject = new AjaxTextFieldPanel("subject", getString("subject"),
+            AjaxTextFieldPanel subject = new AjaxTextFieldPanel("subject", getString("subject"),
                     new PropertyModel<String>(notificationTO, "subject"));
             subject.addRequiredLabel();
             add(subject);
 
-            final AjaxDropDownChoicePanel<IntMappingType> recipientAttrType =
-                    new AjaxDropDownChoicePanel<>(
-                            "recipientAttrType",
-                            new ResourceModel("recipientAttrType", "recipientAttrType").getObject(),
-                            new PropertyModel<IntMappingType>(notificationTO, "recipientAttrType"));
-            recipientAttrType.setChoices(
-                    new ArrayList<>(IntMappingType.getAttributeTypes(AnyTypeKind.USER,
-                            EnumSet.of(IntMappingType.UserKey, IntMappingType.Password))));
-            recipientAttrType.addRequiredLabel();
-            add(recipientAttrType);
-
-            final AjaxDropDownChoicePanel<String> recipientAttrName = new AjaxDropDownChoicePanel<>(
+            AjaxTextFieldPanel recipientAttrName = new AjaxTextFieldPanel(
                     "recipientAttrName", new ResourceModel("recipientAttrName", "recipientAttrName").getObject(),
                     new PropertyModel<String>(notificationTO, "recipientAttrName"));
-            recipientAttrName.setChoices(getSchemaNames(recipientAttrType.getModelObject()));
+            recipientAttrName.setChoices(getSchemaNames());
             recipientAttrName.addRequiredLabel();
+            recipientAttrName.setTitle(getString("intAttrNameInfo.help")
+                    + "<div style=\"font-size: 10px;\">"
+                    + "<code>groups[groupName].attribute</code>\n"
+                    + "<code>anyObjects[anyObjectName].attribute</code>\n"
+                    + "<code>memberships[groupName].attribute</code>\n"
+                    + "</div>", true);
             add(recipientAttrName);
 
-            recipientAttrType.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                private static final long serialVersionUID = -1107858522700306810L;
-
-                @Override
-                protected void onUpdate(final AjaxRequestTarget target) {
-                    recipientAttrName.setChoices(getSchemaNames(recipientAttrType.getModelObject()));
-                    target.add(recipientAttrName);
-                }
-            });
-
-            final AjaxDropDownChoicePanel<String> template = new AjaxDropDownChoicePanel<>(
+            AjaxDropDownChoicePanel<String> template = new AjaxDropDownChoicePanel<>(
                     "template", getString("template"),
                     new PropertyModel<String>(notificationTO, "template"));
             template.setChoices(CollectionUtils.collect(
@@ -177,7 +159,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationWra
             template.addRequiredLabel();
             add(template);
 
-            final AjaxDropDownChoicePanel<TraceLevel> traceLevel = new AjaxDropDownChoicePanel<>(
+            AjaxDropDownChoicePanel<TraceLevel> traceLevel = new AjaxDropDownChoicePanel<>(
                     "traceLevel", getString("traceLevel"),
                     new PropertyModel<TraceLevel>(notificationTO, "traceLevel"));
             traceLevel.setChoices(Arrays.asList(TraceLevel.values()));
@@ -228,7 +210,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationWra
             super(id, model);
             setOutputMarkupId(true);
 
-            final List<String> anyTypeTOs = CollectionUtils.collect(
+            List<String> anyTypeTOs = CollectionUtils.collect(
                     new AnyTypeRestClient().list(),
                     EntityTOUtils.<AnyTypeTO>keyTransformer(), new ArrayList<String>());
 
@@ -289,22 +271,24 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationWra
 
         private AbstractSearchPanel.Builder<?> getClauseBuilder(
                 final String type, final ListModel<SearchClause> clauseModel) {
+
             AbstractSearchPanel.Builder<?> clause;
 
             switch (type) {
                 case "USER":
                     clause = new UserSearchPanel.Builder(clauseModel);
                     break;
+
                 case "GROUP":
                     clause = new GroupSearchPanel.Builder(clauseModel);
                     break;
+
                 default:
                     clause = new AnyObjectSearchPanel.Builder(type, clauseModel);
-                    break;
             }
+
             return clause;
         }
-
     }
 
     public class Abouts extends WizardStep {
@@ -389,40 +373,21 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationWra
 
     }
 
-    private List<String> getSchemaNames(final IntMappingType type) {
-        final List<String> result;
-
-        if (type == null) {
-            result = Collections.<String>emptyList();
-        } else {
-            switch (type) {
-                case UserPlainSchema:
-                    result = CollectionUtils.collect(
-                            schemaRestClient.<PlainSchemaTO>getSchemas(SchemaType.PLAIN, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<PlainSchemaTO>keyTransformer(), new ArrayList<String>());
-                    break;
-
-                case UserDerivedSchema:
-                    result = CollectionUtils.collect(
-                            schemaRestClient.<DerSchemaTO>getSchemas(SchemaType.DERIVED, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<DerSchemaTO>keyTransformer(), new ArrayList<String>());
-                    break;
-
-                case UserVirtualSchema:
-                    result = CollectionUtils.collect(
-                            schemaRestClient.<VirSchemaTO>getSchemas(SchemaType.VIRTUAL, AnyTypeKind.USER.name()),
-                            EntityTOUtils.<VirSchemaTO>keyTransformer(), new ArrayList<String>());
-                    break;
-
-                case Username:
-                    result = Collections.singletonList("Username");
-                    break;
-
-                default:
-                    result = Collections.<String>emptyList();
-            }
-        }
-
+    private List<String> getSchemaNames() {
+        List<String> result = new ArrayList<>();
+        result.add("username");
+
+        CollectionUtils.collect(
+                schemaRestClient.<PlainSchemaTO>getSchemas(SchemaType.PLAIN, AnyTypeKind.USER.name()),
+                EntityTOUtils.<PlainSchemaTO>keyTransformer(), result);
+        CollectionUtils.collect(
+                schemaRestClient.<DerSchemaTO>getSchemas(SchemaType.DERIVED, AnyTypeKind.USER.name()),
+                EntityTOUtils.<DerSchemaTO>keyTransformer(), result);
+        CollectionUtils.collect(
+                schemaRestClient.<VirSchemaTO>getSchemas(SchemaType.VIRTUAL, AnyTypeKind.USER.name()),
+                EntityTOUtils.<VirSchemaTO>keyTransformer(), result);
+
+        Collections.sort(result);
         return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
index fe09351..6da40f0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
@@ -50,8 +50,6 @@ import org.apache.syncope.common.lib.report.Schema;
 import org.apache.syncope.common.lib.report.SearchCondition;
 import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
 import org.apache.syncope.common.lib.to.AbstractSchemaTO;
-import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
@@ -102,7 +100,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
 
             @Override
             protected List<String> load() {
-                List<String> result = new ArrayList<String>();
+                List<String> result = new ArrayList<>();
 
                 if (BeanPanel.this.getDefaultModelObject() != null) {
                     for (Field field : BeanPanel.this.getDefaultModelObject().getClass().getDeclaredFields()) {
@@ -160,18 +158,18 @@ public class BeanPanel<T extends Serializable> extends Panel {
                     switch (scondAnnot.type()) {
                         case "USER":
                             panel = new UserSearchPanel.Builder(
-                                    new ListModel<SearchClause>(clauses)).required(false).build("value");
+                                    new ListModel<>(clauses)).required(false).build("value");
                             builder = SyncopeClient.getUserSearchConditionBuilder();
                             break;
                         case "GROUP":
                             panel = new GroupSearchPanel.Builder(
-                                    new ListModel<SearchClause>(clauses)).required(false).build("value");
+                                    new ListModel<>(clauses)).required(false).build("value");
                             builder = SyncopeClient.getGroupSearchConditionBuilder();
                             break;
                         default:
                             panel = new AnyObjectSearchPanel.Builder(
                                     scondAnnot.type(),
-                                    new ListModel<SearchClause>(clauses)).required(false).build("value");
+                                    new ListModel<>(clauses)).required(false).build("value");
                             builder = SyncopeClient.getAnyObjectSearchConditionBuilder(null);
                     }
 
@@ -190,51 +188,21 @@ public class BeanPanel<T extends Serializable> extends Panel {
 
                         final List<AbstractSchemaTO> choices = new ArrayList<>();
 
-                        for (IntMappingType type : schemaAnnot.type()) {
+                        for (SchemaType type : schemaAnnot.type()) {
                             switch (type) {
-                                case UserPlainSchema:
+                                case PLAIN:
                                     choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.PLAIN, AnyTypeKind.USER));
+                                            schemaRestClient.getSchemas(SchemaType.PLAIN, schemaAnnot.anyTypeKind()));
                                     break;
 
-                                case UserDerivedSchema:
+                                case DERIVED:
                                     choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.DERIVED, AnyTypeKind.USER));
+                                            schemaRestClient.getSchemas(SchemaType.DERIVED, schemaAnnot.anyTypeKind()));
                                     break;
 
-                                case UserVirtualSchema:
+                                case VIRTUAL:
                                     choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.VIRTUAL, AnyTypeKind.USER));
-                                    break;
-
-                                case GroupPlainSchema:
-                                    choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.PLAIN, AnyTypeKind.GROUP));
-                                    break;
-
-                                case GroupDerivedSchema:
-                                    choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.DERIVED, AnyTypeKind.GROUP));
-                                    break;
-
-                                case GroupVirtualSchema:
-                                    choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.VIRTUAL, AnyTypeKind.GROUP));
-                                    break;
-
-                                case AnyObjectPlainSchema:
-                                    choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.PLAIN, AnyTypeKind.ANY_OBJECT));
-                                    break;
-
-                                case AnyObjectDerivedSchema:
-                                    choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.DERIVED, AnyTypeKind.ANY_OBJECT));
-                                    break;
-
-                                case AnyObjectVirtualSchema:
-                                    choices.addAll(
-                                            schemaRestClient.getSchemas(SchemaType.VIRTUAL, AnyTypeKind.ANY_OBJECT));
+                                            schemaRestClient.getSchemas(SchemaType.VIRTUAL, schemaAnnot.anyTypeKind()));
                                     break;
 
                                 default:
@@ -244,7 +212,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
                         panel = new AjaxPalettePanel.Builder<String>().setName(fieldName).build(
                                 "value",
                                 new PropertyModel<List<String>>(bean.getObject(), fieldName),
-                                new ListModel<String>(
+                                new ListModel<>(
                                         CollectionUtils.collect(
                                                 choices, new Transformer<AbstractSchemaTO, String>() {
 
@@ -263,7 +231,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
                             ((List) wrapper.getPropertyValue(fieldName)).add(null);
                         }
 
-                        panel = new MultiFieldPanel.Builder<String>(
+                        panel = new MultiFieldPanel.Builder<>(
                                 new PropertyModel<List<String>>(bean.getObject(), fieldName)).build(
                                 "value",
                                 fieldName,
@@ -287,7 +255,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
         if (ClassUtils.isAssignable(Boolean.class, type)) {
             result = new AjaxCheckBoxPanel(id, fieldName, model);
         } else if (ClassUtils.isAssignable(Number.class, type)) {
-            result = new AjaxSpinnerFieldPanel.Builder<Number>().build(
+            result = new AjaxSpinnerFieldPanel.Builder<>().build(
                     id, fieldName, (Class<Number>) ClassUtils.resolvePrimitiveIfNecessary(type), model);
         } else if (Date.class.equals(type)) {
             result = new DateTimeFieldPanel(id, fieldName, model, SyncopeConstants.DEFAULT_DATE_PATTERN);

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
index 53e2c69..45ddb35 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
@@ -68,7 +68,7 @@ public abstract class ConnObjectListViewPanel extends Panel {
 
             @Override
             protected Component getValueComponent(final String key, final ConnObjectTO bean) {
-                final AttrTO attrTO = IterableUtils.find(bean.getPlainAttrs(), new Predicate<AttrTO>() {
+                final AttrTO attrTO = IterableUtils.find(bean.getAttrs(), new Predicate<AttrTO>() {
 
                     @Override
                     public boolean evaluate(final AttrTO object) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/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 a6ad2eb..d38091b 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
@@ -54,6 +54,7 @@ public class SchemaRestClient extends BaseRestClient {
                     classes.addAll(type.getClasses());
                 }
                 break;
+
             default:
                 for (AnyTypeTO anyTypeTO : getService(AnyTypeService.class).list()) {
                     if (anyTypeTO.getKind() != AnyTypeKind.USER && anyTypeTO.getKind() != AnyTypeKind.GROUP) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
index 401f8e0..8935ef3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
@@ -32,7 +32,6 @@ import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.syncope.common.lib.to.GroupableTO;
 import org.apache.syncope.common.lib.to.MembershipTO;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
@@ -41,6 +40,7 @@ import org.apache.wicket.markup.html.form.IChoiceRenderer;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.util.ListModel;
 import org.apache.wicket.util.lang.Args;
+import org.apache.syncope.common.lib.to.GroupableRelatableTO;
 
 public class Groups extends WizardStep {
 
@@ -83,8 +83,8 @@ public class Groups extends WizardStep {
                     }
                 });
 
-        add(builder.setAllowOrder(true).withFilter().build(
-                "groups", new ListModel<>(GroupableTO.class.cast(anyTO).getMemberships()),
+        add(builder.setAllowOrder(true).withFilter().build("groups",
+                new ListModel<>(GroupableRelatableTO.class.cast(anyTO).getMemberships()),
                 new AjaxPalettePanel.Builder.Query<MembershipTO>() {
 
             private static final long serialVersionUID = -7223078772249308813L;
@@ -116,9 +116,8 @@ public class Groups extends WizardStep {
         for (GroupTO group : allGroups) {
             allGroupsByKey.put(group.getKey(), group);
         }
-        add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).build(
-                "dyngroups",
-                new ListModel<>(CollectionUtils.collect(GroupableTO.class.cast(anyTO).getDynGroups(),
+        add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).build("dyngroups",
+                new ListModel<>(CollectionUtils.collect(GroupableRelatableTO.class.cast(anyTO).getDynGroups(),
                         new Transformer<String, String>() {
 
                     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
index e41cdea..20f054c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.wizards.any;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -55,7 +54,7 @@ import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.AnyTypeTO;
-import org.apache.syncope.common.lib.to.RelatableTO;
+import org.apache.syncope.common.lib.to.GroupableRelatableTO;
 import org.apache.syncope.common.lib.to.RelationshipTO;
 import org.apache.syncope.common.lib.to.RelationshipTypeTO;
 import org.apache.syncope.common.lib.types.AnyEntitlement;
@@ -135,8 +134,7 @@ public class Relationships extends WizardStep {
                                             public void onClick(
                                                     final AjaxRequestTarget target, final RelationshipTO modelObject) {
                                                 removeRelationships(relationships, modelObject);
-                                                send(Relationships.this, Broadcast.DEPTH, 
-                                                        new ListViewReload<Serializable>(target));
+                                                send(Relationships.this, Broadcast.DEPTH, new ListViewReload<>(target));
                                             }
                                         }, ActionType.DELETE, AnyEntitlement.UPDATE.getFor(anyTO.getType())).
                                         build(panelId);
@@ -175,8 +173,8 @@ public class Relationships extends WizardStep {
     }
 
     private List<RelationshipTO> getCurrentRelationships() {
-        return anyTO instanceof RelatableTO
-                ? RelatableTO.class.cast(anyTO).getRelationships()
+        return anyTO instanceof GroupableRelatableTO
+                ? GroupableRelatableTO.class.cast(anyTO).getRelationships()
                 : Collections.<RelationshipTO>emptyList();
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
index 06ea7c8..de90660 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceMappingPanel.java
@@ -18,17 +18,24 @@
  */
 package org.apache.syncope.client.console.wizards.resources;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverBehavior;
+import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverConfig;
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
 import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
+import org.apache.commons.lang3.ClassUtils;
 import org.apache.syncope.client.console.commons.ConnIdSpecialAttributeName;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
@@ -38,22 +45,23 @@ import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormCompo
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
-import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.MappingPurposePanel;
 import org.apache.syncope.client.console.widgets.JEXLTransformerWidget;
 import org.apache.syncope.client.console.widgets.MappingItemTransformerWidget;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
 import org.apache.syncope.common.lib.to.AnyTypeTO;
 import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
+import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.to.MappingItemTO;
 import org.apache.syncope.common.lib.to.MappingTO;
 import org.apache.syncope.common.lib.to.ProvisionTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
-import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -76,10 +84,32 @@ public class ResourceMappingPanel extends Panel {
 
     private static final long serialVersionUID = -7982691107029848579L;
 
-    /**
-     * Mapping field style sheet.
-     */
-    private static final String DEF_FIELD_STYLE = "";
+    private static final Set<String> USER_FIELD_NAMES = new HashSet<>();
+
+    private static final Set<String> GROUP_FIELD_NAMES = new HashSet<>();
+
+    private static final Set<String> ANY_OBJECT_FIELD_NAMES = new HashSet<>();
+
+    static {
+        initFieldNames(UserTO.class, USER_FIELD_NAMES);
+        initFieldNames(GroupTO.class, GROUP_FIELD_NAMES);
+        initFieldNames(AnyObjectTO.class, ANY_OBJECT_FIELD_NAMES);
+    }
+
+    private static void initFieldNames(final Class<?> entityClass, final Set<String> keys) {
+        List<Class<?>> classes = ClassUtils.getAllSuperclasses(entityClass);
+        classes.add(entityClass);
+        for (Class<?> clazz : classes) {
+            for (Field field : clazz.getDeclaredFields()) {
+                if (!Modifier.isStatic(field.getModifiers())
+                        && !Collection.class.isAssignableFrom(field.getType())
+                        && !Map.class.isAssignableFrom(field.getType())) {
+
+                    keys.add(field.getName());
+                }
+            }
+        }
+    }
 
     /**
      * Any type rest client.
@@ -157,6 +187,24 @@ public class ResourceMappingPanel extends Panel {
         this.mappingContainer.setVisible(provisionTO != null);
         add(this.mappingContainer);
 
+        mappingContainer.add(new Label("intAttrNameInfo", Model.of()).add(new PopoverBehavior(
+                Model.<String>of(),
+                Model.of(getString("intAttrNameInfo.help")
+                        + "<div style=\"font-size: 10px;\">"
+                        + "<code>groups[groupName].attribute</code>\n"
+                        + "<code>anyObjects[anyObjectName].attribute</code>\n"
+                        + "<code>memberships[groupName].attribute</code>\n"
+                        + "</div>"),
+                new PopoverConfig().withHtml(true).withPlacement(TooltipConfig.Placement.bottom)) {
+
+            private static final long serialVersionUID = -7867802555691605021L;
+
+            @Override
+            protected String createRelAttribute() {
+                return "intAttrNameInfo";
+            }
+        }));
+
         mappingContainer.add(Constants.getJEXLPopover(this, TooltipConfig.Placement.bottom));
 
         passwordLabel = new Label("passwordLabel", new ResourceModel("password"));
@@ -216,77 +264,32 @@ public class ResourceMappingPanel extends Panel {
                     mapItem.setPurpose(MappingPurpose.BOTH);
                 }
 
-                AnyTypeKind entity = null;
-                if (provisionTO.getAnyType().equals(AnyTypeKind.GROUP.name())) {
-                    // support for clone
-                    entity = AnyTypeKind.GROUP;
-                } else if (mapItem.getIntMappingType() != null) {
-                    entity = mapItem.getIntMappingType().getAnyTypeKind();
-                }
-
-                // it will happen just in case of clone to create a new mapping for group object
-                if (mapItem.getIntMappingType() != null && mapItem.getIntMappingType().getAnyTypeKind() != entity) {
-                    mapItem.setIntMappingType(null);
-                    mapItem.setIntAttrName(null);
-                }
-
-                //--------------------------------
-                // Entity
-                // -------------------------------
-                final AjaxDropDownChoicePanel<AnyTypeKind> entitiesPanel = new AjaxDropDownChoicePanel<>(
-                        "entities",
-                        new ResourceModel("entities", "entities").getObject(),
-                        new Model<>(entity));
-
-                entitiesPanel.hideLabel();
-                entitiesPanel.setChoices(provisionTO.getAnyType().equals(AnyTypeKind.GROUP.name())
-                        ? Collections.<AnyTypeKind>singletonList(AnyTypeKind.GROUP)
-                        : Arrays.asList(AnyTypeKind.values()));
-
-                entitiesPanel.setStyleSheet(false, DEF_FIELD_STYLE);
-                item.add(entitiesPanel);
-                // -------------------------------
-
-                //--------------------------------
-                // Internal attribute type
-                // -------------------------------
-                final List<IntMappingType> attrTypes = new ArrayList<>(getAttributeTypes(entity));
-                final AjaxDropDownChoicePanel<IntMappingType> intMappingTypes = new AjaxDropDownChoicePanel<>(
-                        "intMappingTypes",
-                        new ResourceModel("intMappingTypes", "intMappingTypes").getObject(),
-                        new PropertyModel<IntMappingType>(mapItem, "intMappingType"),
-                        false);
-                intMappingTypes.setNullValid(true).setRequired(true).hideLabel();
-                intMappingTypes.setChoices(attrTypes);
-                item.add(intMappingTypes);
-                // -------------------------------
-
                 //--------------------------------
                 // Internal attribute
                 // -------------------------------
-                final AjaxTextFieldPanel intAttrNames = new AjaxTextFieldPanel(
-                        "intAttrNames",
-                        getString("intAttrNames"),
+                AjaxTextFieldPanel intAttrName = new AjaxTextFieldPanel(
+                        "intAttrName",
+                        getString("intAttrName"),
                         new PropertyModel<String>(mapItem, "intAttrName"),
                         false);
-                intAttrNames.setChoices(Collections.<String>emptyList());
-                intAttrNames.setRequired(true).hideLabel();
-                item.add(intAttrNames);
+                intAttrName.setChoices(Collections.<String>emptyList());
+                intAttrName.setRequired(true).hideLabel();
+                item.add(intAttrName);
                 // -------------------------------
 
                 //--------------------------------
                 // External attribute
                 // -------------------------------
-                final AjaxTextFieldPanel extAttrNames = new AjaxTextFieldPanel(
+                final AjaxTextFieldPanel extAttrName = new AjaxTextFieldPanel(
                         "extAttrName",
-                        new ResourceModel("extAttrNames", "extAttrNames").getObject(),
+                        getString("extAttrName"),
                         new PropertyModel<String>(mapItem, "extAttrName"));
-                extAttrNames.setChoices(getExtAttrNames(resourceTO.getConnector(), resourceTO.getConfOverride()));
+                extAttrName.setChoices(getExtAttrNames(resourceTO.getConnector(), resourceTO.getConfOverride()));
 
                 boolean required = !mapItem.isPassword();
-                extAttrNames.setRequired(required).hideLabel();
-                extAttrNames.setEnabled(required);
-                item.add(extAttrNames);
+                extAttrName.setRequired(required).hideLabel();
+                extAttrName.setEnabled(required);
+                item.add(extAttrName);
                 // -------------------------------
 
                 //--------------------------------
@@ -339,7 +342,7 @@ public class ResourceMappingPanel extends Panel {
                 //--------------------------------
                 // Purpose
                 // -------------------------------
-                final WebMarkupContainer purpose = new WebMarkupContainer("purpose");
+                WebMarkupContainer purpose = new WebMarkupContainer("purpose");
                 purpose.setOutputMarkupId(Boolean.TRUE);
 
                 final MappingPurposePanel panel = new MappingPurposePanel(
@@ -376,38 +379,7 @@ public class ResourceMappingPanel extends Panel {
                 item.add(actions.build("toRemove"));
                 // -------------------------------
 
-                entitiesPanel.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                    private static final long serialVersionUID = -1107858522700306810L;
-
-                    @Override
-                    protected void onUpdate(final AjaxRequestTarget target) {
-                        attrTypes.clear();
-                        attrTypes.addAll(getAttributeTypes(entitiesPanel.getModelObject()));
-                        intMappingTypes.setChoices(attrTypes);
-
-                        intAttrNames.setChoices(Collections.<String>emptyList());
-
-                        target.add(intMappingTypes);
-                        target.add(intAttrNames);
-                    }
-                });
-
-                intMappingTypes.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                    private static final long serialVersionUID = -1107858522700306810L;
-
-                    @Override
-                    protected void onUpdate(final AjaxRequestTarget target) {
-                        setAttrNames(intMappingTypes.getModelObject(), intAttrNames);
-                        target.add(intAttrNames);
-
-                        setConnObjectKey(intMappingTypes.getModelObject(), connObjectKey, password);
-                        target.add(connObjectKey);
-                    }
-                });
-
-                intAttrNames.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                intAttrName.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
                     private static final long serialVersionUID = -1107858522700306810L;
 
@@ -439,28 +411,28 @@ public class ResourceMappingPanel extends Panel {
 
                     @Override
                     protected void onUpdate(final AjaxRequestTarget target) {
-                        extAttrNames.setEnabled(!mapItem.isConnObjectKey() && !password.getModelObject());
-                        extAttrNames.setModelObject(password.getModelObject()
-                                ? ConnIdSpecialAttributeName.PASSWORD : extAttrNames.getModelObject());
-                        extAttrNames.setRequired(!password.getModelObject());
-                        target.add(extAttrNames);
+                        extAttrName.setEnabled(!mapItem.isConnObjectKey() && !password.getModelObject());
+                        extAttrName.setModelObject(password.getModelObject()
+                                ? ConnIdSpecialAttributeName.PASSWORD : extAttrName.getModelObject());
+                        extAttrName.setRequired(!password.getModelObject());
+                        target.add(extAttrName);
 
-                        setConnObjectKey(intMappingTypes.getModelObject(), connObjectKey, password);
+                        setConnObjectKey(connObjectKey, password);
                         target.add(connObjectKey);
                     }
                 });
 
-                setAttrNames(mapItem.getIntMappingType(), intAttrNames);
-                setConnObjectKey(mapItem.getIntMappingType(), connObjectKey, password);
+                setAttrNames(intAttrName);
+                setConnObjectKey(connObjectKey, password);
 
                 if (!AnyTypeKind.USER.name().equals(provisionTO.getAnyType())) {
                     password.setVisible(false);
 
                     // Changes required by clone ....
-                    extAttrNames.setEnabled(!mapItem.isConnObjectKey());
+                    extAttrName.setEnabled(!mapItem.isConnObjectKey());
                     if (mapItem.isPassword()) {
                         // re-enable if and only if cloned objec mapping item was a password
-                        intAttrNames.setEnabled(true);
+                        intAttrName.setEnabled(true);
                     }
                     mapItem.setPassword(false);
                 }
@@ -517,118 +489,55 @@ public class ResourceMappingPanel extends Panel {
      * @param type attribute type.
      * @param toBeUpdated drop down choice to be updated.
      */
-    private void setAttrNames(final IntMappingType type, final AjaxTextFieldPanel toBeUpdated) {
+    private void setAttrNames(final AjaxTextFieldPanel toBeUpdated) {
         toBeUpdated.setRequired(true);
         toBeUpdated.setEnabled(true);
 
-        if (type == null || type.getAnyTypeKind() == null) {
-            toBeUpdated.setChoices(Collections.<String>emptyList());
-        } else {
-            AnyTypeTO anyTypeTO = anyTypeRestClient.read(provisionTO.getAnyType());
+        AnyTypeTO anyTypeTO = anyTypeRestClient.read(provisionTO.getAnyType());
 
-            List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<>();
-            anyTypeClassTOs.addAll(anyTypeClassRestClient.list(anyTypeTO.getClasses()));
-            for (String auxClass : provisionTO.getAuxClasses()) {
-                anyTypeClassTOs.add(anyTypeClassRestClient.read(auxClass));
-            }
+        List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<>();
+        anyTypeClassTOs.addAll(anyTypeClassRestClient.list(anyTypeTO.getClasses()));
+        for (String auxClass : provisionTO.getAuxClasses()) {
+            anyTypeClassTOs.add(anyTypeClassRestClient.read(auxClass));
+        }
 
-            List<String> choices;
-            switch (type) {
-                case UserPlainSchema:
-                case GroupPlainSchema:
-                case AnyObjectPlainSchema:
-                    final Set<String> plains = new HashSet<>();
-                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
-                        plains.addAll(anyTypeClassTO.getPlainSchemas());
-                    }
-                    choices = new ArrayList<>(plains);
-                    break;
-
-                case UserDerivedSchema:
-                case GroupDerivedSchema:
-                case AnyObjectDerivedSchema:
-                    final Set<String> deriveds = new HashSet<>();
-                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
-                        deriveds.addAll(anyTypeClassTO.getDerSchemas());
-                    }
-                    choices = new ArrayList<>(deriveds);
-                    break;
-
-                case UserVirtualSchema:
-                case GroupVirtualSchema:
-                case AnyObjectVirtualSchema:
-                    final Set<String> virtuals = new HashSet<>();
-                    for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
-                        virtuals.addAll(anyTypeClassTO.getVirSchemas());
-                    }
-                    choices = new ArrayList<>(virtuals);
-                    break;
-
-                case UserKey:
-                case Password:
-                case Username:
-                case GroupKey:
-                case GroupName:
-                case AnyObjectKey:
-                case AnyObjectName:
-                default:
-                    toBeUpdated.setRequired(false);
-                    toBeUpdated.setEnabled(false);
-                    choices = Collections.<String>emptyList();
-            }
-            Collections.sort(choices);
-            toBeUpdated.setChoices(choices);
+        List<String> choices = new ArrayList<>();
+
+        switch (provisionTO.getAnyType()) {
+            case "USER":
+                choices.addAll(USER_FIELD_NAMES);
+                break;
+
+            case "GROUP":
+                choices.addAll(GROUP_FIELD_NAMES);
+                break;
+
+            default:
+                choices.addAll(ANY_OBJECT_FIELD_NAMES);
+        }
+
+        for (AnyTypeClassTO anyTypeClassTO : anyTypeClassTOs) {
+            choices.addAll(anyTypeClassTO.getPlainSchemas());
+            choices.addAll(anyTypeClassTO.getDerSchemas());
+            choices.addAll(anyTypeClassTO.getVirSchemas());
         }
+
+        Collections.sort(choices);
+        toBeUpdated.setChoices(choices);
     }
 
     /**
      * Enable/Disable connObjectKey checkbox.
      *
-     * @param type attribute type.
      * @param connObjectKey connObjectKey checkbox.
      * @param password password checkbox.
      */
-    private void setConnObjectKey(
-            final IntMappingType type, final AjaxCheckBoxPanel connObjectKey, final AjaxCheckBoxPanel password) {
-
-        if (type != null && type.getAnyTypeKind() != null) {
-            switch (type) {
-                case UserVirtualSchema:
-                case GroupVirtualSchema:
-                case AnyObjectVirtualSchema:
-                // Virtual connObjectKey is not permitted
-                case Password:
-                    // connObjectKey cannot be derived from password.
-                    connObjectKey.setReadOnly(true);
-                    connObjectKey.setModelObject(false);
-                    break;
-
-                default:
-                    if (password.getModelObject()) {
-                        connObjectKey.setReadOnly(true);
-                        connObjectKey.setModelObject(false);
-                    } else {
-                        connObjectKey.setReadOnly(false);
-                    }
-            }
-        }
-    }
-
-    /**
-     * Get all attribute types from a selected attribute type.
-     *
-     * @param kind entity.
-     * @return all attribute types.
-     */
-    private List<IntMappingType> getAttributeTypes(final AnyTypeKind kind) {
-        final List<IntMappingType> res = new ArrayList<>();
-
-        if (kind != null) {
-            res.addAll(IntMappingType.getAttributeTypes(kind));
+    private void setConnObjectKey(final AjaxCheckBoxPanel connObjectKey, final AjaxCheckBoxPanel password) {
+        if (password.getModelObject()) {
+            connObjectKey.setReadOnly(true);
+            connObjectKey.setModelObject(false);
+        } else {
+            connObjectKey.setReadOnly(false);
         }
-
-        Collections.sort(res);
-
-        return res;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
index 0214cf6..c8f42ad 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
@@ -73,3 +73,4 @@ OrderByLink.CSS.none=sorting
 entitlements=Entitlements
 audit=Audit
 connectors.confirm.reload=This request is potentially dangerous for running operations, continue?
+intAttrNameInfo.help=Besides auto-completed attributes, you can also refer to groups, any objects or memberships  (if applicable); for example:

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
index abc0782..a17d3d8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
@@ -72,3 +72,4 @@ OrderByLink.CSS.none=sorting
 entitlements=Entitlement
 audit=Audit
 connectors.confirm.reload=Questa richiesta \u00e8 potenzialmente dannosa per le operazioni in corso, proseguire?
+intAttrNameInfo.help=Oltre agli attributi auto-completati, \u00e8 possibile fare riferimento anche a gruppi, any object e membership (se applicabile); ad esempio:

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
index 9214454..b0abf0d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
@@ -72,3 +72,4 @@ OrderByLink.CSS.none=sorting
 entitlements=Entitlement
 audit=Audit
 connectors.confirm.reload=Esta requis\u00e7\u00e3o \u00e9 potencialmente perigosa para opera\u00e7\u00f5es em execu\u00e7\u00e3o, prosseguir?
+intAttrNameInfo.help=Besides auto-completed attributes, you can also refer to groups, any objects or memberships  (if applicable); for example:

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
index 0b76c8a..2b03a61 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
@@ -123,3 +123,4 @@ OrderByLink.CSS.none=\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043
 entitlements=\u041f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f
 audit=Audit
 connectors.confirm.reload=This request is potentially dangerous for running operations, continue?
+intAttrNameInfo.help=Besides auto-completed attributes, you can also refer to groups, any objects or memberships  (if applicable); for example:

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
index 1ceee21..05ce8cf 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
@@ -27,9 +27,6 @@ under the License.
         <span wicket:id="subject">[subject]</span>
       </div>
       <div class="form-group">
-        <span wicket:id="recipientAttrType">[recipientAttrType]</span>
-      </div>
-      <div class="form-group">
         <span wicket:id="recipientAttrName">[recipientAttrName]</span>
       </div>
       <div class="form-group">

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.properties b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.properties
index 4021981..72f0e85 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.properties
@@ -18,6 +18,5 @@ subject=Subject
 sender=Sender
 template=Template
 traceLevel=Trace level
-recipientAttrType=Recipients e-mail attribute type
-recipientAttrName=Recipients e-mail attribute schema
+recipientAttrName=Recipients e-mail attribute
 isActive=Enabled

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_it.properties
index 6b7a1ca..85ee48f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_it.properties
@@ -18,6 +18,5 @@ subject=Oggetto
 sender=Mittente
 template=Modello
 traceLevel=Livello di tracciamento
-recipientAttrType=Tipo attributo e-mail destinatari
-recipientAttrName=Schema attributo e-mail destinatari
+recipientAttrName=Attributo e-mail destinatari
 isActive=Abilitata

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_pt_BR.properties
index d2ffaf6..7838db0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_pt_BR.properties
@@ -18,6 +18,5 @@ subject=Assunto
 sender=Remetente
 template=Template
 traceLevel=N\u00edvel de Trace
-recipientAttrType=Tipo de atributo de destinat\u00e1rio de email.
-recipientAttrName=Destinat\u00e1rios de e-mail para atributos de esquema
+recipientAttrName=Destinat\u00e1rios de e-mail para atributos
 isActive=Ativada

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_ru.properties
index 48aa402..75a3fd8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details_ru.properties
@@ -16,17 +16,15 @@
 # under the License.
 #
 #
-# subject=\u0422\u0435\u043c\u0430
+# subject=\u00d0\u00a2\u00d0\u00b5\u00d0\u00bc\u00d0\u00b0
 subject=\u0422\u0435\u043c\u0430
-# sender=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c
+# sender=\u00d0\u009e\u00d1\u0082\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c
 sender=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c
-# template=\u0428\u0430\u0431\u043b\u043e\u043d
+# template=\u00d0\u00a8\u00d0\u00b0\u00d0\u00b1\u00d0\u00bb\u00d0\u00be\u00d0\u00bd
 template=\u0428\u0430\u0431\u043b\u043e\u043d
-# traceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f
+# traceLevel=\u00d0\u00a3\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bb\u00d0\u00be\u00d0\u00b3\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
 traceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f
-# recipientAttrType=\u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
-recipientAttrType=\u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
-# recipientAttrName=\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
+# recipientAttrName=\u00d0\u009d\u00d0\u00b0\u00d0\u00b8\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00b0\u00d1\u0082\u00d1\u0080\u00d0\u00b8\u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d0\u00b0 \u00d1\u0081 \u00d0\u00b0\u00d0\u00b4\u00d1\u0080\u00d0\u00b5\u00d1\u0081\u00d0\u00be\u00d0\u00bc \u00d1\u008d\u00d0\u00bb\u00d0\u00b5\u00d0\u00ba\u00d1\u0082\u00d1\u0080\u00d0\u00be\u00d0\u00bd\u00d0\u00bd\u00d0\u00be\u00d0\u00b9 \u00d0\u00bf\u00d0\u00be\u00d1\u0087\u00d1\u0082\u00d1\u008b \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 recipientAttrName=\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
-# isActive=\u0410\u043a\u0442\u0438\u0432\u043d\u043e
+# isActive=\u00d0\u0090\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00be
 isActive=\u0410\u043a\u0442\u0438\u0432\u043d\u043e

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.properties b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.properties
index 690ae7e..879b380 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.properties
@@ -25,8 +25,6 @@ about=About
 events=Events
 recipients=Recipients
 selfAsRecipient=Include users matching About
-recipientAttrType=Recipients e-mail attribute type
-recipientAttrName=Recipients e-mail attribute schema
 checkRecipients=Search recipients
 checkAbout=All
 userFilter=User filter

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_it.properties
index db3bb59..ae80bb2 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_it.properties
@@ -25,8 +25,6 @@ about=Soggetti
 events=Eventi
 recipients=Destinatari
 selfAsRecipient=Includi i soggetti
-recipientAttrType=Tipo attributo e-mail destinatari
-recipientAttrName=Schema attributo e-mail destinatari
 checkRecipients=Cerca i destinatari
 checkAbout=Tutto
 userFilter=Filtro utenti

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_pt_BR.properties
index 9b13d12..5c70e66 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_pt_BR.properties
@@ -25,8 +25,6 @@ about=Sobre
 events=Eventos
 recipients=Destinat\u00e1rios
 selfAsRecipient=Incluir usu\u00e1rios relacionados Sobre
-recipientAttrType=Tipo de atributo de destinat\u00e1rio de email.
-recipientAttrName=Destinat\u00e1rios de e-mail para atributos de esquema
 checkRecipients=Buscar Destinat\u00e1rios
 checkAbout=Todos
 userFilter=Filtro usu\u00e1rio

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_ru.properties
index 6b08f78..2d461d5 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events_ru.properties
@@ -15,55 +15,51 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-# title=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435
+# title=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d1\u0083\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
 title=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435
-# submit=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
+# submit=\u00d0\u00a1\u00d0\u00be\u00d1\u0085\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c
 submit=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
-# subject=\u0422\u0435\u043c\u0430
+# subject=\u00d0\u00a2\u00d0\u00b5\u00d0\u00bc\u00d0\u00b0
 subject=\u0422\u0435\u043c\u0430
-# sender=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c
+# sender=\u00d0\u009e\u00d1\u0082\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c
 sender=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c
-# template=\u0428\u0430\u0431\u043b\u043e\u043d
+# template=\u00d0\u00a8\u00d0\u00b0\u00d0\u00b1\u00d0\u00bb\u00d0\u00be\u00d0\u00bd
 template=\u0428\u0430\u0431\u043b\u043e\u043d
-# traceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f
+# traceLevel=\u00d0\u00a3\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b5\u00d0\u00bd\u00d1\u008c \u00d0\u00bb\u00d0\u00be\u00d0\u00b3\u00d0\u00b8\u00d1\u0080\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u008f
 traceLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f
-# notification=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435
+# notification=\u00d0\u00a3\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
 notification=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435
-# about=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e
+# about=\u00d0\u00a3\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00be
 about=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e
-# events=\u0421\u043e\u0431\u044b\u0442\u0438\u044f
+# events=\u00d0\u00a1\u00d0\u00be\u00d0\u00b1\u00d1\u008b\u00d1\u0082\u00d0\u00b8\u00d1\u008f
 events=\u0421\u043e\u0431\u044b\u0442\u0438\u044f
-# recipients=\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438
+# recipients=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b8
 recipients=\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438
-# selfAsRecipient=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435
+# selfAsRecipient=\u00d0\u0092\u00d0\u00ba\u00d0\u00bb\u00d1\u008e\u00d1\u0087\u00d0\u00b8\u00d1\u0082\u00d1\u008c \u00d0\u00b2 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b8 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9, \u00d0\u00be \u00d0\u00ba\u00d0\u00be\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d1\u008b\u00d1\u0085 \u00d1\u0080\u00d0\u00b0\u00d1\u0081\u00d1\u0081\u00d1\u008b\u00d0\u00bb\u00d0\u00b0\u00d0\u00b5\u00d1\u0082\u00d1\u0081\u00d1\u008f \u00d1\u0083\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5
 selfAsRecipient=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435
-# recipientAttrType=\u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
-recipientAttrType=\u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
-# recipientAttrName=\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
-recipientAttrName=\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
-# checkRecipients=\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
+# checkRecipients=\u00d0\u009f\u00d0\u00be\u00d0\u00b8\u00d1\u0081\u00d0\u00ba \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 checkRecipients=\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439
-# checkAbout=\u041e\u0431\u043e \u0432\u0441\u0451\u043c
+# checkAbout=\u00d0\u009e\u00d0\u00b1\u00d0\u00be \u00d0\u00b2\u00d1\u0081\u00d1\u0091\u00d0\u00bc
 checkAbout=\u041e\u0431\u043e \u0432\u0441\u0451\u043c
-# userFilter=\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+# userFilter=\u00d0\u00a4\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d1\u0082\u00d1\u0080 \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 userFilter=\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
-# userFilterWarning=\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u0438\u043b\u044c\u0442\u0440, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+# userFilterWarning=\u00d0\u009d\u00d0\u00b5 \u00d0\u00b8\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d1\u0083\u00d0\u00b9\u00d1\u0082\u00d0\u00b5 \u00d1\u008d\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d1\u0084\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d1\u0082\u00d1\u0080, \u00d0\u00b5\u00d1\u0081\u00d0\u00bb\u00d0\u00b8 \u00d1\u0081\u00d0\u00be\u00d0\u00b1\u00d1\u008b\u00d1\u0082\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bd\u00d0\u00b5 \u00d0\u00bf\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d0\u00b0\u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00b4\u00d0\u00bb\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 userFilterWarning=\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u0438\u043b\u044c\u0442\u0440, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
-# userNotifications=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+# userNotifications=\u00d0\u00a3\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00bb\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 userNotifications=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
-# userNotificationsWarning=\u041d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0436\u043e\u043a, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
+# userNotificationsWarning=\u00d0\u009d\u00d0\u00b5 \u00d1\u0083\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b8\u00d0\u00b2\u00d0\u00b0\u00d0\u00b9\u00d1\u0082\u00d0\u00b5 \u00d1\u008d\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d1\u0084\u00d0\u00bb\u00d0\u00b0\u00d0\u00b6\u00d0\u00be\u00d0\u00ba, \u00d0\u00b5\u00d1\u0081\u00d0\u00bb\u00d0\u00b8 \u00d1\u0081\u00d0\u00be\u00d0\u00b1\u00d1\u008b\u00d1\u0082\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bd\u00d0\u00b5 \u00d0\u00bf\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d0\u00b0\u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00b4\u00d0\u00bb\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 userNotificationsWarning=\u041d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
-# roleFilter=\u0424\u0438\u043b\u044c\u0442\u0440 \u0440\u043e\u043b\u0435\u0439
+# roleFilter=\u00d0\u00a4\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d1\u0082\u00d1\u0080 \u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 roleFilter=\u0424\u0438\u043b\u044c\u0442\u0440 \u0440\u043e\u043b\u0435\u0439
-# roleFilterWarning=\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u0438\u043b\u044c\u0442\u0440, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u043b\u0435\u0439
+# roleFilterWarning=\u00d0\u009d\u00d0\u00b5 \u00d0\u00b8\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d1\u0083\u00d0\u00b9\u00d1\u0082\u00d0\u00b5 \u00d1\u008d\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d1\u0084\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d1\u0082\u00d1\u0080, \u00d0\u00b5\u00d1\u0081\u00d0\u00bb\u00d0\u00b8 \u00d1\u0081\u00d0\u00be\u00d0\u00b1\u00d1\u008b\u00d1\u0082\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bd\u00d0\u00b5 \u00d0\u00bf\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d0\u00b0\u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00b4\u00d0\u00bb\u00d1\u008f \u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 roleFilterWarning=\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u0438\u043b\u044c\u0442\u0440, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u043b\u0435\u0439
-# roleNotifications=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u043e\u043b\u0435\u0439
+# roleNotifications=\u00d0\u00a3\u00d0\u00b2\u00d0\u00b5\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00bd\u00d0\u00b0 \u00d0\u00be\u00d1\u0081\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00b5 \u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 roleNotifications=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u043e\u043b\u0435\u0439
-# roleNotificationsWarning=\u041d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0436\u043e\u043a, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u043b\u0435\u0439
+# roleNotificationsWarning=\u00d0\u009d\u00d0\u00b5 \u00d1\u0083\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b8\u00d0\u00b2\u00d0\u00b0\u00d0\u00b9\u00d1\u0082\u00d0\u00b5 \u00d1\u008d\u00d1\u0082\u00d0\u00be\u00d1\u0082 \u00d1\u0084\u00d0\u00bb\u00d0\u00b0\u00d0\u00b6\u00d0\u00be\u00d0\u00ba, \u00d0\u00b5\u00d1\u0081\u00d0\u00bb\u00d0\u00b8 \u00d1\u0081\u00d0\u00be\u00d0\u00b1\u00d1\u008b\u00d1\u0082\u00d0\u00b8\u00d0\u00b5 \u00d0\u00bd\u00d0\u00b5 \u00d0\u00bf\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d0\u00b0\u00d0\u00b7\u00d0\u00bd\u00d0\u00b0\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00b4\u00d0\u00bb\u00d1\u008f \u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d0\u00b5\u00d0\u00b9
 roleNotificationsWarning=\u041d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u043b\u0435\u0439
-# isActive=\u0410\u043a\u0442\u0438\u0432\u043d\u043e
+# isActive=\u00d0\u0090\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00be
 isActive=\u0410\u043a\u0442\u0438\u0432\u043d\u043e
-# checkUserAbout=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438
+# checkUserAbout=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d1\u008c\u00d0\u00b7\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d0\u00b8
 checkUserAbout=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438
-# checkRoleAbout=\u0420\u043e\u043b\u0438
+# checkRoleAbout=\u00d0\u00a0\u00d0\u00be\u00d0\u00bb\u00d0\u00b8
 checkRoleAbout=\u0420\u043e\u043b\u0438

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications.properties
index 3456c87..c8b5711 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications.properties
@@ -24,8 +24,6 @@ notification=Notification
 about=About
 events=Events
 selfAsRecipient=Include users matching About
-recipientAttrType=Recipients e-mail attribute type
-recipientAttrName=Recipients e-mail attribute schema
 checkRecipients=Search recipients
 checkAbout=All
 userFilter=User filter

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_it.properties
index 8b8a257..94113c6 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_it.properties
@@ -24,8 +24,6 @@ notification=Notifica
 about=Soggetti
 events=Eventi
 selfAsRecipient=Includi i soggetti
-recipientAttrType=Tipo attributo e-mail destinatari
-recipientAttrName=Schema attributo e-mail destinatari
 checkRecipients=Cerca i destinatari
 checkAbout=Tutto
 userFilter=Filtro utenti

http://git-wip-us.apache.org/repos/asf/syncope/blob/8e162494/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_pt_BR.properties
index 97483b8..8ac31ef 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Notifications_pt_BR.properties
@@ -24,8 +24,6 @@ notification=Notifica\u00e7\u00e3o
 about=Sobre
 events=Eventos
 selfAsRecipient=Incluir usu\u00e1rios relacionados Sobre
-recipientAttrType=Tipo de atributo de destinat\u00e1rio de email.
-recipientAttrName=Destinat\u00e1rios de e-mail para atributos de esquema
 checkRecipients=Buscar Destinat\u00e1rios
 checkAbout=Todos
 userFilter=Filtro usu\u00e1rio