syncope-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ilgro...@apache.org
Subject [03/52] [abbrv] [partial] syncope git commit: [SYNCOPE-620] Unit tests all in
Date Mon, 12 Jan 2015 16:31:42 GMT
http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/security/src/main/java/org/apache/syncope/server/security/Encryptor.java
----------------------------------------------------------------------
diff --git a/syncope620/server/security/src/main/java/org/apache/syncope/server/security/Encryptor.java b/syncope620/server/security/src/main/java/org/apache/syncope/server/security/Encryptor.java
deleted file mode 100644
index 7cb0a0c..0000000
--- a/syncope620/server/security/src/main/java/org/apache/syncope/server/security/Encryptor.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.security;
-
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.spec.SecretKeySpec;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.common.lib.SyncopeConstants;
-import org.apache.syncope.common.lib.types.CipherAlgorithm;
-import org.jasypt.commons.CommonUtils;
-import org.jasypt.digest.StandardStringDigester;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.crypto.bcrypt.BCrypt;
-import org.springframework.security.crypto.codec.Base64;
-
-public final class Encryptor {
-
-    private static final Logger LOG = LoggerFactory.getLogger(Encryptor.class);
-
-    private static final Map<String, Encryptor> INSTANCES = new ConcurrentHashMap<String, Encryptor>();
-
-    private static final String DEFAULT_SECRET_KEY = "1abcdefghilmnopqrstuvz2!";
-
-    /**
-     * Default value for salted {@link StandardStringDigester#setIterations(int)}.
-     */
-    private static final int DEFAULT_SALT_ITERATIONS = 1;
-
-    /**
-     * Default value for {@link StandardStringDigester#setSaltSizeBytes(int)}.
-     */
-    private static final int DEFAULT_SALT_SIZE_BYTES = 8;
-
-    /**
-     * Default value for {@link StandardStringDigester#setInvertPositionOfPlainSaltInEncryptionResults(boolean)}.
-     */
-    private static final boolean DEFAULT_IPOPSIER = true;
-
-    /**
-     * Default value for salted {@link StandardStringDigester#setInvertPositionOfSaltInMessageBeforeDigesting(boolean)}.
-     */
-    private static final boolean DEFAULT_IPOSIMBD = true;
-
-    /**
-     * Default value for salted {@link StandardStringDigester#setUseLenientSaltSizeCheck(boolean)}.
-     */
-    private static final boolean DEFAULT_ULSSC = true;
-
-    private static String secretKey;
-
-    private static Integer saltIterations;
-
-    private static Integer saltSizeBytes;
-
-    private static Boolean ipopsier;
-
-    private static Boolean iposimbd;
-
-    private static Boolean ulssc;
-
-    static {
-        InputStream propStream = null;
-        try {
-            propStream = Encryptor.class.getResourceAsStream("/security.properties");
-            Properties props = new Properties();
-            props.load(propStream);
-
-            secretKey = props.getProperty("secretKey");
-            saltIterations = Integer.valueOf(props.getProperty("digester.saltIterations"));
-            saltSizeBytes = Integer.valueOf(props.getProperty("digester.saltSizeBytes"));
-            ipopsier = Boolean.valueOf(props.getProperty("digester.invertPositionOfPlainSaltInEncryptionResults"));
-            iposimbd = Boolean.valueOf(props.getProperty("digester.invertPositionOfSaltInMessageBeforeDigesting"));
-            ulssc = Boolean.valueOf(props.getProperty("digester.useLenientSaltSizeCheck"));
-        } catch (Exception e) {
-            LOG.error("Could not read security parameters", e);
-        } finally {
-            IOUtils.closeQuietly(propStream);
-        }
-
-        if (secretKey == null) {
-            secretKey = DEFAULT_SECRET_KEY;
-            LOG.debug("secretKey not found, reverting to default");
-        }
-        if (saltIterations == null) {
-            saltIterations = DEFAULT_SALT_ITERATIONS;
-            LOG.debug("digester.saltIterations not found, reverting to default");
-        }
-        if (saltSizeBytes == null) {
-            saltSizeBytes = DEFAULT_SALT_SIZE_BYTES;
-            LOG.debug("digester.saltSizeBytes not found, reverting to default");
-        }
-        if (ipopsier == null) {
-            ipopsier = DEFAULT_IPOPSIER;
-            LOG.debug("digester.invertPositionOfPlainSaltInEncryptionResults not found, reverting to default");
-        }
-        if (iposimbd == null) {
-            iposimbd = DEFAULT_IPOSIMBD;
-            LOG.debug("digester.invertPositionOfSaltInMessageBeforeDigesting not found, reverting to default");
-        }
-        if (ulssc == null) {
-            ulssc = DEFAULT_ULSSC;
-            LOG.debug("digester.useLenientSaltSizeCheck not found, reverting to default");
-        }
-    }
-
-    public static Encryptor getInstance() {
-        return getInstance(secretKey);
-    }
-
-    public static Encryptor getInstance(final String secretKey) {
-        String actualKey = StringUtils.isBlank(secretKey) ? DEFAULT_SECRET_KEY : secretKey;
-
-        Encryptor instance = INSTANCES.get(actualKey);
-        if (instance == null) {
-            instance = new Encryptor(actualKey);
-            INSTANCES.put(actualKey, instance);
-        }
-
-        return instance;
-    }
-
-    private SecretKeySpec keySpec;
-
-    private Encryptor(final String secretKey) {
-        String actualKey = secretKey;
-        if (actualKey.length() < 16) {
-            StringBuilder actualKeyPadding = new StringBuilder(actualKey);
-            for (int i = 0; i < 16 - actualKey.length(); i++) {
-                actualKeyPadding.append('0');
-            }
-            actualKey = actualKeyPadding.toString();
-            LOG.debug("actualKey too short, adding some random characters");
-        }
-
-        try {
-            keySpec = new SecretKeySpec(ArrayUtils.subarray(
-                    actualKey.getBytes(SyncopeConstants.DEFAULT_ENCODING), 0, 16),
-                    CipherAlgorithm.AES.getAlgorithm());
-        } catch (Exception e) {
-            LOG.error("Error during key specification", e);
-        }
-    }
-
-    public String encode(final String value, final CipherAlgorithm cipherAlgorithm)
-            throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
-            IllegalBlockSizeException, BadPaddingException {
-
-        String encodedValue = null;
-
-        if (value != null) {
-            if (cipherAlgorithm == null || cipherAlgorithm == CipherAlgorithm.AES) {
-                final byte[] cleartext = value.getBytes(SyncopeConstants.DEFAULT_ENCODING);
-
-                final Cipher cipher = Cipher.getInstance(CipherAlgorithm.AES.getAlgorithm());
-                cipher.init(Cipher.ENCRYPT_MODE, keySpec);
-
-                encodedValue = new String(Base64.encode(cipher.doFinal(cleartext)));
-            } else if (cipherAlgorithm == CipherAlgorithm.BCRYPT) {
-                encodedValue = BCrypt.hashpw(value, BCrypt.gensalt());
-            } else {
-                encodedValue = getDigester(cipherAlgorithm).digest(value);
-            }
-        }
-
-        return encodedValue;
-    }
-
-    public boolean verify(final String value, final CipherAlgorithm cipherAlgorithm, final String encodedValue) {
-        boolean res = false;
-
-        try {
-            if (value != null) {
-                if (cipherAlgorithm == null || cipherAlgorithm == CipherAlgorithm.AES) {
-                    res = encode(value, cipherAlgorithm).equals(encodedValue);
-                } else if (cipherAlgorithm == CipherAlgorithm.BCRYPT) {
-                    res = BCrypt.checkpw(value, encodedValue);
-                } else {
-                    res = getDigester(cipherAlgorithm).matches(value, encodedValue);
-                }
-            }
-        } catch (Exception e) {
-            LOG.error("Could not verify encoded value", e);
-        }
-
-        return res;
-    }
-
-    public String decode(final String encodedValue, final CipherAlgorithm cipherAlgorithm)
-            throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
-            IllegalBlockSizeException, BadPaddingException {
-
-        String value = null;
-
-        if (encodedValue != null && cipherAlgorithm == CipherAlgorithm.AES) {
-            final byte[] encoded = encodedValue.getBytes(SyncopeConstants.DEFAULT_ENCODING);
-
-            final Cipher cipher = Cipher.getInstance(CipherAlgorithm.AES.getAlgorithm());
-            cipher.init(Cipher.DECRYPT_MODE, keySpec);
-
-            value = new String(cipher.doFinal(Base64.decode(encoded)), SyncopeConstants.DEFAULT_ENCODING);
-        }
-
-        return value;
-    }
-
-    private StandardStringDigester getDigester(final CipherAlgorithm cipherAlgorithm) {
-        StandardStringDigester digester = new StandardStringDigester();
-
-        if (cipherAlgorithm.getAlgorithm().startsWith("S-")) {
-            // Salted ...
-            digester.setAlgorithm(cipherAlgorithm.getAlgorithm().replaceFirst("S\\-", ""));
-            digester.setIterations(saltIterations);
-            digester.setSaltSizeBytes(saltSizeBytes);
-            digester.setInvertPositionOfPlainSaltInEncryptionResults(ipopsier);
-            digester.setInvertPositionOfSaltInMessageBeforeDigesting(iposimbd);
-            digester.setUseLenientSaltSizeCheck(ulssc);
-        } else {
-            // Not salted ...
-            digester.setAlgorithm(cipherAlgorithm.getAlgorithm());
-            digester.setIterations(1);
-            digester.setSaltSizeBytes(0);
-        }
-
-        digester.setStringOutputType(CommonUtils.STRING_OUTPUT_TYPE_HEXADECIMAL);
-        return digester;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/security/src/main/java/org/apache/syncope/server/security/UnauthorizedRoleException.java
----------------------------------------------------------------------
diff --git a/syncope620/server/security/src/main/java/org/apache/syncope/server/security/UnauthorizedRoleException.java b/syncope620/server/security/src/main/java/org/apache/syncope/server/security/UnauthorizedRoleException.java
deleted file mode 100644
index 6586ccc..0000000
--- a/syncope620/server/security/src/main/java/org/apache/syncope/server/security/UnauthorizedRoleException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.security;
-
-import java.util.Collections;
-import java.util.Set;
-
-public class UnauthorizedRoleException extends RuntimeException {
-
-    private static final long serialVersionUID = 7540587364235915081L;
-
-    private final Set<Long> roleIds;
-
-    public UnauthorizedRoleException(final Set<Long> roleIds) {
-        super("Missing entitlement for role(s) " + roleIds);
-        this.roleIds = roleIds;
-    }
-
-    public UnauthorizedRoleException(final Long roleId) {
-        this(Collections.singleton(roleId));
-    }
-
-    public Set<Long> getRoleIds() {
-        return roleIds;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/security/src/main/resources/security.properties
----------------------------------------------------------------------
diff --git a/syncope620/server/security/src/main/resources/security.properties b/syncope620/server/security/src/main/resources/security.properties
deleted file mode 100644
index c0fcd37..0000000
--- a/syncope620/server/security/src/main/resources/security.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-adminUser=admin
-adminPassword=5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
-adminPasswordAlgorithm=SHA1
-
-anonymousUser=${anonymousUser}
-anonymousKey=${anonymousKey}
-
-secretKey=${secretKey}
-# default for LDAP / RFC2307 SSHA
-digester.saltIterations=1
-digester.saltSizeBytes=8
-digester.invertPositionOfPlainSaltInEncryptionResults=true
-digester.invertPositionOfSaltInMessageBeforeDigesting=true
-digester.useLenientSaltSizeCheck=true
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/spring/pom.xml
----------------------------------------------------------------------
diff --git a/syncope620/server/spring/pom.xml b/syncope620/server/spring/pom.xml
deleted file mode 100644
index ef9ae41..0000000
--- a/syncope620/server/spring/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.syncope</groupId>
-    <artifactId>syncope-server</artifactId>
-    <version>2.0.0-SNAPSHOT</version>
-  </parent>
-
-  <name>Apache Syncope Server Spring Extensions</name>
-  <description>Apache Syncope Server Spring Extensions</description>
-  <groupId>org.apache.syncope.server</groupId>
-  <artifactId>syncope-server-spring</artifactId>
-  <packaging>jar</packaging>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-      
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-context</artifactId>
-    </dependency>
-  </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/ApplicationContextProvider.java
----------------------------------------------------------------------
diff --git a/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/ApplicationContextProvider.java b/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/ApplicationContextProvider.java
deleted file mode 100644
index 0ffba20..0000000
--- a/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/ApplicationContextProvider.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.spring;
-
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.ConfigurableApplicationContext;
-
-public class ApplicationContextProvider implements ApplicationContextAware {
-
-    private static ConfigurableApplicationContext ctx;
-
-    public static ConfigurableApplicationContext getApplicationContext() {
-        return ctx;
-    }
-
-    public static DefaultListableBeanFactory getBeanFactory() {
-        return (DefaultListableBeanFactory) ctx.getBeanFactory();
-    }
-
-    /**
-     * Wiring the ApplicationContext into a static method.
-     *
-     * @param ctx Spring application context
-     */
-    @Override
-    public void setApplicationContext(final ApplicationContext ctx) {
-        ApplicationContextProvider.ctx = (ConfigurableApplicationContext) ctx;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/BeanUtils.java
----------------------------------------------------------------------
diff --git a/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/BeanUtils.java b/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/BeanUtils.java
deleted file mode 100644
index f937b40..0000000
--- a/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/BeanUtils.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.spring;
-
-import static org.springframework.beans.BeanUtils.getPropertyDescriptor;
-import static org.springframework.beans.BeanUtils.getPropertyDescriptors;
-
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.FatalBeanException;
-import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
-
-/**
- * Overrides Spring's BeanUtils not using collection setters but instead getters + addAll() / putAll(),
- * in a JAXB friendly way.
- *
- * Refer to <a href="https://issues.apache.org/jira/browse/SYNCOPE-246">SYNCOPE-246</a> for more information.
- *
- * @see org.springframework.beans.BeanUtils
- */
-public final class BeanUtils {
-
-    private BeanUtils() {
-        // Empty private constructor for static utility classes
-    }
-
-    /**
-     * Copy the property values of the given source bean into the target bean.
-     * <p>
-     * Note: The source and target classes do not have to match or even be derived
-     * from each other, as long as the properties match. Any bean properties that the
-     * source bean exposes but the target bean does not will silently be ignored.
-     * </p><p>
-     * This is just a convenience method. For more complex transfer needs,
-     * consider using a full BeanWrapper.
-     * </p>
-     * @param source the source bean
-     * @param target the target bean
-     * @throws BeansException if the copying failed
-     * @see org.springframework.beans.BeanWrapper
-     */
-    public static void copyProperties(final Object source, final Object target) throws BeansException {
-        copyProperties(source, target, null, (String[]) null);
-    }
-
-    /**
-     * Copy the property values of the given source bean into the given target bean,
-     * only setting properties defined in the given "editable" class (or interface).
-     * <p>
-     * Note: The source and target classes do not have to match or even be derived
-     * from each other, as long as the properties match. Any bean properties that the
-     * source bean exposes but the target bean does not will silently be ignored.
-     * </p><p>
-     * This is just a convenience method. For more complex transfer needs,
-     * consider using a full BeanWrapper.
-     * </p>
-     *
-     * @param source the source bean
-     * @param target the target bean
-     * @param editable the class (or interface) to restrict property setting to
-     * @throws BeansException if the copying failed
-     * @see org.springframework.beans.BeanWrapper
-     */
-    public static void copyProperties(final Object source, final Object target, final Class<?> editable)
-            throws BeansException {
-
-        copyProperties(source, target, editable, (String[]) null);
-    }
-
-    /**
-     * Copy the property values of the given source bean into the given target bean,
-     * ignoring the given "ignoreProperties".
-     * <p>
-     * Note: The source and target classes do not have to match or even be derived
-     * from each other, as long as the properties match. Any bean properties that the
-     * source bean exposes but the target bean does not will silently be ignored.
-     * </p><p>
-     * This is just a convenience method. For more complex transfer needs,
-     * consider using a full BeanWrapper.
-     * </p>
-     *
-     * @param source the source bean
-     * @param target the target bean
-     * @param ignoreProperties array of property names to ignore
-     * @throws BeansException if the copying failed
-     * @see org.springframework.beans.BeanWrapper
-     */
-    public static void copyProperties(final Object source, final Object target, final String... ignoreProperties)
-            throws BeansException {
-
-        copyProperties(source, target, null, ignoreProperties);
-    }
-
-    /**
-     * Copy the property values of the given source bean into the given target bean.
-     * <p>
-     * Note: The source and target classes do not have to match or even be derived
-     * from each other, as long as the properties match. Any bean properties that the
-     * source bean exposes but the target bean does not will silently be ignored.
-     * </p>
-     *
-     * @param source the source bean
-     * @param target the target bean
-     * @param editable the class (or interface) to restrict property setting to
-     * @param ignoreProperties array of property names to ignore
-     * @throws BeansException if the copying failed
-     * @see org.springframework.beans.BeanWrapper
-     */
-    @SuppressWarnings("unchecked")
-    private static void copyProperties(final Object source, final Object target, final Class<?> editable,
-            final String... ignoreProperties) throws BeansException {
-
-        Assert.notNull(source, "Source must not be null");
-        Assert.notNull(target, "Target must not be null");
-
-        Class<?> actualEditable = target.getClass();
-        if (editable != null) {
-            if (!editable.isInstance(target)) {
-                throw new IllegalArgumentException("Target class [" + target.getClass().getName()
-                        + "] not assignable to Editable class [" + editable.getName() + "]");
-            }
-            actualEditable = editable;
-        }
-        PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
-        List<String> ignoreList = (ignoreProperties == null)
-                ? Collections.<String>emptyList() : Arrays.asList(ignoreProperties);
-
-        for (PropertyDescriptor targetPd : targetPds) {
-            if (ignoreProperties == null || (!ignoreList.contains(targetPd.getName()))) {
-                PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());
-                if (sourcePd != null) {
-                    Method readMethod = sourcePd.getReadMethod();
-                    if (readMethod != null) {
-                        Method writeMethod = targetPd.getWriteMethod();
-
-                        try {
-                            // Diverts from Spring's BeanUtils: if no write method is found and property is collection,
-                            // try to use addAll() / putAll().
-                            if (writeMethod == null) {
-                                Object value = readMethod.invoke(source);
-                                Method targetReadMethod = targetPd.getReadMethod();
-                                if (targetReadMethod != null) {
-                                    if (!Modifier.isPublic(targetReadMethod.getDeclaringClass().getModifiers())) {
-                                        targetReadMethod.setAccessible(true);
-                                    }
-                                    Object destValue = targetReadMethod.invoke(target);
-
-                                    if (value instanceof Collection && destValue instanceof Collection) {
-                                        ((Collection) destValue).clear();
-                                        ((Collection) destValue).addAll((Collection) value);
-                                    } else if (value instanceof Map && destValue instanceof Map) {
-                                        ((Map) destValue).clear();
-                                        ((Map) destValue).putAll((Map) value);
-                                    }
-                                }
-                            } else if (ClassUtils.isAssignable(
-                                    writeMethod.getParameterTypes()[0], readMethod.getReturnType())) {
-
-                                if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
-                                    readMethod.setAccessible(true);
-                                }
-                                Object value = readMethod.invoke(source);
-                                if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {
-                                    writeMethod.setAccessible(true);
-                                }
-                                writeMethod.invoke(target, value);
-                            }
-                        } catch (Throwable ex) {
-                            throw new FatalBeanException(
-                                    "Could not copy property '" + targetPd.getName() + "' from source to target", ex);
-                        }
-                    }
-                }
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/ResourceWithFallbackLoader.java
----------------------------------------------------------------------
diff --git a/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/ResourceWithFallbackLoader.java b/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/ResourceWithFallbackLoader.java
deleted file mode 100644
index 9b771b3..0000000
--- a/syncope620/server/spring/src/main/java/org/apache/syncope/server/spring/ResourceWithFallbackLoader.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.spring;
-
-import java.io.IOException;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.ArrayUtils;
-import org.springframework.context.ResourceLoaderAware;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.core.io.support.ResourcePatternResolver;
-
-public class ResourceWithFallbackLoader implements ResourceLoaderAware, ResourcePatternResolver {
-
-    private ResourcePatternResolver resolver;
-
-    private String primary;
-
-    private String fallback;
-
-    @Override
-    public void setResourceLoader(final ResourceLoader resourceLoader) {
-        this.resolver = (ResourcePatternResolver) resourceLoader;
-    }
-
-    public void setPrimary(final String primary) {
-        this.primary = primary;
-    }
-
-    public void setFallback(final String fallback) {
-        this.fallback = fallback;
-    }
-
-    @Override
-    public Resource getResource(final String location) {
-        Resource resource = resolver.getResource(primary + location);
-        if (!resource.exists()) {
-            resource = resolver.getResource(fallback + location);
-        }
-
-        return resource;
-    }
-
-    public Resource getResource() {
-        return getResource(StringUtils.EMPTY);
-    }
-
-    @Override
-    public Resource[] getResources(final String locationPattern) throws IOException {
-        Resource[] resources = resolver.getResources(primary + locationPattern);
-        if (ArrayUtils.isEmpty(resources)) {
-            resources = resolver.getResources(fallback + locationPattern);
-        }
-
-        return resources;
-    }
-
-    public Resource[] getResources() throws IOException {
-        return getResources(StringUtils.EMPTY);
-    }
-
-    @Override
-    public ClassLoader getClassLoader() {
-        return resolver.getClassLoader();
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/utils/pom.xml
----------------------------------------------------------------------
diff --git a/syncope620/server/utils/pom.xml b/syncope620/server/utils/pom.xml
deleted file mode 100644
index 4e9fb6f..0000000
--- a/syncope620/server/utils/pom.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.syncope</groupId>
-    <artifactId>syncope-server</artifactId>
-    <version>2.0.0-SNAPSHOT</version>
-  </parent>
-
-  <name>Apache Syncope Server Utilities</name>
-  <description>Apache Syncope Server Utilities</description>
-  <groupId>org.apache.syncope.server</groupId>
-  <artifactId>syncope-server-utils</artifactId>
-  <packaging>jar</packaging>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-jexl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-databind</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.module</groupId>
-      <artifactId>jackson-module-afterburner</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-tx</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.syncope.server</groupId>
-      <artifactId>syncope-persistence-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.syncope.server</groupId>
-      <artifactId>syncope-provisioning-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.syncope.server</groupId>
-      <artifactId>syncope-server-security</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.syncope.server</groupId>
-      <artifactId>syncope-server-spring</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/ConnObjectUtil.java
----------------------------------------------------------------------
diff --git a/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/ConnObjectUtil.java b/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/ConnObjectUtil.java
deleted file mode 100644
index d2afd35..0000000
--- a/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/ConnObjectUtil.java
+++ /dev/null
@@ -1,764 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.utils;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.common.lib.AttributableOperations;
-import org.apache.syncope.common.lib.mod.AbstractAttributableMod;
-import org.apache.syncope.common.lib.to.AbstractAttributableTO;
-import org.apache.syncope.common.lib.to.AbstractSubjectTO;
-import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.ConnObjectTO;
-import org.apache.syncope.common.lib.to.MembershipTO;
-import org.apache.syncope.common.lib.to.RoleTO;
-import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.AttrSchemaType;
-import org.apache.syncope.common.lib.types.AttributableType;
-import org.apache.syncope.common.lib.types.IntMappingType;
-import org.apache.syncope.common.lib.types.MappingPurpose;
-import org.apache.syncope.common.lib.types.PasswordPolicySpec;
-import org.apache.syncope.persistence.api.attrvalue.validation.ParsingValidationException;
-import org.apache.syncope.persistence.api.dao.ExternalResourceDAO;
-import org.apache.syncope.persistence.api.dao.NotFoundException;
-import org.apache.syncope.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.persistence.api.dao.PolicyDAO;
-import org.apache.syncope.persistence.api.dao.RoleDAO;
-import org.apache.syncope.persistence.api.dao.UserDAO;
-import org.apache.syncope.persistence.api.entity.Attributable;
-import org.apache.syncope.persistence.api.entity.AttributableUtil;
-import org.apache.syncope.persistence.api.entity.ExternalResource;
-import org.apache.syncope.persistence.api.entity.MappingItem;
-import org.apache.syncope.persistence.api.entity.PasswordPolicy;
-import org.apache.syncope.persistence.api.entity.PlainAttrValue;
-import org.apache.syncope.persistence.api.entity.PlainSchema;
-import org.apache.syncope.persistence.api.entity.Subject;
-import org.apache.syncope.persistence.api.entity.VirAttr;
-import org.apache.syncope.persistence.api.entity.membership.Membership;
-import org.apache.syncope.persistence.api.entity.role.Role;
-import org.apache.syncope.persistence.api.entity.task.SyncTask;
-import org.apache.syncope.persistence.api.entity.user.User;
-import org.apache.syncope.provisioning.api.Connector;
-import org.apache.syncope.provisioning.api.ConnectorFactory;
-import org.apache.syncope.provisioning.api.cache.VirAttrCache;
-import org.apache.syncope.provisioning.api.cache.VirAttrCacheValue;
-import org.apache.syncope.server.security.Encryptor;
-import org.apache.syncope.server.security.UnauthorizedRoleException;
-import org.apache.syncope.server.spring.ApplicationContextProvider;
-import org.apache.syncope.server.utils.jexl.JexlUtil;
-import org.identityconnectors.common.Base64;
-import org.identityconnectors.common.security.GuardedByteArray;
-import org.identityconnectors.common.security.GuardedString;
-import org.identityconnectors.framework.common.objects.Attribute;
-import org.identityconnectors.framework.common.objects.ConnectorObject;
-import org.identityconnectors.framework.common.objects.ObjectClass;
-import org.identityconnectors.framework.common.objects.OperationOptions;
-import org.identityconnectors.framework.common.objects.Uid;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-@Component
-public class ConnObjectUtil {
-
-    /**
-     * Logger.
-     */
-    private static final Logger LOG = LoggerFactory.getLogger(ConnObjectUtil.class);
-
-    @Autowired
-    private PolicyDAO policyDAO;
-
-    @Autowired
-    private UserDAO userDAO;
-
-    @Autowired
-    private RoleDAO roleDAO;
-
-    @Autowired
-    private ExternalResourceDAO resourceDAO;
-
-    @Autowired
-    private PlainSchemaDAO plainSchemaDAO;
-
-    @Autowired
-    private PasswordGenerator pwdGen;
-
-    private final Encryptor encryptor = Encryptor.getInstance();
-
-    /**
-     * Virtual attribute cache.
-     */
-    @Autowired
-    private VirAttrCache virAttrCache;
-
-    public ObjectClass fromSubject(final Subject<?, ?, ?> subject) {
-        if (subject == null) {
-            throw new IllegalArgumentException("No ObjectClass could be provided for " + subject);
-        }
-
-        ObjectClass result = null;
-        if (subject instanceof User) {
-            result = ObjectClass.ACCOUNT;
-        }
-        if (subject instanceof Role) {
-            result = ObjectClass.GROUP;
-        }
-
-        return result;
-    }
-
-    /**
-     * Build a UserTO / RoleTO out of connector object attributes and schema mapping.
-     *
-     * @param obj connector object
-     * @param syncTask synchronization task
-     * @param attrUtil AttributableUtil
-     * @param <T> user/role
-     * @return UserTO for the user to be created
-     */
-    @Transactional(readOnly = true)
-    public <T extends AbstractSubjectTO> T getSubjectTO(final ConnectorObject obj, final SyncTask syncTask,
-            final AttributableUtil attrUtil) {
-
-        T subjectTO = getSubjectTOFromConnObject(obj, syncTask, attrUtil);
-
-        // (for users) if password was not set above, generate
-        if (subjectTO instanceof UserTO && StringUtils.isBlank(((UserTO) subjectTO).getPassword())) {
-            final UserTO userTO = (UserTO) subjectTO;
-
-            List<PasswordPolicySpec> ppSpecs = new ArrayList<>();
-
-            PasswordPolicy globalPP = policyDAO.getGlobalPasswordPolicy();
-            if (globalPP != null && globalPP.getSpecification(PasswordPolicySpec.class) != null) {
-                ppSpecs.add(globalPP.getSpecification(PasswordPolicySpec.class));
-            }
-
-            for (MembershipTO memb : userTO.getMemberships()) {
-                Role role = roleDAO.find(memb.getRoleId());
-                if (role != null && role.getPasswordPolicy() != null
-                        && role.getPasswordPolicy().getSpecification(PasswordPolicySpec.class) != null) {
-
-                    ppSpecs.add(role.getPasswordPolicy().getSpecification(PasswordPolicySpec.class));
-                }
-            }
-
-            for (String resName : userTO.getResources()) {
-                ExternalResource resource = resourceDAO.find(resName);
-                if (resource != null && resource.getPasswordPolicy() != null
-                        && resource.getPasswordPolicy().getSpecification(PasswordPolicySpec.class) != null) {
-
-                    ppSpecs.add(resource.getPasswordPolicy().getSpecification(PasswordPolicySpec.class));
-                }
-            }
-
-            String password;
-            try {
-                password = pwdGen.generate(ppSpecs);
-            } catch (InvalidPasswordPolicySpecException e) {
-                LOG.error("Could not generate policy-compliant random password for {}", userTO, e);
-
-                password = SecureRandomUtil.generateRandomPassword(16);
-            }
-            userTO.setPassword(password);
-        }
-
-        return subjectTO;
-    }
-
-    /**
-     * Build an UserMod out of connector object attributes and schema mapping.
-     *
-     * @param key user to be updated
-     * @param obj connector object
-     * @param original subject to get diff from
-     * @param syncTask synchronization task
-     * @param attrUtil AttributableUtil
-     * @param <T> user/role
-     * @return modifications for the user/role to be updated
-     * @throws NotFoundException if given id does not correspond to a T instance
-     * @throws UnauthorizedRoleException if there are no enough entitlements to access the T instance
-     */
-    @SuppressWarnings("unchecked")
-    @Transactional(readOnly = true)
-    public <T extends AbstractAttributableMod> T getAttributableMod(final Long key, final ConnectorObject obj,
-            final AbstractAttributableTO original, final SyncTask syncTask, final AttributableUtil attrUtil)
-            throws NotFoundException, UnauthorizedRoleException {
-
-        final AbstractAttributableTO updated = getSubjectTOFromConnObject(obj, syncTask, attrUtil);
-        updated.setKey(key);
-
-        if (AttributableType.USER == attrUtil.getType()) {
-            // update password if and only if password is really changed
-            final User user = userDAO.authFecthUser(key);
-            if (StringUtils.isBlank(((UserTO) updated).getPassword())
-                    || encryptor.verify(((UserTO) updated).getPassword(),
-                            user.getCipherAlgorithm(), user.getPassword())) {
-
-                ((UserTO) updated).setPassword(null);
-            }
-
-            for (MembershipTO membTO : ((UserTO) updated).getMemberships()) {
-                Membership memb = user.getMembership(membTO.getRoleId());
-                if (memb != null) {
-                    membTO.setKey(memb.getKey());
-                }
-            }
-
-            return (T) AttributableOperations.diff(((UserTO) updated), ((UserTO) original), true);
-        }
-        if (AttributableType.ROLE == attrUtil.getType()) {
-            // reading from connector object cannot change entitlements
-            ((RoleTO) updated).getEntitlements().addAll(((RoleTO) original).getEntitlements());
-            return (T) AttributableOperations.diff(((RoleTO) updated), ((RoleTO) original), true);
-        }
-
-        return null;
-    }
-
-    private <T extends AbstractSubjectTO> T getSubjectTOFromConnObject(final ConnectorObject obj,
-            final SyncTask syncTask, final AttributableUtil attrUtil) {
-
-        final T subjectTO = attrUtil.newSubjectTO();
-
-        // 1. fill with data from connector object
-        for (MappingItem item : attrUtil.getUidToMappingItems(
-                syncTask.getResource(), MappingPurpose.SYNCHRONIZATION)) {
-
-            Attribute attribute = obj.getAttributeByName(item.getExtAttrName());
-
-            AttrTO attributeTO;
-            switch (item.getIntMappingType()) {
-                case UserId:
-                case RoleId:
-                    break;
-
-                case Password:
-                    if (subjectTO instanceof UserTO && attribute != null && attribute.getValue() != null
-                            && !attribute.getValue().isEmpty()) {
-
-                        ((UserTO) subjectTO).setPassword(getPassword(attribute.getValue().get(0)));
-                    }
-                    break;
-
-                case Username:
-                    if (subjectTO instanceof UserTO) {
-                        ((UserTO) subjectTO).setUsername(attribute == null || attribute.getValue().isEmpty()
-                                || attribute.getValue().get(0) == null
-                                        ? null
-                                        : attribute.getValue().get(0).toString());
-                    }
-                    break;
-
-                case RoleName:
-                    if (subjectTO instanceof RoleTO) {
-                        ((RoleTO) subjectTO).setName(attribute == null || attribute.getValue().isEmpty()
-                                || attribute.getValue().get(0) == null
-                                        ? null
-                                        : attribute.getValue().get(0).toString());
-                    }
-                    break;
-
-                case RoleOwnerSchema:
-                    if (subjectTO instanceof RoleTO && attribute != null) {
-                        // using a special attribute (with schema "", that will be ignored) for carrying the
-                        // RoleOwnerSchema value
-                        attributeTO = new AttrTO();
-                        attributeTO.setSchema(StringUtils.EMPTY);
-                        if (attribute.getValue().isEmpty() || attribute.getValue().get(0) == null) {
-                            attributeTO.getValues().add(StringUtils.EMPTY);
-                        } else {
-                            attributeTO.getValues().add(attribute.getValue().get(0).toString());
-                        }
-
-                        ((RoleTO) subjectTO).getPlainAttrs().add(attributeTO);
-                    }
-                    break;
-
-                case UserSchema:
-                case RoleSchema:
-                    attributeTO = new AttrTO();
-                    attributeTO.setSchema(item.getIntAttrName());
-
-                    PlainSchema schema = plainSchemaDAO.find(item.getIntAttrName(), attrUtil.plainSchemaClass());
-
-                    for (Object value : attribute == null || attribute.getValue() == null
-                            ? Collections.emptyList()
-                            : attribute.getValue()) {
-
-                        AttrSchemaType schemaType = schema == null ? AttrSchemaType.String : schema.getType();
-                        if (value != null) {
-                            final PlainAttrValue attrValue = attrUtil.newPlainAttrValue();
-                            switch (schemaType) {
-                                case String:
-                                    attrValue.setStringValue(value.toString());
-                                    break;
-
-                                case Binary:
-                                    attrValue.setBinaryValue((byte[]) value);
-                                    break;
-
-                                default:
-                                    try {
-                                        attrValue.parseValue(schema, value.toString());
-                                    } catch (ParsingValidationException e) {
-                                        LOG.error("While parsing provided value {}", value, e);
-                                        attrValue.setStringValue(value.toString());
-                                        schemaType = AttrSchemaType.String;
-                                    }
-                            }
-                            attributeTO.getValues().add(attrValue.getValueAsString(schemaType));
-                        }
-                    }
-
-                    subjectTO.getPlainAttrs().add(attributeTO);
-                    break;
-
-                case UserDerivedSchema:
-                case RoleDerivedSchema:
-                    attributeTO = new AttrTO();
-                    attributeTO.setSchema(item.getIntAttrName());
-                    subjectTO.getDerAttrs().add(attributeTO);
-                    break;
-
-                case UserVirtualSchema:
-                case RoleVirtualSchema:
-                    attributeTO = new AttrTO();
-                    attributeTO.setSchema(item.getIntAttrName());
-
-                    for (Object value : attribute == null || attribute.getValue() == null
-                            ? Collections.emptyList()
-                            : attribute.getValue()) {
-
-                        if (value != null) {
-                            attributeTO.getValues().add(value.toString());
-                        }
-                    }
-
-                    subjectTO.getVirAttrs().add(attributeTO);
-                    break;
-
-                default:
-            }
-        }
-
-        // 2. add data from defined template (if any)
-        AbstractSubjectTO template = AttributableType.USER == attrUtil.getType()
-                ? syncTask.getUserTemplate() : syncTask.getRoleTemplate();
-
-        if (template != null) {
-            if (template instanceof UserTO) {
-                if (StringUtils.isNotBlank(((UserTO) template).getUsername())) {
-                    String evaluated = JexlUtil.evaluate(((UserTO) template).getUsername(), subjectTO);
-                    if (StringUtils.isNotBlank(evaluated)) {
-                        ((UserTO) subjectTO).setUsername(evaluated);
-                    }
-                }
-
-                if (StringUtils.isNotBlank(((UserTO) template).getPassword())) {
-                    String evaluated = JexlUtil.evaluate(((UserTO) template).getPassword(), subjectTO);
-                    if (StringUtils.isNotBlank(evaluated)) {
-                        ((UserTO) subjectTO).setPassword(evaluated);
-                    }
-                }
-
-                Map<Long, MembershipTO> currentMembs = ((UserTO) subjectTO).getMembershipMap();
-                for (MembershipTO membTO : ((UserTO) template).getMemberships()) {
-                    MembershipTO membTBU;
-                    if (currentMembs.containsKey(membTO.getRoleId())) {
-                        membTBU = currentMembs.get(membTO.getRoleId());
-                    } else {
-                        membTBU = new MembershipTO();
-                        membTBU.setRoleId(membTO.getRoleId());
-                        ((UserTO) subjectTO).getMemberships().add(membTBU);
-                    }
-                    fillFromTemplate(membTBU, membTO);
-                }
-            }
-            if (template instanceof RoleTO) {
-                if (StringUtils.isNotBlank(((RoleTO) template).getName())) {
-                    String evaluated = JexlUtil.evaluate(((RoleTO) template).getName(), subjectTO);
-                    if (StringUtils.isNotBlank(evaluated)) {
-                        ((RoleTO) subjectTO).setName(evaluated);
-                    }
-                }
-
-                if (((RoleTO) template).getParent() != 0) {
-                    final Role parentRole = roleDAO.find(((RoleTO) template).getParent());
-                    if (parentRole != null) {
-                        ((RoleTO) subjectTO).setParent(parentRole.getKey());
-                    }
-                }
-
-                if (((RoleTO) template).getUserOwner() != null) {
-                    final User userOwner = userDAO.find(((RoleTO) template).getUserOwner());
-                    if (userOwner != null) {
-                        ((RoleTO) subjectTO).setUserOwner(userOwner.getKey());
-                    }
-                }
-                if (((RoleTO) template).getRoleOwner() != null) {
-                    final Role roleOwner = roleDAO.find(((RoleTO) template).getRoleOwner());
-                    if (roleOwner != null) {
-                        ((RoleTO) subjectTO).setRoleOwner(roleOwner.getKey());
-                    }
-                }
-
-                ((RoleTO) subjectTO).getEntitlements().addAll(((RoleTO) template).getEntitlements());
-
-                ((RoleTO) subjectTO).getRAttrTemplates().addAll(((RoleTO) template).getRAttrTemplates());
-                ((RoleTO) subjectTO).getRDerAttrTemplates().addAll(((RoleTO) template).getRDerAttrTemplates());
-                ((RoleTO) subjectTO).getRVirAttrTemplates().addAll(((RoleTO) template).getRVirAttrTemplates());
-                ((RoleTO) subjectTO).getMAttrTemplates().addAll(((RoleTO) template).getMAttrTemplates());
-                ((RoleTO) subjectTO).getMDerAttrTemplates().addAll(((RoleTO) template).getMDerAttrTemplates());
-                ((RoleTO) subjectTO).getMVirAttrTemplates().addAll(((RoleTO) template).getMVirAttrTemplates());
-
-                ((RoleTO) subjectTO).setAccountPolicy(((RoleTO) template).getAccountPolicy());
-                ((RoleTO) subjectTO).setPasswordPolicy(((RoleTO) template).getPasswordPolicy());
-
-                ((RoleTO) subjectTO).setInheritOwner(((RoleTO) template).isInheritOwner());
-                ((RoleTO) subjectTO).setInheritTemplates(((RoleTO) template).isInheritTemplates());
-                ((RoleTO) subjectTO).setInheritAttrs(((RoleTO) template).isInheritAttrs());
-                ((RoleTO) subjectTO).setInheritDerAttrs(((RoleTO) template).isInheritDerAttrs());
-                ((RoleTO) subjectTO).setInheritVirAttrs(((RoleTO) template).isInheritVirAttrs());
-                ((RoleTO) subjectTO).setInheritPasswordPolicy(((RoleTO) template).isInheritPasswordPolicy());
-                ((RoleTO) subjectTO).setInheritAccountPolicy(((RoleTO) template).isInheritAccountPolicy());
-            }
-
-            fillFromTemplate(subjectTO, template);
-
-            for (String resource : template.getResources()) {
-                subjectTO.getResources().add(resource);
-            }
-        }
-
-        return subjectTO;
-    }
-
-    /**
-     * Extract password value from passed value (if instance of GuardedString or GuardedByteArray).
-     *
-     * @param pwd received from the underlying connector
-     * @return password value
-     */
-    public String getPassword(final Object pwd) {
-        final StringBuilder result = new StringBuilder();
-
-        if (pwd instanceof GuardedString) {
-            ((GuardedString) pwd).access(new GuardedString.Accessor() {
-
-                @Override
-                public void access(final char[] clearChars) {
-                    result.append(clearChars);
-                }
-            });
-        } else if (pwd instanceof GuardedByteArray) {
-            ((GuardedByteArray) pwd).access(new GuardedByteArray.Accessor() {
-
-                @Override
-                public void access(final byte[] clearBytes) {
-                    result.append(new String(clearBytes));
-                }
-            });
-        } else if (pwd instanceof String) {
-            result.append((String) pwd);
-        } else {
-            result.append(pwd.toString());
-        }
-
-        return result.toString();
-    }
-
-    /**
-     * Get connector object TO from a connector object.
-     *
-     * @param connObject connector object.
-     * @return connector object TO.
-     */
-    public ConnObjectTO getConnObjectTO(final ConnectorObject connObject) {
-        final ConnObjectTO connObjectTO = new ConnObjectTO();
-
-        for (Attribute attr : connObject.getAttributes()) {
-            AttrTO attrTO = new AttrTO();
-            attrTO.setSchema(attr.getName());
-
-            if (attr.getValue() != null) {
-                for (Object value : attr.getValue()) {
-                    if (value != null) {
-                        if (value instanceof GuardedString || value instanceof GuardedByteArray) {
-                            attrTO.getValues().add(getPassword(value));
-                        } else if (value instanceof byte[]) {
-                            attrTO.getValues().add(Base64.encode((byte[]) value));
-                        } else {
-                            attrTO.getValues().add(value.toString());
-                        }
-                    }
-                }
-            }
-
-            connObjectTO.getPlainAttrs().add(attrTO);
-        }
-
-        return connObjectTO;
-    }
-
-    /**
-     * Query connected external resources for values to populated virtual attributes associated with the given owner.
-     *
-     * @param owner user or role
-     * @param attrUtil attributable util
-     */
-    public void retrieveVirAttrValues(final Attributable<?, ?, ?> owner, final AttributableUtil attrUtil) {
-        final ConfigurableApplicationContext context = ApplicationContextProvider.getApplicationContext();
-        final ConnectorFactory connFactory = context.getBean(ConnectorFactory.class);
-
-        final IntMappingType type = attrUtil.getType() == AttributableType.USER
-                ? IntMappingType.UserVirtualSchema : attrUtil.getType() == AttributableType.ROLE
-                        ? IntMappingType.RoleVirtualSchema : IntMappingType.MembershipVirtualSchema;
-
-        final Map<String, ConnectorObject> externalResources = new HashMap<>();
-
-        // -----------------------
-        // Retrieve virtual attribute values if and only if they have not been retrieved yet
-        // -----------------------
-        for (VirAttr virAttr : owner.getVirAttrs()) {
-            // reset value set
-            if (virAttr.getValues().isEmpty()) {
-                retrieveVirAttrValue(owner, virAttr, attrUtil, type, externalResources, connFactory);
-            }
-        }
-        // -----------------------
-    }
-
-    private void retrieveVirAttrValue(
-            final Attributable<?, ?, ?> owner,
-            final VirAttr virAttr,
-            final AttributableUtil attrUtil,
-            final IntMappingType type,
-            final Map<String, ConnectorObject> externalResources,
-            final ConnectorFactory connFactory) {
-
-        final String schemaName = virAttr.getSchema().getKey();
-        final VirAttrCacheValue virAttrCacheValue = virAttrCache.get(attrUtil.getType(), owner.getKey(), schemaName);
-
-        LOG.debug("Retrieve values for virtual attribute {} ({})", schemaName, type);
-
-        if (virAttrCache.isValidEntry(virAttrCacheValue)) {
-            // cached ...
-            LOG.debug("Values found in cache {}", virAttrCacheValue);
-            virAttr.getValues().clear();
-            virAttr.getValues().addAll(new ArrayList<>(virAttrCacheValue.getValues()));
-        } else {
-            // not cached ...
-            LOG.debug("Need one or more remote connections");
-
-            final VirAttrCacheValue toBeCached = new VirAttrCacheValue();
-
-            // SYNCOPE-458 if virattr owner is a Membership, owner must become user involved in membership because 
-            // membership mapping is contained in user mapping
-            final Subject<?, ?, ?> realOwner = owner instanceof Membership
-                    ? ((Membership) owner).getUser()
-                    : (Subject) owner;
-
-            final Set<ExternalResource> targetResources = owner instanceof Membership
-                    ? getTargetResource(virAttr, type, attrUtil, realOwner.getResources())
-                    : getTargetResource(virAttr, type, attrUtil);
-
-            for (ExternalResource resource : targetResources) {
-                LOG.debug("Search values into {}", resource.getKey());
-                try {
-                    final List<MappingItem> mappings = attrUtil.getMappingItems(resource, MappingPurpose.BOTH);
-
-                    final ConnectorObject connectorObject;
-
-                    if (externalResources.containsKey(resource.getKey())) {
-                        connectorObject = externalResources.get(resource.getKey());
-                    } else {
-                        LOG.debug("Perform connection to {}", resource.getKey());
-                        final String accountId = attrUtil.getAccountIdItem(resource) == null
-                                ? null
-                                : MappingUtil.getAccountIdValue(
-                                        realOwner, resource, attrUtil.getAccountIdItem(resource));
-
-                        if (StringUtils.isBlank(accountId)) {
-                            throw new IllegalArgumentException("No AccountId found for " + resource.getKey());
-                        }
-
-                        final Connector connector = connFactory.getConnector(resource);
-
-                        final OperationOptions oo =
-                                connector.getOperationOptions(MappingUtil.getMatchingMappingItems(mappings, type));
-
-                        connectorObject = connector.getObject(fromSubject(realOwner), new Uid(accountId), oo);
-                        externalResources.put(resource.getKey(), connectorObject);
-                    }
-
-                    if (connectorObject != null) {
-                        // ask for searched virtual attribute value
-                        final List<MappingItem> virAttrMappings =
-                                MappingUtil.getMatchingMappingItems(mappings, schemaName, type);
-
-                        // the same virtual attribute could be mapped with one or more external attribute 
-                        for (MappingItem mapping : virAttrMappings) {
-                            final Attribute attribute = connectorObject.getAttributeByName(mapping.getExtAttrName());
-
-                            if (attribute != null && attribute.getValue() != null) {
-                                for (Object obj : attribute.getValue()) {
-                                    if (obj != null) {
-                                        virAttr.getValues().add(obj.toString());
-                                    }
-                                }
-                            }
-                        }
-
-                        toBeCached.setResourceValues(resource.getKey(), new HashSet<String>(virAttr.getValues()));
-
-                        LOG.debug("Retrieved values {}", virAttr.getValues());
-                    }
-                } catch (Exception e) {
-                    LOG.error("Error reading connector object from {}", resource.getKey(), e);
-
-                    if (virAttrCacheValue != null) {
-                        toBeCached.forceExpiring();
-                        LOG.debug("Search for a cached value (even expired!) ...");
-                        final Set<String> cachedValues = virAttrCacheValue.getValues(resource.getKey());
-                        if (cachedValues != null) {
-                            LOG.debug("Use cached value {}", cachedValues);
-                            virAttr.getValues().addAll(cachedValues);
-                            toBeCached.setResourceValues(resource.getKey(), new HashSet<>(cachedValues));
-                        }
-                    }
-                }
-            }
-
-            virAttrCache.put(attrUtil.getType(), owner.getKey(), schemaName, toBeCached);
-        }
-    }
-
-    private Set<ExternalResource> getTargetResource(
-            final VirAttr attr, final IntMappingType type, final AttributableUtil attrUtil) {
-
-        final Set<ExternalResource> resources = new HashSet<>();
-
-        if (attr.getOwner() instanceof Subject) {
-            for (ExternalResource res : ((Subject<?, ?, ?>) attr.getOwner()).getResources()) {
-                if (!MappingUtil.getMatchingMappingItems(
-                        attrUtil.getMappingItems(res, MappingPurpose.BOTH),
-                        attr.getSchema().getKey(), type).isEmpty()) {
-
-                    resources.add(res);
-                }
-            }
-        }
-
-        return resources;
-    }
-
-    private Set<ExternalResource> getTargetResource(final VirAttr attr, final IntMappingType type,
-            final AttributableUtil attrUtil, final Set<? extends ExternalResource> ownerResources) {
-
-        final Set<ExternalResource> resources = new HashSet<>();
-
-        for (ExternalResource res : ownerResources) {
-            if (!MappingUtil.getMatchingMappingItems(
-                    attrUtil.getMappingItems(res, MappingPurpose.BOTH),
-                    attr.getSchema().getKey(), type).isEmpty()) {
-
-                resources.add(res);
-            }
-        }
-
-        return resources;
-    }
-
-    private void fillFromTemplate(final AbstractAttributableTO attributableTO, final AbstractAttributableTO template) {
-        Map<String, AttrTO> currentAttrMap = attributableTO.getAttrMap();
-        for (AttrTO templateAttr : template.getPlainAttrs()) {
-            if (templateAttr.getValues() != null && !templateAttr.getValues().isEmpty()
-                    && (!currentAttrMap.containsKey(templateAttr.getSchema())
-                    || currentAttrMap.get(templateAttr.getSchema()).getValues().isEmpty())) {
-
-                attributableTO.getPlainAttrs().add(evaluateAttrTemplate(attributableTO, templateAttr));
-            }
-        }
-
-        currentAttrMap = attributableTO.getDerAttrMap();
-        for (AttrTO templateDerAttr : template.getDerAttrs()) {
-            if (!currentAttrMap.containsKey(templateDerAttr.getSchema())) {
-                attributableTO.getDerAttrs().add(templateDerAttr);
-            }
-        }
-
-        currentAttrMap = attributableTO.getVirAttrMap();
-        for (AttrTO templateVirAttr : template.getVirAttrs()) {
-            if (templateVirAttr.getValues() != null && !templateVirAttr.getValues().isEmpty()
-                    && (!currentAttrMap.containsKey(templateVirAttr.getSchema())
-                    || currentAttrMap.get(templateVirAttr.getSchema()).getValues().isEmpty())) {
-
-                attributableTO.getVirAttrs().add(evaluateAttrTemplate(attributableTO, templateVirAttr));
-            }
-        }
-    }
-
-    private AttrTO evaluateAttrTemplate(final AbstractAttributableTO attributableTO, final AttrTO template) {
-        AttrTO result = new AttrTO();
-        result.setSchema(template.getSchema());
-
-        if (template.getValues() != null && !template.getValues().isEmpty()) {
-            for (String value : template.getValues()) {
-                String evaluated = JexlUtil.evaluate(value, attributableTO);
-                if (StringUtils.isNotBlank(evaluated)) {
-                    result.getValues().add(evaluated);
-                }
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Transform a
-     * <code>Collection</code> of {@link Attribute} instances into a {@link Map}. The key to each element in the map is
-     * the <i>name</i> of an
-     * <code>Attribute</code>. The value of each element in the map is the
-     * <code>Attribute</code> instance with that name. <br/> Different from the original because: <ul> <li>map keys are
-     * transformed toUpperCase()</li> <li>returned map is mutable</li> </ul>
-     *
-     * @param attributes set of attribute to transform to a map.
-     * @return a map of string and attribute.
-     *
-     * @see org.identityconnectors.framework.common.objects.AttributeUtil#toMap(java.util.Collection)
-     */
-    public Map<String, Attribute> toMap(final Collection<? extends Attribute> attributes) {
-        final Map<String, Attribute> map = new HashMap<>();
-        for (Attribute attr : attributes) {
-            map.put(attr.getName().toUpperCase(), attr);
-        }
-        return map;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/DataFormat.java
----------------------------------------------------------------------
diff --git a/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/DataFormat.java b/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/DataFormat.java
deleted file mode 100644
index d30f3c4..0000000
--- a/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/DataFormat.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.utils;
-
-import java.text.DecimalFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import org.apache.commons.lang3.time.DateUtils;
-import org.apache.syncope.common.lib.SyncopeConstants;
-
-/**
- * Utility class for parsing / formatting date and numbers.
- */
-public final class DataFormat {
-
-    private static final ThreadLocal<SimpleDateFormat> DATE_FORMAT = new ThreadLocal<SimpleDateFormat>() {
-
-        @Override
-        protected SimpleDateFormat initialValue() {
-            SimpleDateFormat sdf = new SimpleDateFormat();
-            sdf.applyPattern(SyncopeConstants.DEFAULT_DATE_PATTERN);
-            return sdf;
-        }
-    };
-
-    private static final ThreadLocal<DecimalFormat> DECIMAL_FORMAT = new ThreadLocal<DecimalFormat>() {
-
-        @Override
-        protected DecimalFormat initialValue() {
-            return new DecimalFormat();
-        }
-    };
-
-    public static String format(final Date date) {
-        return format(date, true);
-    }
-
-    public static String format(final Date date, final boolean lenient) {
-        return format(date, lenient, null);
-    }
-
-    public static String format(final Date date, final boolean lenient, final String conversionPattern) {
-        SimpleDateFormat sdf = DATE_FORMAT.get();
-        if (conversionPattern != null) {
-            sdf.applyPattern(conversionPattern);
-        }
-        sdf.setLenient(lenient);
-        return sdf.format(date);
-    }
-
-    public static String format(final long number) {
-        return format(number, null);
-    }
-
-    public static String format(final long number, final String conversionPattern) {
-        DecimalFormat df = DECIMAL_FORMAT.get();
-        if (conversionPattern != null) {
-            df.applyPattern(conversionPattern);
-        }
-        return df.format(number);
-    }
-
-    public static String format(final double number) {
-        return format(number, null);
-    }
-
-    public static String format(final double number, final String conversionPattern) {
-        DecimalFormat df = DECIMAL_FORMAT.get();
-        if (conversionPattern != null) {
-            df.applyPattern(conversionPattern);
-        }
-        return df.format(number);
-    }
-
-    public static Date parseDate(final String source) throws ParseException {
-        return DateUtils.parseDate(source, SyncopeConstants.DATE_PATTERNS);
-    }
-
-    public static Date parseDate(final String source, final String conversionPattern) throws ParseException {
-        SimpleDateFormat sdf = DATE_FORMAT.get();
-        sdf.applyPattern(conversionPattern);
-        sdf.setLenient(false);
-        return sdf.parse(source);
-    }
-
-    public static Number parseNumber(final String source, final String conversionPattern) throws ParseException {
-        DecimalFormat df = DECIMAL_FORMAT.get();
-        df.applyPattern(conversionPattern);
-        return df.parse(source);
-    }
-
-    public static void clear() {
-        DATE_FORMAT.remove();
-        DECIMAL_FORMAT.remove();
-    }
-
-    private DataFormat() {
-        // private empty constructor
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/ExceptionUtil.java
----------------------------------------------------------------------
diff --git a/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/ExceptionUtil.java b/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/ExceptionUtil.java
deleted file mode 100644
index 5a39faf..0000000
--- a/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/ExceptionUtil.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.utils;
-
-import org.apache.commons.lang3.exception.ExceptionUtils;
-
-public final class ExceptionUtil {
-
-    /**
-     * Uses commons lang's ExceptionUtils to provide a representation of the full stack trace of the given throwable.
-     *
-     * @param t throwable to build stack trace from
-     * @return a string representation of full stack trace of the given throwable
-     */
-    public static String getFullStackTrace(final Throwable t) {
-        StringBuilder result = new StringBuilder();
-
-        for (Throwable throwable : ExceptionUtils.getThrowableList(t)) {
-            result.append(ExceptionUtils.getMessage(throwable)).append('\n').
-                    append(ExceptionUtils.getStackTrace(throwable)).append("\n\n");
-        }
-
-        return result.toString();
-    }
-
-    /**
-     * Private default constructor, for static-only classes.
-     */
-    private ExceptionUtil() {
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/235f60fa/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/InvalidPasswordPolicySpecException.java
----------------------------------------------------------------------
diff --git a/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/InvalidPasswordPolicySpecException.java b/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/InvalidPasswordPolicySpecException.java
deleted file mode 100644
index 8c97a1c..0000000
--- a/syncope620/server/utils/src/main/java/org/apache/syncope/server/utils/InvalidPasswordPolicySpecException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.server.utils;
-
-/**
- * Raise when the merge of two or more PasswordPolicySpec leds to incompatible condition.
- *
- * @see org.apache.syncope.common.lib.types.PasswordPolicySpec
- */
-public class InvalidPasswordPolicySpecException extends Exception {
-
-    private static final long serialVersionUID = 4810651743226663580L;
-
-    public InvalidPasswordPolicySpecException(final String msg) {
-        super(msg);
-    }
-
-    public InvalidPasswordPolicySpecException(final String msg, final Exception e) {
-        super(msg, e);
-    }
-}


Mime
View raw message