You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2013/02/07 14:53:06 UTC

svn commit: r1443475 - in /syncope/trunk: client/src/main/java/org/apache/syncope/client/services/proxy/ common/src/main/java/org/apache/syncope/common/services/ common/src/main/java/org/apache/syncope/common/to/ common/src/main/java/org/apache/syncope...

Author: fmartelli
Date: Thu Feb  7 13:53:05 2013
New Revision: 1443475

URL: http://svn.apache.org/viewvc?rev=1443475&view=rev
Log:
Fix for SYNCOPE-258

Added:
    syncope/trunk/common/src/main/java/org/apache/syncope/common/to/CorrelationRuleClassTO.java
      - copied, changed from r1443398, syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PropagationActionClassTO.java
Modified:
    syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/PolicyServiceProxy.java
    syncope/trunk/common/src/main/java/org/apache/syncope/common/services/PolicyService.java
    syncope/trunk/common/src/main/java/org/apache/syncope/common/types/   (props changed)
    syncope/trunk/common/src/main/java/org/apache/syncope/common/types/ConflictResolutionAction.java
    syncope/trunk/common/src/main/java/org/apache/syncope/common/util/CollectionWrapper.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/PolicyBeanPanel.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/PolicyRestClient.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/services/PolicyServiceImpl.java
    syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java
    syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
    syncope/trunk/core/src/test/resources/content.xml

Modified: syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/PolicyServiceProxy.java
URL: http://svn.apache.org/viewvc/syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/PolicyServiceProxy.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/PolicyServiceProxy.java (original)
+++ syncope/trunk/client/src/main/java/org/apache/syncope/client/services/proxy/PolicyServiceProxy.java Thu Feb  7 13:53:05 2013
@@ -20,16 +20,18 @@ package org.apache.syncope.client.servic
 
 import java.net.URI;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
-
+import java.util.Set;
 import javax.ws.rs.core.Response;
-
 import org.apache.syncope.common.services.PolicyService;
 import org.apache.syncope.common.to.AccountPolicyTO;
+import org.apache.syncope.common.to.CorrelationRuleClassTO;
 import org.apache.syncope.common.to.PasswordPolicyTO;
 import org.apache.syncope.common.to.PolicyTO;
 import org.apache.syncope.common.to.SyncPolicyTO;
 import org.apache.syncope.common.types.PolicyType;
+import org.apache.syncope.common.util.CollectionWrapper;
 import org.springframework.web.client.RestTemplate;
 
 @SuppressWarnings("unchecked")
@@ -120,4 +122,18 @@ public class PolicyServiceProxy extends 
             return url;
         }
     }
+
+    @Override
+    public Set<CorrelationRuleClassTO> getCorrelationRuleClasses(final PolicyType type) {
+        switch (type) {
+            case SYNC:
+            case GLOBAL_SYNC:
+                final Set<String> classes = new HashSet<String>(Arrays.asList(getRestTemplate().getForObject(
+                        baseUrl + "policy/correlationRuleClasses.json", String[].class)));
+
+                return CollectionWrapper.wrapCorrelationRuleClasses(classes);
+            default:
+                throw new IllegalArgumentException("Cannot retrieve correlation rule classes for type " + type);
+        }
+    }
 }

Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/services/PolicyService.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/services/PolicyService.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/services/PolicyService.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/services/PolicyService.java Thu Feb  7 13:53:05 2013
@@ -19,6 +19,7 @@
 package org.apache.syncope.common.services;
 
 import java.util.List;
+import java.util.Set;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -26,7 +27,7 @@ import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.core.Response;
-
+import org.apache.syncope.common.to.CorrelationRuleClassTO;
 import org.apache.syncope.common.to.PolicyTO;
 import org.apache.syncope.common.types.PolicyType;
 
@@ -83,4 +84,11 @@ public interface PolicyService {
     <T extends PolicyTO> void update(@PathParam("type") PolicyType type, @PathParam("policyId") Long policyId,
             T policyTO);
 
+    /**
+     * @param type PolicyType (just SYNC is supported).
+     * @return Returns correlation rules java classes.
+     */
+    @GET
+    @Path("correlationRuleClasses")
+    Set<CorrelationRuleClassTO> getCorrelationRuleClasses(@PathParam("type") PolicyType type);
 }

