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 2013/09/20 15:10:26 UTC

svn commit: r1524988 [1/2] - in /syncope/branches/1_1_X: common/src/main/java/org/apache/syncope/common/types/ core/src/main/java/org/apache/syncope/core/persistence/beans/ core/src/main/java/org/apache/syncope/core/persistence/beans/user/ core/src/mai...

Author: ilgrosso
Date: Fri Sep 20 13:10:25 2013
New Revision: 1524988

URL: http://svn.apache.org/r1524988
Log:
[SYNCOPE-418] Enforcing name constraints for any schema, resource and configuration

Added:
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameCheck.java
      - copied, changed from r1524938, syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaCheck.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameValidator.java
      - copied, changed from r1524938, syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfCheck.java   (with props)
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfValidator.java   (with props)
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ConfTest.java   (with props)
Removed:
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaCheck.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaValidator.java
Modified:
    syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/EntityViolationType.java
    syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractDerSchema.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSchema.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractVirSchema.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncopeConf.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UDerSchema.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/USchema.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UVirSchema.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AbstractValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ConnInstanceValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/EntitlementValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/InvalidEntityException.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/NotificationValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PolicyValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PropagationTaskValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ReportValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchedTaskValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncTaskValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeRoleValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/DerivedSchemaController.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/DerivedSchemaDataBinder.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java
    syncope/branches/1_1_X/core/src/main/webapp/syncopeClientError.jsp
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/AttrTest.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/DerSchemaTest.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/SchemaTest.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/VirSchemaTest.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/ConfigurationTestITCase.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/DerivedSchemaTestITCase.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/ResourceTestITCase.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/SchemaTestITCase.java
    syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/rest/VirtualSchemaTestITCase.java