Copied: syncope/trunk/common/src/main/java/org/apache/syncope/common/to/CorrelationRuleClassTO.java (from r1443398, syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PropagationActionClassTO.java)
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/to/CorrelationRuleClassTO.java?p2=syncope/trunk/common/src/main/java/org/apache/syncope/common/to/CorrelationRuleClassTO.java&p1=syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PropagationActionClassTO.java&r1=1443398&r2=1443475&rev=1443475&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PropagationActionClassTO.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/to/CorrelationRuleClassTO.java Thu Feb  7 13:53:05 2013
@@ -20,19 +20,18 @@ package org.apache.syncope.common.to;
 
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
-
 import org.apache.syncope.common.AbstractBaseBean;
 
-@XmlRootElement(name = "propagationActionClass")
+@XmlRootElement(name = "correlationRuleClass")
 @XmlType
-public class PropagationActionClassTO extends AbstractBaseBean {
+public class CorrelationRuleClassTO extends AbstractBaseBean {
 
-    private static final long serialVersionUID = 2187654394121198308L;
+    private static final long serialVersionUID = -6715106427060816725L;
 
     private String name;
 
-    public static PropagationActionClassTO instance(final String name) {
-        PropagationActionClassTO instance = new PropagationActionClassTO();
+    public static CorrelationRuleClassTO instance(final String name) {
+        CorrelationRuleClassTO instance = new CorrelationRuleClassTO();
         instance.setName(name);
         return instance;
     }

Propchange: syncope/trunk/common/src/main/java/org/apache/syncope/common/types/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Feb  7 13:53:05 2013
@@ -0,0 +1 @@
+.SyncPolicySpec.java.swp

Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/types/ConflictResolutionAction.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/types/ConflictResolutionAction.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/types/ConflictResolutionAction.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/types/ConflictResolutionAction.java Thu Feb  7 13:53:05 2013
@@ -23,12 +23,12 @@ import javax.xml.bind.annotation.XmlEnum
 @XmlEnum
 public enum ConflictResolutionAction {
 
+    // ignore sync
+    IGNORE,
     // sync first matcgh
     FIRSTMATCH,
     // sync last match
     LASTMATCH,
-    // ignore sync
-    IGNORE,
     // sync all
     ALL;
 

Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/util/CollectionWrapper.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/util/CollectionWrapper.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/util/CollectionWrapper.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/util/CollectionWrapper.java Thu Feb  7 13:53:05 2013
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import org.apache.syncope.common.to.CorrelationRuleClassTO;
 
 import org.apache.syncope.common.to.EntitlementTO;
 import org.apache.syncope.common.to.JobClassTO;
@@ -186,6 +187,22 @@ public final class CollectionWrapper {
         return respons;
     }
 
+    public static Set<CorrelationRuleClassTO> wrapCorrelationRuleClasses(Set<String> classes) {
+        Set<CorrelationRuleClassTO> respons = new HashSet<CorrelationRuleClassTO>();
+        for (String cl : classes) {
+            respons.add(CorrelationRuleClassTO.instance(cl));
+        }
+        return respons;
+    }
+
+    public static List<String> unwrapCorrelationRuleClasses(Set<CorrelationRuleClassTO> actions) {
+        List<String> respons = new ArrayList<String>();
+        for (CorrelationRuleClassTO e : actions) {
+            respons.add(e.getName());
+        }
+        return respons;
+    }
+
     @SuppressWarnings("unchecked")
     public static List<String> wrapStrings(final ModelAndView modelAndView) {
         return (List<String>) modelAndView.getModel().values().iterator().next();

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/PolicyBeanPanel.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/PolicyBeanPanel.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/PolicyBeanPanel.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/PolicyBeanPanel.java Thu Feb  7 13:53:05 2013
@@ -25,11 +25,12 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import org.apache.syncope.common.annotation.ClassList;
 import org.apache.syncope.common.annotation.SchemaList;
 import org.apache.syncope.common.types.AbstractPolicySpec;
 import org.apache.syncope.common.types.AttributableType;
-import org.apache.syncope.common.types.ConflictResolutionAction;
 import org.apache.syncope.console.markup.html.list.AltListView;
+import org.apache.syncope.console.rest.PolicyRestClient;
 import org.apache.syncope.console.rest.SchemaRestClient;
 import org.apache.syncope.console.wicket.markup.html.form.AbstractFieldPanel;
 import org.apache.syncope.console.wicket.markup.html.form.AjaxCheckBoxPanel;
@@ -67,6 +68,9 @@ public class PolicyBeanPanel extends Pan
     @SpringBean
     private SchemaRestClient schemaRestClient;
 
+    @SpringBean
+    private PolicyRestClient policyRestClient;
+
     final IModel<List<String>> userSchemas = new LoadableDetachableModel<List<String>>() {
 
         private static final long serialVersionUID = -2012833443695917883L;
@@ -87,6 +91,14 @@ public class PolicyBeanPanel extends Pan
         }
     };
 
+    final IModel<List<String>> correlationRules = new LoadableDetachableModel<List<String>>() {
+
+        @Override
+        protected List<String> load() {
+            return policyRestClient.getCorrelationRuleClasses();
+        }
+    };
+
     public PolicyBeanPanel(final String id, final AbstractPolicySpec policy) {
         super(id);
 
@@ -101,6 +113,9 @@ public class PolicyBeanPanel extends Pan
                 final SchemaList schemaList = field.getAnnotation(SchemaList.class);
                 fieldWrapper.setSchemaList(schemaList);
 
+                final ClassList classList = field.getAnnotation(ClassList.class);
+                fieldWrapper.setClassList(classList);
+
                 items.add(fieldWrapper);
             }
         }
@@ -120,18 +135,41 @@ public class PolicyBeanPanel extends Pan
 
                 final AbstractFieldPanel component;
                 try {
-                    if (field.getType().equals(ConflictResolutionAction.class)) {
+                    if (field.getClassList() != null) {
                         component = new AjaxDropDownChoicePanel("field", field.getName(), new PropertyModel(policy,
                                 field.getName()));
 
-                        ((AjaxDropDownChoicePanel) component).setChoices(
-                                Arrays.asList(ConflictResolutionAction.values()));
+                        final List<String> rules = correlationRules.getObject();
+
+                        if (rules != null && !rules.isEmpty()) {
+                            ((AjaxDropDownChoicePanel) component).setChoices(correlationRules.getObject());
+                        }
 
                         item.add(component);
 
-                        item.add(getActivationControl(component,
+                        item.add(getActivationControl(
+                                component,
+                                propDesc.getReadMethod().invoke(policy, new Object[]{}) != null,
+                                null,
+                                null));
+
+                    } else if (field.getType().isEnum()) {
+                        component = new AjaxDropDownChoicePanel("field", field.getName(), new PropertyModel(policy,
+                                field.getName()));
+
+                        final Serializable[] values = (Serializable[]) field.getType().getEnumConstants();
+
+                        if (values != null && values.length > 0) {
+                            ((AjaxDropDownChoicePanel) component).setChoices(Arrays.asList(values));
+                        }
+
+                        item.add(component);
+
+                        item.add(getActivationControl(
+                                component,
                                 (Enum<?>) propDesc.getReadMethod().invoke(policy, new Object[]{}) != null,
-                                ConflictResolutionAction.IGNORE, ConflictResolutionAction.IGNORE));
+                                values[0],
+                                values[0]));
 
                     } else if (field.getType().equals(boolean.class) || field.getType().equals(Boolean.class)) {
                         item.add(new AjaxCheckBoxPanel("check", field.getName(), new PropertyModel(policy,
@@ -158,6 +196,7 @@ public class PolicyBeanPanel extends Pan
 
                             Collection collection =
                                     (Collection) propDesc.getReadMethod().invoke(policy, new Object[]{});
+
                             if (collection == null) {
                                 collection = new ArrayList();
                                 propDesc.getWriteMethod().invoke(policy, collection);
@@ -246,6 +285,8 @@ public class PolicyBeanPanel extends Pan
 
         private transient SchemaList schemaList;
 
+        private transient ClassList classList;
+
         public String getName() {
             return name;
         }
@@ -269,5 +310,13 @@ public class PolicyBeanPanel extends Pan
         public void setSchemaList(final SchemaList schemaList) {
             this.schemaList = schemaList;
         }
+
+        public ClassList getClassList() {
+            return classList;
+        }
+
+        public void setClassList(ClassList classList) {
+            this.classList = classList;
+        }
     }
 }

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/PolicyRestClient.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/PolicyRestClient.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/PolicyRestClient.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/PolicyRestClient.java Thu Feb  7 13:53:05 2013
@@ -20,13 +20,14 @@ package org.apache.syncope.console.rest;
 
 import java.util.ArrayList;
 import java.util.List;
-
 import org.apache.syncope.common.services.PolicyService;
 import org.apache.syncope.common.to.AccountPolicyTO;
 import org.apache.syncope.common.to.PasswordPolicyTO;
 import org.apache.syncope.common.to.PolicyTO;
 import org.apache.syncope.common.to.SyncPolicyTO;
 import org.apache.syncope.common.types.PolicyType;
+import org.apache.syncope.common.util.CollectionWrapper;
+import org.apache.syncope.common.validation.SyncopeClientCompositeErrorException;
 import org.springframework.stereotype.Component;
 
 /**
@@ -85,6 +86,19 @@ public class PolicyRestClient extends Ba
         getService(PolicyService.class).delete(getPolicyType(policyClass), id);
     }
 
+    public List<String> getCorrelationRuleClasses() {
+        List<String> rules = null;
+
+        try {
+            rules = CollectionWrapper.unwrapCorrelationRuleClasses(
+                    getService(PolicyService.class).getCorrelationRuleClasses(PolicyType.SYNC));
+        } catch (Exception e) {
+            LOG.error("While getting all correlation rule classes", e);
+        }
+
+        return rules;
+    }
+
     private PolicyType getPolicyType(final Class<? extends PolicyTO> clazz) {
         if (AccountPolicyTO.class.equals(clazz)) {
             return PolicyType.ACCOUNT;

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/PolicyController.java Thu Feb  7 13:53:05 2013
@@ -22,9 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
-
 import javax.servlet.http.HttpServletResponse;
-
 import org.apache.syncope.common.to.AccountPolicyTO;
 import org.apache.syncope.common.to.PasswordPolicyTO;
 import org.apache.syncope.common.to.PolicyTO;
@@ -264,12 +262,12 @@ public class PolicyController extends Ab
     @PreAuthorize("hasRole('POLICY_LIST')")
     @RequestMapping(method = RequestMethod.GET, value = "/correlationRuleClasses")
     public ModelAndView getCorrelationRuleClasses() {
-        final Set<String> actionsClasses =
+        final Set<String> correlationRules =
                 classNamesLoader.getClassNames(ImplementationClassNamesLoader.Type.SYNC_CORRELATION_RULES);
 
         auditManager.audit(Category.policy, AuditElements.PolicySubCategory.getCorrelationRuleClasses,
-                Result.success, "Successfully listed all correlation rule classes: " + actionsClasses.size());
+                Result.success, "Successfully listed all correlation rule classes: " + correlationRules.size());
 
-        return new ModelAndView().addObject(actionsClasses);
+        return new ModelAndView().addObject(correlationRules);
     }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/PolicyServiceImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/services/PolicyServiceImpl.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/services/PolicyServiceImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/services/PolicyServiceImpl.java Thu Feb  7 13:53:05 2013
@@ -20,6 +20,7 @@ package org.apache.syncope.core.services
 
 import java.net.URI;
 import java.util.List;
+import java.util.Set;
 
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.core.Response;
@@ -31,7 +32,9 @@ import org.apache.syncope.common.to.Acco
 import org.apache.syncope.common.to.PasswordPolicyTO;
 import org.apache.syncope.common.to.PolicyTO;
 import org.apache.syncope.common.to.SyncPolicyTO;
+import org.apache.syncope.common.to.CorrelationRuleClassTO;
 import org.apache.syncope.common.types.PolicyType;
+import org.apache.syncope.common.util.CollectionWrapper;
 import org.apache.syncope.core.rest.controller.PolicyController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -48,9 +51,7 @@ public class PolicyServiceImpl implement
     public <T extends PolicyTO> Response create(final PolicyType type, final T policyTO) {
         PolicyTO policy = policyController.createInternal(policyTO);
         URI location = uriInfo.getAbsolutePathBuilder().path(policy.getId() + "").build();
-        return Response.created(location)
-                .header(SyncopeConstants.REST_HEADER_ID, policy.getId())
-                .build();
+        return Response.created(location).header(SyncopeConstants.REST_HEADER_ID, policy.getId()).build();
     }
 
     @Override
@@ -119,4 +120,19 @@ public class PolicyServiceImpl implement
         this.uriInfo = ui;
     }
 
+    @Override
+    public Set<CorrelationRuleClassTO> getCorrelationRuleClasses(PolicyType type) {
+        switch (type) {
+            case SYNC:
+            case GLOBAL_SYNC:
+                
+                @SuppressWarnings("unchecked")
+                final Set<String> classes =
+                        (Set<String>) policyController.getCorrelationRuleClasses().getModel().values().iterator().next();
+                return CollectionWrapper.wrapCorrelationRuleClasses(classes);
+                
+            default:
+                throw new IllegalArgumentException("Cannot retrieve correlation rule classes for type " + type);
+        }
+    }
 }

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/PolicyTestITCase.java Thu Feb  7 13:53:05 2013
@@ -166,6 +166,11 @@ public class PolicyTestITCase extends Ab
         assertNotNull(t);
     }
 
+    @Test
+    public void getCorrelationRules() {
+        assertEquals(1, policyService.getCorrelationRuleClasses(PolicyType.SYNC).size());
+    }
+
     private SyncPolicyTO buildSyncPolicyTO() {
         SyncPolicyTO policy = new SyncPolicyTO();
 

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java Thu Feb  7 13:53:05 2013
@@ -48,11 +48,15 @@ import org.apache.syncope.common.to.Task
 import org.apache.syncope.common.to.TaskTO;
 import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.common.mod.UserMod;
+import org.apache.syncope.common.to.SyncPolicyTO;
 import org.apache.syncope.common.types.IntMappingType;
+import org.apache.syncope.common.types.PolicyType;
 import org.apache.syncope.common.types.PropagationTaskExecStatus;
+import org.apache.syncope.common.types.SyncPolicySpec;
 import org.apache.syncope.common.types.TaskType;
 import org.apache.syncope.common.types.TraceLevel;
 import org.apache.syncope.core.sync.TestSyncActions;
+import org.apache.syncope.core.sync.TestSyncRule;
 import org.apache.syncope.core.sync.impl.SyncJob;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
@@ -781,6 +785,15 @@ public class TaskTestITCase extends Abst
 
     @Test
     public void issueSYNCOPE258() {
+        // -----------------------------
+        // Add a custom correlation rule
+        // -----------------------------
+        SyncPolicyTO policyTO = policyService.read(PolicyType.SYNC, 9L);
+        ((SyncPolicySpec)policyTO.getSpecification()).setUserJavaRule(TestSyncRule.class.getName());
+        
+        policyService.update(PolicyType.SYNC, policyTO.getId(), policyTO);
+        // -----------------------------
+        
         SyncTaskTO task = new SyncTaskTO();
         task.setName("Test Sync Rule");
         task.setResource("ws-target-resource-2");

Modified: syncope/trunk/core/src/test/resources/content.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/content.xml?rev=1443475&r1=1443474&r2=1443475&view=diff
==============================================================================
--- syncope/trunk/core/src/test/resources/content.xml (original)
+++ syncope/trunk/core/src/test/resources/content.xml Thu Feb  7 13:53:05 2013
@@ -40,7 +40,7 @@ under the License.
   <Policy DTYPE="AccountPolicy" id="6" description="sample account policy" type="ACCOUNT" specification="%3Corg.apache.syncope.common.types.AccountPolicySpec%3E%0A++%3CmaxLength%3E0%3C%2FmaxLength%3E%0A++%3CminLength%3E4%3C%2FminLength%3E%0A++%3CprefixesNotPermitted%3E%0A++++%3Cstring%3Enotpermitted1%3C%2Fstring%3E%0A++++%3Cstring%3Enotpermitted2%3C%2Fstring%3E%0A++%3C%2FprefixesNotPermitted%3E%0A++%3CallUpperCase%3Efalse%3C%2FallUpperCase%3E%0A++%3CallLowerCase%3Efalse%3C%2FallLowerCase%3E%0A++%3CpropagateSuspension%3Efalse%3C%2FpropagateSuspension%3E%0A++%3CpermittedLoginRetries%3E3%3C%2FpermittedLoginRetries%3E%0A%3C%2Forg.apache.syncope.common.types.AccountPolicySpec%3E"/>
   <Policy DTYPE="SyncPolicy" id="7" description="sync policy 1" type="SYNC" specification="%3Corg.apache.syncope.common.types.SyncPolicySpec%2F%3E"/>
   <Policy DTYPE="PasswordPolicy" id="8" description="sample password policy" type="PASSWORD" specification="%3Corg.apache.syncope.common.types.PasswordPolicySpec%3E%0A++%3ChistoryLength%3E0%3C%2FhistoryLength%3E%0A++%3CmaxLength%3E0%3C%2FmaxLength%3E%0A++%3CminLength%3E10%3C%2FminLength%3E%0A++%3CnonAlphanumericRequired%3Etrue%3C%2FnonAlphanumericRequired%3E%0A++%3CalphanumericRequired%3Efalse%3C%2FalphanumericRequired%3E%0A++%3CdigitRequired%3Etrue%3C%2FdigitRequired%3E%0A++%3ClowercaseRequired%3Etrue%3C%2FlowercaseRequired%3E%0A++%3CuppercaseRequired%3Etrue%3C%2FuppercaseRequired%3E%0A++%3CmustStartWithDigit%3Etrue%3C%2FmustStartWithDigit%3E%0A++%3CmustntStartWithDigit%3Efalse%3C%2FmustntStartWithDigit%3E%0A++%3CmustEndWithDigit%3Etrue%3C%2FmustEndWithDigit%3E%0A++%3CmustntEndWithDigit%3Efalse%3C%2FmustntEndWithDigit%3E%0A++%3CmustStartWithNonAlpha%3Efalse%3C%2FmustStartWithNonAlpha%3E%0A++%3CmustStartWithAlpha%3Efalse%3C%2FmustStartWithAlpha%3E%0A++%3CmustntStartWithNonAl
 pha%3Efalse%3C%2FmustntStartWithNonAlpha%3E%0A++%3CmustntStartWithAlpha%3Efalse%3C%2FmustntStartWithAlpha%3E%0A++%3CmustEndWithNonAlpha%3Efalse%3C%2FmustEndWithNonAlpha%3E%0A++%3CmustEndWithAlpha%3Efalse%3C%2FmustEndWithAlpha%3E%0A++%3CmustntEndWithNonAlpha%3Efalse%3C%2FmustntEndWithNonAlpha%3E%0A++%3CmustntEndWithAlpha%3Efalse%3C%2FmustntEndWithAlpha%3E%0A++%3CprefixesNotPermitted%3E%0A++++%3Cstring%3Enotpermitted1%3C%2Fstring%3E%0A++++%3Cstring%3Enotpermitted2%3C%2Fstring%3E%0A++%3C%2FprefixesNotPermitted%3E%0A%3C%2Forg.apache.syncope.common.types.PasswordPolicySpec%3E"/>
-  <Policy DTYPE="SyncPolicy" id="9" description="sync policy with a rule" type="SYNC" specification="%3Corg.apache.syncope.common.types.SyncPolicySpec%3E%0A++%3CuserJavaRule%3Eorg.apache.syncope.core.sync.TestSyncRule%3C/userJavaRule%3E%0A++%3CroleJavaRule%3E%3C/roleJavaRule%3E%0A++%3CconflictResolutionAction%3EIGNORE%3C/conflictResolutionAction%3E%0A%3C/org.apache.syncope.common.types.SyncPolicySpec%3E"/>
+  <Policy DTYPE="SyncPolicy" id="9" description="sync policy for java rule" type="SYNC" specification="%3Corg.apache.syncope.common.types.SyncPolicySpec%3E%0A++%3CconflictResolutionAction%3EIGNORE%3C/conflictResolutionAction%3E%0A%3C/org.apache.syncope.common.types.SyncPolicySpec%3E"/>
     
   <SyncopeUser id="1" workflowId="0" status="active" password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
                username="user1" creationDate="2010-10-20 11:00:00" suspended="0"/>