Modified: syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/EntityViolationType.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/EntityViolationType.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/EntityViolationType.java (original)
+++ syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/EntityViolationType.java Fri Sep 20 13:10:25 2013
@@ -25,12 +25,12 @@ public enum EntityViolationType {
 
     Standard(""),
     InvalidAccountPolicy("org.apache.syncope.core.validation.accountpolicy"),
-    InvalidEntitlementName("org.apache.syncope.core.validation.entitlement.name"),
     InvalidConnInstanceLocation("org.apache.syncope.core.validation.conninstance.location"),
     InvalidMapping("org.apache.syncope.core.validation.mapping"),
     InvalidMSchema("org.apache.syncope.core.validation.attrvalue.mSchema"),
     InvalidMDerSchema("org.apache.syncope.core.validation.attrvalue.mDerSchema"),
     InvalidMVirSchema("org.apache.syncope.core.validation.attrvalue.mVirSchema"),
+    InvalidName("org.apache.syncope.core.validation.name"),
     InvalidNotification("org.apache.syncope.core.validation.notification"),
     InvalidPassword("org.apache.syncope.core.validation.syncopeuser.password"),
     InvalidPasswordPolicy("org.apache.syncope.core.validation.passwordpolicy"),
@@ -42,7 +42,8 @@ public enum EntityViolationType {
     InvalidReport("org.apache.syncope.core.validation.report"),
     InvalidResource("org.apache.syncope.core.validation.externalresource"),
     InvalidRoleOwner("org.apache.syncope.core.validation.syncoperole.owner"),
-    InvalidSchemaTypeSpecification("org.apache.syncope.core.validation.attrvalue.schemaTypeSpecification"),
+    InvalidSchemaEnum("org.apache.syncope.core.validation.schema.enum"),
+    InvalidSchemaMultivalueUnique("org.apache.syncope.core.validation.schema.multivalueUnique"),
     InvalidSchedTask("org.apache.syncope.core.validation.schedtask"),
     InvalidSyncTask("org.apache.syncope.core.validation.synctask"),
     InvalidSyncPolicy("org.apache.syncope.core.validation.syncpolicy"),
@@ -51,7 +52,6 @@ public enum EntityViolationType {
     InvalidUVirSchema("org.apache.syncope.core.validation.attrvalue.uVirSchema"),
     InvalidUsername("org.apache.syncope.core.validation.syncopeuser.username"),
     InvalidValueList("org.apache.syncope.core.validation.attr.valueList"),
-    MultivalueAndUniqueConstraint("org.apache.syncope.core.validation.schema.multivalueAndUniqueConstraint"),
     MoreThanOneNonNull("org.apache.syncope.core.validation.attrvalue.moreThanOneNonNull");
 
     private String message;

Modified: syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java (original)
+++ syncope/branches/1_1_X/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java Fri Sep 20 13:10:25 2013
@@ -42,16 +42,17 @@ public enum SyncopeClientExceptionType {
     InvalidPropagationTaskExecReport(
     "Syncope.InvalidPropagationTaskExecReport",
     "Syncope.InvalidPropagationTaskExecReport.element"),
-    InvalidUSchema("Syncope.InvalidUSchemaUpdate", "Syncope.InvalidUSchemaUpdate.name"),
-    InvalidUDerSchema("Syncope.InvalidUDerSchemaUpdate", "Syncope.InvalidUDerSchemaUpdate.name"),
-    InvalidUVirSchema("Syncope.InvalidUVirSchemaUpdate", "Syncope.InvalidUVirSchemaUpdate.name"),
-    InvalidRSchema("Syncope.InvalidRSchemaUpdate", "Syncope.InvalidRSchemaUpdate.name"),
-    InvalidRDerSchema("Syncope.InvalidRDerSchemaUpdate", "Syncope.InvalidRDerSchemaUpdate.name"),
-    InvalidRVirSchema("Syncope.InvalidRVirSchemaUpdate", "Syncope.InvalidRVirSchemaUpdate.name"),
-    InvalidMSchema("Syncope.InvalidMSchemaUpdate", "Syncope.InvalidMSchemaUpdate.name"),
-    InvalidMDerSchema("Syncope.InvalidMDerSchemaUpdate", "Syncope.InvalidMDerSchemaUpdate.name"),
-    InvalidMVirSchema("Syncope.InvalidMVirSchemaUpdate", "Syncope.InvalidMVirSchemaUpdate.name"),
-    InvalidSchemaMapping("Syncope.InvalidSchemaMapping", ""),
+    InvalidUSchema("Syncope.InvalidUSchema", "Syncope.InvalidUSchema.name"),
+    InvalidUDerSchema("Syncope.InvalidUDerSchema", "Syncope.InvalidUDerSchema.name"),
+    InvalidUVirSchema("Syncope.InvalidUVirSchema", "Syncope.InvalidUVirSchema.name"),
+    InvalidRSchema("Syncope.InvalidRSchema", "Syncope.InvalidRSchema.name"),
+    InvalidRDerSchema("Syncope.InvalidRDerSchema", "Syncope.InvalidRDerSchema.name"),
+    InvalidRVirSchema("Syncope.InvalidRVirSchema", "Syncope.InvalidRVirSchema.name"),
+    InvalidMSchema("Syncope.InvalidMSchema", "Syncope.InvalidMSchema.name"),
+    InvalidMDerSchema("Syncope.InvalidMDerSchema", "Syncope.InvalidMDerSchema.name"),
+    InvalidMVirSchema("Syncope.InvalidMVirSchema", "Syncope.InvalidMVirSchema.name"),
+    InvalidSchemaMapping("Syncope.InvalidSchemaMapping", "Syncope.InvalidSchemaMapping.name"),
+    InvalidSyncopeConf("Syncope.InvalidSyncopeConf", "Syncope.InvalidSyncopeConf.name"),
     InvalidSyncopeUser("Syncope.InvalidSyncopeUser", "Syncope.InvalidSyncopeUser.element"),
     InvalidExternalResource("Syncope.InvalidExternalResource", "Syncope.InvalidExternalResource.element"),
     InvalidNotification("Syncope.InvalidNotification", "Syncope.InvalidNotification.element"),

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractDerSchema.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractDerSchema.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractDerSchema.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractDerSchema.java Fri Sep 20 13:10:25 2013
@@ -22,8 +22,10 @@ import javax.persistence.Column;
 import javax.persistence.Id;
 import javax.persistence.MappedSuperclass;
 import org.apache.syncope.common.types.AttributeSchemaType;
+import org.apache.syncope.core.persistence.validation.entity.SchemaNameCheck;
 
 @MappedSuperclass
+@SchemaNameCheck
 public abstract class AbstractDerSchema extends AbstractBaseBean {
 
     private static final long serialVersionUID = -6173643493348674060L;

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSchema.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSchema.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSchema.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractSchema.java Fri Sep 20 13:10:25 2013
@@ -34,9 +34,11 @@ import org.apache.syncope.common.types.A
 import org.apache.syncope.core.persistence.validation.attrvalue.AbstractValidator;
 import org.apache.syncope.core.persistence.validation.attrvalue.BasicValidator;
 import org.apache.syncope.core.persistence.validation.entity.SchemaCheck;
+import org.apache.syncope.core.persistence.validation.entity.SchemaNameCheck;
 
 @MappedSuperclass
 @SchemaCheck
+@SchemaNameCheck
 public abstract class AbstractSchema extends AbstractBaseBean {
 
     public static String enumValuesSeparator = ";";
@@ -151,7 +153,7 @@ public abstract class AbstractSchema ext
         if (getValidatorClass() != null && getValidatorClass().length() > 0) {
             try {
                 Constructor validatorConstructor = Class.forName(getValidatorClass()).getConstructor(
-                        new Class[]{getClass().getSuperclass()});
+                        new Class[] {getClass().getSuperclass()});
                 validator = (AbstractValidator) validatorConstructor.newInstance(this);
             } catch (Exception e) {
                 LOG.error("Could not instantiate validator of type " + getValidatorClass()

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractVirSchema.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractVirSchema.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractVirSchema.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/AbstractVirSchema.java Fri Sep 20 13:10:25 2013
@@ -25,13 +25,15 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 
 import org.apache.syncope.common.types.AttributeSchemaType;
+import org.apache.syncope.core.persistence.validation.entity.SchemaNameCheck;
 
 @MappedSuperclass
+@SchemaNameCheck
 public abstract class AbstractVirSchema extends AbstractBaseBean {
 
     @Id
     private String name;
-    
+
     @Basic
     @Min(0)
     @Max(1)
@@ -74,5 +76,4 @@ public abstract class AbstractVirSchema 
     public void setReadonly(final boolean readonly) {
         this.readonly = getBooleanAsInteger(readonly);
     }
-
 }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncopeConf.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncopeConf.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncopeConf.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncopeConf.java Fri Sep 20 13:10:25 2013
@@ -21,8 +21,10 @@ package org.apache.syncope.core.persiste
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;
+import org.apache.syncope.core.persistence.validation.entity.SyncopeConfCheck;
 
 @Entity
+@SyncopeConfCheck
 public class SyncopeConf extends AbstractBaseBean {
 
     private static final long serialVersionUID = -899341077670090120L;
@@ -38,7 +40,7 @@ public class SyncopeConf extends Abstrac
         return key;
     }
 
-    public void setKey(String key) {
+    public void setKey(final String key) {
         this.key = key;
     }
 
@@ -46,7 +48,7 @@ public class SyncopeConf extends Abstrac
         return value;
     }
 
-    public void setValue(String value) {
+    public void setValue(final String value) {
         this.value = value;
     }
 }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UDerSchema.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UDerSchema.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UDerSchema.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UDerSchema.java Fri Sep 20 13:10:25 2013
@@ -20,10 +20,8 @@ package org.apache.syncope.core.persiste
 
 import javax.persistence.Entity;
 import org.apache.syncope.core.persistence.beans.AbstractDerSchema;
-import org.apache.syncope.core.persistence.validation.entity.USchemaCheck;
 
 @Entity
-@USchemaCheck
 public class UDerSchema extends AbstractDerSchema {
 
     private static final long serialVersionUID = 6244467775394201229L;

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/USchema.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/USchema.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/USchema.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/USchema.java Fri Sep 20 13:10:25 2013
@@ -21,11 +21,9 @@ package org.apache.syncope.core.persiste
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
 import org.apache.syncope.core.persistence.beans.AbstractSchema;
-import org.apache.syncope.core.persistence.validation.entity.USchemaCheck;
 
 @Entity
 @Cacheable
-@USchemaCheck
 public class USchema extends AbstractSchema {
 
     private static final long serialVersionUID = -2776513645999914610L;

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UVirSchema.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UVirSchema.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UVirSchema.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/beans/user/UVirSchema.java Fri Sep 20 13:10:25 2013
@@ -21,11 +21,9 @@ package org.apache.syncope.core.persiste
 import javax.persistence.Cacheable;
 import javax.persistence.Entity;
 import org.apache.syncope.core.persistence.beans.AbstractVirSchema;
-import org.apache.syncope.core.persistence.validation.entity.USchemaCheck;
 
 @Entity
 @Cacheable
-@USchemaCheck
 public class UVirSchema extends AbstractVirSchema {
 
     private static final long serialVersionUID = 1089308700791426201L;

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/attrvalue/EmailAddressValidator.java Fri Sep 20 13:10:25 2013
@@ -39,11 +39,9 @@ public class EmailAddressValidator exten
 
     @Override
     protected void doValidate(final AbstractAttrValue attributeValue) throws InvalidAttrValueException {
-
-        Matcher matcher = EMAIL_PATTERN.matcher((CharSequence) attributeValue.getValue());
+        Matcher matcher = EMAIL_PATTERN.matcher(attributeValue.<CharSequence>getValue());
         if (!matcher.matches()) {
-            String error = "\"" + attributeValue.getValue() + "\" is not a valid email address";
-            throw new InvalidAttrValueException(error);
+            throw new InvalidAttrValueException("\"" + attributeValue.getValue() + "\" is not a valid email address");
         }
     }
 }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AbstractValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AbstractValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AbstractValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AbstractValidator.java Fri Sep 20 13:10:25 2013
@@ -18,17 +18,28 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
+import java.lang.annotation.Annotation;
+import java.util.regex.Pattern;
+import javax.validation.ConstraintValidator;
 import org.apache.syncope.common.types.EntityViolationType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class AbstractValidator {
+public abstract class AbstractValidator<A extends Annotation, T> implements ConstraintValidator<A, T> {
 
     /**
      * Logger.
      */
     protected static final Logger LOG = LoggerFactory.getLogger(AbstractValidator.class);
 
+    protected static final Pattern NAME_PATTERN =
+            Pattern.compile("^[\\w \\-@.]+", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CHARACTER_CLASS);
+
+    @Override
+    public void initialize(final A annotation) {
+        // no initialization
+    }
+
     protected final String getTemplate(final EntityViolationType type, final String message) {
         return type.name() + ";" + message;
     }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValidator.java Fri Sep 20 13:10:25 2013
@@ -18,20 +18,14 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.AbstractAttr;
 
-public class AttrValidator extends AbstractValidator implements ConstraintValidator<AttrCheck, AbstractAttr> {
-
-    @Override
-    public void initialize(final AttrCheck constraintAnnotation) {
-    }
+public class AttrValidator extends AbstractValidator<AttrCheck, AbstractAttr> {
 
     @Override
     public boolean isValid(final AbstractAttr object, final ConstraintValidatorContext context) {
-
         boolean isValid;
 
         if (object == null) {

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/AttrValueValidator.java Fri Sep 20 13:10:25 2013
@@ -18,23 +18,16 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.AbstractAttrUniqueValue;
 import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
 import org.apache.syncope.core.persistence.beans.AbstractSchema;
 
-public class AttrValueValidator extends AbstractValidator implements
-        ConstraintValidator<AttrValueCheck, AbstractAttrValue> {
-
-    @Override
-    public void initialize(final AttrValueCheck constraintAnnotation) {
-    }
+public class AttrValueValidator extends AbstractValidator<AttrValueCheck, AbstractAttrValue> {
 
     @Override
     public boolean isValid(final AbstractAttrValue object, final ConstraintValidatorContext context) {
-
         boolean isValid;
 
         if (object == null) {

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ConnInstanceValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ConnInstanceValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ConnInstanceValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ConnInstanceValidator.java Fri Sep 20 13:10:25 2013
@@ -18,24 +18,17 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.ConnInstance;
 import org.apache.syncope.core.util.URIUtil;
 
-public class ConnInstanceValidator extends AbstractValidator implements
-        ConstraintValidator<ConnInstanceCheck, ConnInstance> {
-
-    private static final String[] ALLOWED_SCHEMES = {"file", "connid", "connids"};
-
-    @Override
-    public void initialize(final ConnInstanceCheck constraintAnnotation) {
-    }
+public class ConnInstanceValidator extends AbstractValidator<ConnInstanceCheck, ConnInstance> {
 
     @Override
     public boolean isValid(final ConnInstance connInstance, final ConstraintValidatorContext context) {
         boolean isValid = true;
+
         try {
             URIUtil.buildForConnId(connInstance.getLocation());
         } catch (Exception e) {

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/EntitlementValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/EntitlementValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/EntitlementValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/EntitlementValidator.java Fri Sep 20 13:10:25 2013
@@ -20,24 +20,17 @@ package org.apache.syncope.core.persiste
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.Entitlement;
 
-public class EntitlementValidator extends AbstractValidator implements
-        ConstraintValidator<EntitlementCheck, Entitlement> {
+public class EntitlementValidator extends AbstractValidator<EntitlementCheck, Entitlement> {
 
     private static final Pattern ROLE_ENTITLEMENT_NAME_PATTERN = Pattern.compile("^ROLE_([\\d])+");
 
     @Override
-    public void initialize(final EntitlementCheck constraintAnnotation) {
-    }
-
-    @Override
     public boolean isValid(final Entitlement object, final ConstraintValidatorContext context) {
-
-        boolean isValid = false;
+        boolean isValid;
 
         if (object == null) {
             isValid = true;
@@ -54,7 +47,7 @@ public class EntitlementValidator extend
 
                 context.disableDefaultConstraintViolation();
                 context.buildConstraintViolationWithTemplate(getTemplate(
-                        EntityViolationType.InvalidEntitlementName, object + " cannot have name starting by ROLE_")).
+                        EntityViolationType.InvalidName, object + " cannot have name starting by ROLE_")).
                         addNode("name").addConstraintViolation();
             }
         }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ExternalResourceValidator.java Fri Sep 20 13:10:25 2013
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.commons.lang.StringUtils;
 import org.apache.syncope.common.types.EntityViolationType;
@@ -27,12 +26,7 @@ import org.apache.syncope.core.persisten
 import org.apache.syncope.core.persistence.beans.ExternalResource;
 import org.apache.syncope.core.propagation.PropagationActions;
 
-public class ExternalResourceValidator extends AbstractValidator implements
-        ConstraintValidator<ExternalResourceCheck, ExternalResource> {
-
-    @Override
-    public void initialize(final ExternalResourceCheck constraintAnnotation) {
-    }
+public class ExternalResourceValidator extends AbstractValidator<ExternalResourceCheck, ExternalResource> {
 
     private boolean isValid(final AbstractMappingItem item, final ConstraintValidatorContext context) {
         if (StringUtils.isBlank(item.getExtAttrName())) {
@@ -104,6 +98,13 @@ public class ExternalResourceValidator e
     public boolean isValid(final ExternalResource resource, final ConstraintValidatorContext context) {
         context.disableDefaultConstraintViolation();
 
+        if (!NAME_PATTERN.matcher(resource.getName()).matches()) {
+            context.buildConstraintViolationWithTemplate(
+                    getTemplate(EntityViolationType.InvalidName, "Invalid Resource name")).
+                    addNode("name").addConstraintViolation();
+            return false;
+        }
+
         if (StringUtils.isNotBlank(resource.getPropagationActionsClassName())) {
             Class<?> actionsClass = null;
             boolean isAssignable = false;

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/InvalidEntityException.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/InvalidEntityException.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/InvalidEntityException.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/InvalidEntityException.java Fri Sep 20 13:10:25 2013
@@ -32,7 +32,7 @@ public class InvalidEntityException exte
 
     private String entityClassSimpleName;
 
-    private final Map<Class, Set<EntityViolationType>> violations;
+    private final Map<Class<?>, Set<EntityViolationType>> violations;
 
     public InvalidEntityException(final String entityClassSimpleName,
             final Set<ConstraintViolation<Object>> violations) {
@@ -41,7 +41,7 @@ public class InvalidEntityException exte
 
         this.entityClassSimpleName = entityClassSimpleName;
 
-        this.violations = new HashMap<Class, Set<EntityViolationType>>();
+        this.violations = new HashMap<Class<?>, Set<EntityViolationType>>();
         for (ConstraintViolation<Object> violation : violations) {
             int firstComma = violation.getMessageTemplate().indexOf(';');
 
@@ -70,7 +70,7 @@ public class InvalidEntityException exte
 
     public final boolean hasViolation(final EntityViolationType type) {
         boolean found = false;
-        for (Class entity : violations.keySet()) {
+        for (Class<?> entity : violations.keySet()) {
             if (violations.get(entity).contains(type)) {
                 found = true;
             }
@@ -83,7 +83,7 @@ public class InvalidEntityException exte
         return entityClassSimpleName;
     }
 
-    public final Map<Class, Set<EntityViolationType>> getViolations() {
+    public final Map<Class<?>, Set<EntityViolationType>> getViolations() {
         return violations;
     }
 
@@ -91,7 +91,7 @@ public class InvalidEntityException exte
     public String getMessage() {
         StringBuilder sb = new StringBuilder();
 
-        for (Class entity : violations.keySet()) {
+        for (Class<?> entity : violations.keySet()) {
             sb.append(entity.getSimpleName()).append(" ").append(violations.get(entity).toString()).append(", ");
         }
         sb.delete(sb.lastIndexOf(", "), sb.length());

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/NotificationValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/NotificationValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/NotificationValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/NotificationValidator.java Fri Sep 20 13:10:25 2013
@@ -18,22 +18,15 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.Notification;
 
-public class NotificationValidator extends AbstractValidator implements
-        ConstraintValidator<NotificationCheck, Notification> {
-
-    @Override
-    public void initialize(final NotificationCheck constraintAnnotation) {
-    }
+public class NotificationValidator extends AbstractValidator<NotificationCheck, Notification> {
 
     @Override
     public boolean isValid(final Notification value, final ConstraintValidatorContext context) {
-
         context.disableDefaultConstraintViolation();
 
         boolean isValid = true;

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PolicyValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PolicyValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PolicyValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PolicyValidator.java Fri Sep 20 13:10:25 2013
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.syncope.common.types.AccountPolicySpec;
 import org.apache.syncope.common.types.EntityViolationType;
@@ -31,16 +30,12 @@ import org.apache.syncope.core.persisten
 import org.apache.syncope.core.persistence.dao.PolicyDAO;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class PolicyValidator extends AbstractValidator implements ConstraintValidator<PolicyCheck, Policy> {
+public class PolicyValidator extends AbstractValidator<PolicyCheck, Policy> {
 
     @Autowired
     private PolicyDAO policyDAO;
 
     @Override
-    public void initialize(final PolicyCheck constraintAnnotation) {
-    }
-
-    @Override
     public boolean isValid(final Policy object, final ConstraintValidatorContext context) {
         context.disableDefaultConstraintViolation();
 

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PropagationTaskValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PropagationTaskValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PropagationTaskValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/PropagationTaskValidator.java Fri Sep 20 13:10:25 2013
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persiste
 
 import java.util.List;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 
 import org.apache.syncope.common.types.EntityViolationType;
@@ -28,16 +27,10 @@ import org.apache.syncope.common.types.P
 import org.apache.syncope.core.persistence.beans.PropagationTask;
 import org.apache.syncope.core.persistence.beans.TaskExec;
 
-public class PropagationTaskValidator extends AbstractValidator implements
-        ConstraintValidator<PropagationTaskCheck, PropagationTask> {
-
-    @Override
-    public void initialize(final PropagationTaskCheck constraintAnnotation) {
-    }
+public class PropagationTaskValidator extends AbstractValidator<PropagationTaskCheck, PropagationTask> {
 
     @Override
     public boolean isValid(final PropagationTask task, final ConstraintValidatorContext context) {
-
         boolean isValid;
 
         if (task == null) {

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ReportValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ReportValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ReportValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/ReportValidator.java Fri Sep 20 13:10:25 2013
@@ -22,7 +22,6 @@ import java.text.ParseException;
 import java.util.HashSet;
 import java.util.Set;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 
 import org.apache.syncope.common.report.ReportletConf;
@@ -30,16 +29,11 @@ import org.apache.syncope.common.types.E
 import org.apache.syncope.core.persistence.beans.Report;
 import org.quartz.CronExpression;
 
-public class ReportValidator extends AbstractValidator implements ConstraintValidator<ReportCheck, Report> {
-
-    @Override
-    public void initialize(final ReportCheck constraintAnnotation) {
-    }
+public class ReportValidator extends AbstractValidator<ReportCheck, Report> {
 
     @Override
     @SuppressWarnings("ResultOfObjectAllocationIgnored")
     public boolean isValid(final Report object, final ConstraintValidatorContext context) {
-
         boolean isValid = true;
 
         if (object.getCronExpression() != null) {

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchedTaskValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchedTaskValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchedTaskValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchedTaskValidator.java Fri Sep 20 13:10:25 2013
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persiste
 
 import java.text.ParseException;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 
 import org.apache.syncope.common.types.EntityViolationType;
@@ -28,16 +27,11 @@ import org.apache.syncope.core.persisten
 import org.quartz.CronExpression;
 import org.quartz.Job;
 
-public class SchedTaskValidator extends AbstractValidator implements ConstraintValidator<SchedTaskCheck, SchedTask> {
-
-    @Override
-    public void initialize(final SchedTaskCheck constraintAnnotation) {
-    }
+public class SchedTaskValidator extends AbstractValidator<SchedTaskCheck, SchedTask> {
 
     @Override
     public boolean isValid(final SchedTask object, final ConstraintValidatorContext context) {
-
-        boolean isValid = true;
+        boolean isValid;
 
         Class<?> jobClass = null;
         try {

Copied: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameCheck.java (from r1524938, syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaCheck.java)
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameCheck.java?p2=syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameCheck.java&p1=syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaCheck.java&r1=1524938&r2=1524988&rev=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaCheck.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameCheck.java Fri Sep 20 13:10:25 2013
@@ -29,9 +29,9 @@ import javax.validation.Payload;
 
 @Target( { ElementType.TYPE })
 @Retention(RetentionPolicy.RUNTIME)
-@Constraint(validatedBy = USchemaValidator.class)
+@Constraint(validatedBy = SchemaNameValidator.class)
 @Documented
-public @interface USchemaCheck {
+public @interface SchemaNameCheck {
 
     String message() default "{org.apache.syncope.core.validation.schema}";
 

Copied: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameValidator.java (from r1524938, syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaValidator.java)
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameValidator.java?p2=syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameValidator.java&p1=syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaValidator.java&r1=1524938&r2=1524988&rev=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/USchemaValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaNameValidator.java Fri Sep 20 13:10:25 2013
@@ -18,66 +18,110 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import java.util.Arrays;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
-import javax.persistence.Transient;
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
+import org.apache.commons.lang3.ClassUtils;
 
 import org.apache.syncope.common.types.EntityViolationType;
+import org.apache.syncope.core.persistence.beans.membership.MDerSchema;
+import org.apache.syncope.core.persistence.beans.membership.MSchema;
+import org.apache.syncope.core.persistence.beans.membership.MVirSchema;
+import org.apache.syncope.core.persistence.beans.membership.Membership;
+import org.apache.syncope.core.persistence.beans.role.RDerSchema;
+import org.apache.syncope.core.persistence.beans.role.RSchema;
+import org.apache.syncope.core.persistence.beans.role.RVirSchema;
+import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
+import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
 import org.apache.syncope.core.persistence.beans.user.UDerSchema;
 import org.apache.syncope.core.persistence.beans.user.USchema;
 import org.apache.syncope.core.persistence.beans.user.UVirSchema;
 
-public class USchemaValidator extends AbstractValidator implements ConstraintValidator<USchemaCheck, Object> {
+public class SchemaNameValidator extends AbstractValidator<SchemaNameCheck, Object> {
 
-    @Transient
-    private static List<String> PERMITTED_USCHEMA_NAMES = Arrays.asList(new String[]{"failedLogins", "username",
-                "password", "lastLoginDate", "creationDate", "changePwdDate"});
+    private static final List<String> UNALLOWED_USCHEMA_NAMES = new ArrayList<String>();
 
-    @Override
-    public void initialize(final USchemaCheck constraintAnnotation) {
-    }
+    private static final List<String> UNALLOWED_MSCHEMA_NAMES = new ArrayList<String>();
 
-    @Override
-    public boolean isValid(final Object object, final ConstraintValidatorContext context) {
+    private static final List<String> UNALLOWED_RSCHEMA_NAMES = new ArrayList<String>();
 
-        EntityViolationType violation = null;
+    static {
+        initUnallowedSchemaNames(SyncopeUser.class, UNALLOWED_USCHEMA_NAMES);
+        initUnallowedSchemaNames(Membership.class, UNALLOWED_MSCHEMA_NAMES);
+        initUnallowedSchemaNames(SyncopeRole.class, UNALLOWED_RSCHEMA_NAMES);
+    }
 
-        try {
-            if (object != null) {
-                final String schemaName;
-
-                if (object instanceof USchema) {
-                    schemaName = ((USchema) object).getName();
-                    violation = EntityViolationType.InvalidUSchema;
-                } else if (object instanceof UDerSchema) {
-                    schemaName = ((UDerSchema) object).getName();
-                    violation = EntityViolationType.InvalidUDerSchema;
-                } else if (object instanceof UVirSchema) {
-                    schemaName = ((UVirSchema) object).getName();
-                    violation = EntityViolationType.InvalidUVirSchema;
-                } else {
-                    schemaName = null;
-                }
+    private static void initUnallowedSchemaNames(final Class<?> entityClass, final List<String> names) {
+        List<Class<?>> classes = ClassUtils.getAllSuperclasses(entityClass);
+        classes.add(SyncopeUser.class);
+        for (Class<?> clazz : classes) {
+            for (Field field : clazz.getDeclaredFields()) {
+                if (!Collection.class.isAssignableFrom(field.getType())
+                        && !Map.class.isAssignableFrom(field.getType())) {
 
-                if (PERMITTED_USCHEMA_NAMES.contains(schemaName)) {
-                    throw new Exception("Schema name not permitted");
+                    names.add(field.getName());
                 }
             }
+        }
+    }
 
-            return true;
-        } catch (Exception e) {
-            LOG.error("Error saving schema", e);
+    @Override
+    public boolean isValid(final Object object, final ConstraintValidatorContext context) {
+        final String schemaName;
+        final List<String> unallowedNames;
 
-            context.disableDefaultConstraintViolation();
+        if (object instanceof USchema) {
+            schemaName = ((USchema) object).getName();
+            unallowedNames = UNALLOWED_USCHEMA_NAMES;
+        } else if (object instanceof UDerSchema) {
+            schemaName = ((UDerSchema) object).getName();
+            unallowedNames = UNALLOWED_USCHEMA_NAMES;
+        } else if (object instanceof UVirSchema) {
+            schemaName = ((UVirSchema) object).getName();
+            unallowedNames = UNALLOWED_USCHEMA_NAMES;
+        } else if (object instanceof MSchema) {
+            schemaName = ((MSchema) object).getName();
+            unallowedNames = UNALLOWED_MSCHEMA_NAMES;
+        } else if (object instanceof MDerSchema) {
+            schemaName = ((MDerSchema) object).getName();
+            unallowedNames = UNALLOWED_MSCHEMA_NAMES;
+        } else if (object instanceof MVirSchema) {
+            schemaName = ((MVirSchema) object).getName();
+            unallowedNames = UNALLOWED_MSCHEMA_NAMES;
+        } else if (object instanceof RSchema) {
+            schemaName = ((RSchema) object).getName();
+            unallowedNames = UNALLOWED_RSCHEMA_NAMES;
+        } else if (object instanceof RDerSchema) {
+            schemaName = ((RDerSchema) object).getName();
+            unallowedNames = UNALLOWED_RSCHEMA_NAMES;
+        } else if (object instanceof RVirSchema) {
+            schemaName = ((RVirSchema) object).getName();
+            unallowedNames = UNALLOWED_RSCHEMA_NAMES;
+        } else {
+            schemaName = null;
+            unallowedNames = Collections.emptyList();
+        }
 
+        boolean isValid = NAME_PATTERN.matcher(schemaName).matches();
+        if (!isValid) {
+            context.disableDefaultConstraintViolation();
+            context.buildConstraintViolationWithTemplate(
+                    getTemplate(EntityViolationType.InvalidName, "Invalid Schema name")).
+                    addNode("name").addConstraintViolation();
+        } else if (unallowedNames.contains(schemaName)) {
+            context.disableDefaultConstraintViolation();
             context.buildConstraintViolationWithTemplate(
-                    getTemplate(violation, e.getMessage())).
-                    addNode(object.getClass().getSimpleName()).addConstraintViolation();
+                    getTemplate(EntityViolationType.InvalidName, "Schema name not allowed: " + schemaName)).
+                    addNode("name").addConstraintViolation();
 
             return false;
         }
+
+        return isValid;
     }
 }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SchemaValidator.java Fri Sep 20 13:10:25 2013
@@ -18,58 +18,35 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
+import org.apache.commons.lang3.StringUtils;
 
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.common.types.AttributeSchemaType;
 import org.apache.syncope.core.persistence.beans.AbstractSchema;
 
-public class SchemaValidator extends AbstractValidator implements ConstraintValidator<SchemaCheck, AbstractSchema> {
+public class SchemaValidator extends AbstractValidator<SchemaCheck, AbstractSchema> {
 
     @Override
-    public void initialize(final SchemaCheck constraintAnnotation) {
-    }
-
-    @Override
-    public boolean isValid(final AbstractSchema object, final ConstraintValidatorContext context) {
-
-        boolean isValid = false;
-        EntityViolationType violation = null;
-
-        try {
-            if (object == null) {
-                isValid = true;
-            } else {
-                isValid = object.getType() == null || !object.getType().equals(AttributeSchemaType.Enum)
-                        || object.getEnumerationValues() != null;
-
-                if (!isValid) {
-                    violation = EntityViolationType.InvalidSchemaTypeSpecification;
-
-                    throw new Exception(object + " miss enumeration values");
-                }
-
-                isValid = object.isMultivalue()
-                        ? !object.isUniqueConstraint()
-                        : true;
-
-                if (!isValid) {
-                    violation = EntityViolationType.MultivalueAndUniqueConstraint;
-
-                    throw new Exception(object + " cannot be multivalue and have unique constraint at the same time");
-                }
-            }
-
-            return isValid;
-        } catch (Exception e) {
-            LOG.error("Error saving schema", e);
-
+    public boolean isValid(final AbstractSchema schema, final ConstraintValidatorContext context) {
+        boolean isValid = schema.getType() != AttributeSchemaType.Enum
+                || StringUtils.isNotBlank(schema.getEnumerationValues());
+        if (!isValid) {
             context.disableDefaultConstraintViolation();
-            context.buildConstraintViolationWithTemplate(getTemplate(violation, e.getMessage())).
-                    addNode(object.getClass().getSimpleName()).addConstraintViolation();
-
-            return false;
+            context.buildConstraintViolationWithTemplate(
+                    getTemplate(EntityViolationType.InvalidSchemaEnum, "Enumeration values missing")).
+                    addNode("enumerationValues").addConstraintViolation();
+        } else {
+            isValid = !schema.isMultivalue() || !schema.isUniqueConstraint();
+            if (!isValid) {
+                context.disableDefaultConstraintViolation();
+                context.buildConstraintViolationWithTemplate(
+                        getTemplate(EntityViolationType.InvalidSchemaMultivalueUnique,
+                        "Cannot contemporary be multivalue and have unique constraint")).
+                        addNode("multiValue").addConstraintViolation();
+            }
         }
+
+        return isValid;
     }
 }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncTaskValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncTaskValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncTaskValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncTaskValidator.java Fri Sep 20 13:10:25 2013
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 
 import org.apache.commons.lang.StringUtils;
@@ -26,7 +25,7 @@ import org.apache.syncope.common.types.E
 import org.apache.syncope.core.persistence.beans.SyncTask;
 import org.apache.syncope.core.sync.SyncActions;
 
-public class SyncTaskValidator extends AbstractValidator implements ConstraintValidator<SyncTaskCheck, SyncTask> {
+public class SyncTaskValidator extends AbstractValidator<SyncTaskCheck, SyncTask> {
 
     private final SchedTaskValidator schedV;
 
@@ -37,49 +36,38 @@ public class SyncTaskValidator extends A
     }
 
     @Override
-    public void initialize(final SyncTaskCheck constraintAnnotation) {
-    }
-
-    @Override
     public boolean isValid(final SyncTask object, final ConstraintValidatorContext context) {
+        boolean isValid = schedV.isValid(object, context);
+
+        if (isValid) {
+            isValid = object.getResource() != null;
+            if (!isValid) {
+                LOG.error("Resource is null");
+
+                context.disableDefaultConstraintViolation();
+                context.buildConstraintViolationWithTemplate(
+                        getTemplate(EntityViolationType.InvalidSyncTask, "Resource cannot be null")).
+                        addNode("resource").addConstraintViolation();
+            }
 
-        boolean isValid;
+            if (StringUtils.isNotBlank(object.getActionsClassName())) {
+                Class<?> actionsClass = null;
+                boolean isAssignable = false;
+                try {
+                    actionsClass = Class.forName(object.getActionsClassName());
+                    isAssignable = SyncActions.class.isAssignableFrom(actionsClass);
+                } catch (Exception e) {
+                    LOG.error("Invalid SyncActions specified", e);
+                    isValid = false;
+                }
 
-        if (object == null) {
-            isValid = true;
-        } else {
-            isValid = schedV.isValid(object, context);
-
-            if (isValid) {
-                isValid = object.getResource() != null;
-                if (!isValid) {
-                    LOG.error("Resource is null");
+                if (actionsClass == null || !isAssignable) {
+                    isValid = false;
 
                     context.disableDefaultConstraintViolation();
                     context.buildConstraintViolationWithTemplate(
-                            getTemplate(EntityViolationType.InvalidSyncTask, "Resource cannot be null")).
-                            addNode("resource").addConstraintViolation();
-                }
-
-                if (StringUtils.isNotBlank(object.getActionsClassName())) {
-                    Class<?> actionsClass = null;
-                    boolean isAssignable = false;
-                    try {
-                        actionsClass = Class.forName(object.getActionsClassName());
-                        isAssignable = SyncActions.class.isAssignableFrom(actionsClass);
-                    } catch (Exception e) {
-                        LOG.error("Invalid SyncActions specified", e);
-                        isValid = false;
-                    }
-
-                    if (actionsClass == null || !isAssignable) {
-                        isValid = false;
-
-                        context.disableDefaultConstraintViolation();
-                        context.buildConstraintViolationWithTemplate(
-                                getTemplate(EntityViolationType.InvalidSyncTask, "Invalid class name")).
-                                addNode("actionsClassName").addConstraintViolation();
-                    }
+                            getTemplate(EntityViolationType.InvalidSyncTask, "Invalid class name")).
+                            addNode("actionsClassName").addConstraintViolation();
                 }
             }
         }

Added: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfCheck.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfCheck.java?rev=1524988&view=auto
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfCheck.java (added)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfCheck.java Fri Sep 20 13:10:25 2013
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.persistence.validation.entity;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.validation.Constraint;
+import javax.validation.Payload;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Constraint(validatedBy = SyncopeConfValidator.class)
+@Documented
+public @interface SyncopeConfCheck {
+
+    String message() default "{org.apache.syncope.core.validation.syncopeConf}";
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default {};
+}

Propchange: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfCheck.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfCheck.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfCheck.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfValidator.java?rev=1524988&view=auto
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfValidator.java (added)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfValidator.java Fri Sep 20 13:10:25 2013
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.persistence.validation.entity;
+
+import javax.validation.ConstraintValidatorContext;
+import org.apache.syncope.common.types.EntityViolationType;
+import org.apache.syncope.core.persistence.beans.SyncopeConf;
+
+public class SyncopeConfValidator extends AbstractValidator<SyncopeConfCheck, SyncopeConf> {
+
+    @Override
+    public boolean isValid(final SyncopeConf syncopeConf, final ConstraintValidatorContext context) {
+        boolean isValid = true;
+
+        if (!NAME_PATTERN.matcher(syncopeConf.getKey()).matches()) {
+            isValid = false;
+
+            context.disableDefaultConstraintViolation();
+            context.buildConstraintViolationWithTemplate(
+                    getTemplate(EntityViolationType.InvalidName, "Invalid SyncopeConf key")).
+                    addNode("name").addConstraintViolation();
+        }
+
+        return isValid;
+    }
+}

Propchange: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfValidator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfValidator.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeConfValidator.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeRoleValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeRoleValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeRoleValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeRoleValidator.java Fri Sep 20 13:10:25 2013
@@ -18,17 +18,11 @@
  */
 package org.apache.syncope.core.persistence.validation.entity;
 
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
 
-public class SyncopeRoleValidator extends AbstractValidator implements
-        ConstraintValidator<SyncopeRoleCheck, SyncopeRole> {
-
-    @Override
-    public void initialize(final SyncopeRoleCheck constraintAnnotation) {
-    }
+public class SyncopeRoleValidator extends AbstractValidator<SyncopeRoleCheck, SyncopeRole> {
 
     @Override
     public boolean isValid(final SyncopeRole object, final ConstraintValidatorContext context) {

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/persistence/validation/entity/SyncopeUserValidator.java Fri Sep 20 13:10:25 2013
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persiste
 
 import java.util.ArrayList;
 import java.util.List;
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
 import org.apache.syncope.common.types.AccountPolicySpec;
 import org.apache.syncope.common.types.EntityViolationType;
@@ -37,8 +36,7 @@ import org.apache.syncope.core.policy.Pa
 import org.apache.syncope.core.policy.PolicyEvaluator;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class SyncopeUserValidator extends AbstractValidator implements
-        ConstraintValidator<SyncopeUserCheck, SyncopeUser> {
+public class SyncopeUserValidator extends AbstractValidator<SyncopeUserCheck, SyncopeUser> {
 
     @Autowired
     private PolicyDAO policyDAO;
@@ -53,10 +51,6 @@ public class SyncopeUserValidator extend
     private AccountPolicyEnforcer apEnforcer;
 
     @Override
-    public void initialize(final SyncopeUserCheck constraintAnnotation) {
-    }
-
-    @Override
     public boolean isValid(final SyncopeUser object, final ConstraintValidatorContext context) {
         context.disableDefaultConstraintViolation();
 

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/DerivedSchemaController.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/DerivedSchemaController.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/DerivedSchemaController.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/DerivedSchemaController.java Fri Sep 20 13:10:25 2013
@@ -63,7 +63,6 @@ public class DerivedSchemaController ext
     public DerivedSchemaTO create(final HttpServletResponse response,
             @RequestBody final DerivedSchemaTO derSchemaTO, @PathVariable("kind") final String kind) {
 
-
         if (StringUtils.isBlank(derSchemaTO.getName())) {
             SyncopeClientCompositeErrorException sccee =
                     new SyncopeClientCompositeErrorException(HttpStatus.BAD_REQUEST);

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/DerivedSchemaDataBinder.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/DerivedSchemaDataBinder.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/DerivedSchemaDataBinder.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/data/DerivedSchemaDataBinder.java Fri Sep 20 13:10:25 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.rest.data;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.to.DerivedSchemaTO;
 import org.apache.syncope.common.types.SyncopeClientExceptionType;
 import org.apache.syncope.common.validation.SyncopeClientCompositeErrorException;
@@ -38,15 +39,13 @@ public class DerivedSchemaDataBinder {
     private AbstractDerSchema populate(final AbstractDerSchema derSchema, final DerivedSchemaTO derSchemaTO) {
         SyncopeClientCompositeErrorException scce = new SyncopeClientCompositeErrorException(HttpStatus.BAD_REQUEST);
 
-        if (derSchemaTO.getExpression() == null) {
-            SyncopeClientException requiredValuesMissing = new SyncopeClientException(
-                    SyncopeClientExceptionType.RequiredValuesMissing);
+        if (StringUtils.isBlank(derSchemaTO.getExpression())) {
+            SyncopeClientException requiredValuesMissing =
+                    new SyncopeClientException(SyncopeClientExceptionType.RequiredValuesMissing);
             requiredValuesMissing.addElement("expression");
 
             scce.addException(requiredValuesMissing);
-        }
-
-        if (!jexlUtil.isExpressionValid(derSchemaTO.getExpression())) {
+        } else if (!jexlUtil.isExpressionValid(derSchemaTO.getExpression())) {
             SyncopeClientException invalidMandatoryCondition = new SyncopeClientException(
                     SyncopeClientExceptionType.InvalidValues);
             invalidMandatoryCondition.addElement(derSchemaTO.getExpression());

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/utils/RestServiceExceptionMapper.java Fri Sep 20 13:10:25 2013
@@ -174,7 +174,7 @@ public class RestServiceExceptionMapper 
 
             responseBuilder.header(SyncopeClientErrorHandler.EXCEPTION_TYPE_HEADER, exType.getHeaderValue());
 
-            for (@SuppressWarnings("rawtypes") Map.Entry<Class, Set<EntityViolationType>> violation
+            for (Map.Entry<Class<?>, Set<EntityViolationType>> violation
                     : ((InvalidEntityException) ex).getViolations().entrySet()) {
 
                 for (EntityViolationType violationType : violation.getValue()) {

Modified: syncope/branches/1_1_X/core/src/main/webapp/syncopeClientError.jsp
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/webapp/syncopeClientError.jsp?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/webapp/syncopeClientError.jsp (original)
+++ syncope/branches/1_1_X/core/src/main/webapp/syncopeClientError.jsp Fri Sep 20 13:10:25 2013
@@ -39,7 +39,7 @@ under the License.
 <%@page import="org.springframework.dao.DataIntegrityViolationException"%>
 <%@page import="org.springframework.orm.jpa.JpaSystemException"%>
 
-<%!    static final Logger LOG = LoggerFactory.getLogger(AbstractController.class);%>
+<%! static final Logger LOG = LoggerFactory.getLogger(AbstractController.class);%>
 
 <%
     Throwable ex = pageContext.getErrorData().getThrowable();
@@ -54,7 +54,7 @@ under the License.
 
         response.setHeader(SyncopeClientErrorHandler.EXCEPTION_TYPE_HEADER, exType.getHeaderValue());
 
-        for (Map.Entry<Class, Set<EntityViolationType>> violation : ((InvalidEntityException) ex).getViolations().
+        for (Map.Entry<Class<?>, Set<EntityViolationType>> violation : ((InvalidEntityException) ex).getViolations().
                 entrySet()) {
 
             for (EntityViolationType violationType : violation.getValue()) {

Modified: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/AttrTest.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/AttrTest.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/AttrTest.java (original)
+++ syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/AttrTest.java Fri Sep 20 13:10:25 2013
@@ -76,7 +76,6 @@ public class AttrTest extends AbstractDA
 
     @Test
     public void save() throws ClassNotFoundException {
-
         SyncopeUser user = userDAO.find(1L);
 
         USchema emailSchema = userSchemaDAO.find("email", USchema.class);
@@ -118,7 +117,6 @@ public class AttrTest extends AbstractDA
 
     @Test
     public void checkForEnumType() throws ClassNotFoundException {
-
         SyncopeUser user = userDAO.find(1L);
 
         USchema gender = userSchemaDAO.find("gender", USchema.class);

Added: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ConfTest.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ConfTest.java?rev=1524988&view=auto
==============================================================================
--- syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ConfTest.java (added)
+++ syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ConfTest.java Fri Sep 20 13:10:25 2013
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.persistence.dao;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.apache.syncope.common.types.EntityViolationType;
+import org.apache.syncope.core.persistence.beans.SyncopeConf;
+import org.apache.syncope.core.persistence.validation.entity.InvalidEntityException;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ConfTest extends AbstractDAOTest {
+
+    @Autowired
+    private ConfDAO confDAO;
+
+    @Test
+    public void issueSYNCOPE418() {
+        SyncopeConf conf = new SyncopeConf();
+        conf.setKey("http://schemas.examples.org/security/authorization/organizationUnit");
+
+        try {
+            confDAO.save(conf);
+            fail();
+        } catch (InvalidEntityException e) {
+            assertTrue(e.hasViolation(EntityViolationType.InvalidName));
+        }
+    }
+}

Propchange: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ConfTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ConfTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ConfTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/DerSchemaTest.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/DerSchemaTest.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/DerSchemaTest.java (original)
+++ syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/DerSchemaTest.java Fri Sep 20 13:10:25 2013
@@ -21,11 +21,15 @@ package org.apache.syncope.core.persiste
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.util.List;
 
 import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.user.UDerSchema;
+import org.apache.syncope.core.persistence.validation.entity.InvalidEntityException;
 import org.apache.syncope.core.util.AttributableUtil;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -71,4 +75,17 @@ public class DerSchemaTest extends Abstr
         UDerSchema actual = derSchemaDAO.find("cn", UDerSchema.class);
         assertNull("delete did not work", actual);
     }
+
+    @Test
+    public void issueSYNCOPE418() {
+        UDerSchema schema = new UDerSchema();
+        schema.setName("http://schemas.examples.org/security/authorization/organizationUnit");
+
+        try {
+            derSchemaDAO.save(schema);
+            fail();
+        } catch (InvalidEntityException e) {
+            assertTrue(e.hasViolation(EntityViolationType.InvalidName));
+        }
+    }
 }

Modified: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java (original)
+++ syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/NotificationTest.java Fri Sep 20 13:10:25 2013
@@ -119,7 +119,7 @@ public class NotificationTest extends Ab
         notification.setSubject("Test notification");
         notification.setTemplate("test");
 
-        Map<Class, Set<EntityViolationType>> violations;
+        Map<Class<?>, Set<EntityViolationType>> violations;
         try {
             notificationDAO.save(notification);
             violations = null;

Modified: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java (original)
+++ syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/ResourceTest.java Fri Sep 20 13:10:25 2013
@@ -23,11 +23,13 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.common.types.IntMappingType;
 import org.apache.syncope.common.types.MappingPurpose;
 import org.apache.syncope.core.persistence.beans.AbstractMappingItem;
@@ -248,4 +250,17 @@ public class ResourceTest extends Abstra
         ExternalResource actual = resourceDAO.find("ws-target-resource-2");
         assertNull(actual);
     }
+
+    @Test
+    public void issueSYNCOPE418() {
+        ExternalResource resource = new ExternalResource();
+        resource.setName("http://schemas.examples.org/security/authorization/organizationUnit");
+
+        try {
+            resourceDAO.save(resource);
+            fail();
+        } catch (InvalidEntityException e) {
+            assertTrue(e.hasViolation(EntityViolationType.InvalidName));
+        }
+    }
 }

Modified: syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/SchemaTest.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/SchemaTest.java?rev=1524988&r1=1524987&r2=1524988&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/SchemaTest.java (original)
+++ syncope/branches/1_1_X/core/src/test/java/org/apache/syncope/core/persistence/dao/SchemaTest.java Fri Sep 20 13:10:25 2013
@@ -22,11 +22,14 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.util.List;
 
 import org.apache.syncope.common.types.AttributableType;
 import org.apache.syncope.common.types.AttributeSchemaType;
+import org.apache.syncope.common.types.EntityViolationType;
 import org.apache.syncope.core.persistence.beans.AbstractSchema;
 import org.apache.syncope.core.persistence.beans.role.RAttr;
 import org.apache.syncope.core.persistence.beans.role.RSchema;
@@ -142,4 +145,17 @@ public class SchemaTest extends Abstract
         USchema actual = schemaDAO.find("fullname", USchema.class);
         assertNull("delete did not work", actual);
     }
+
+    @Test
+    public void issueSYNCOPE418() {
+        USchema schema = new USchema();
+        schema.setName("http://schemas.examples.org/security/authorization/organizationUnit");
+
+        try {
+            schemaDAO.save(schema);
+            fail();
+        } catch (InvalidEntityException e) {
+            assertTrue(e.hasViolation(EntityViolationType.InvalidName));
+        }
+    }
 }