[SYNCOPE-956] PullCorrelationRule as AccountRule and PasswordRule
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/17174c7a Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/17174c7a Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/17174c7a Branch: refs/heads/master Commit: 17174c7a3f2288a598cc6b1e216fdb811f18659d Parents: 3f47e9b Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Thu Oct 19 16:00:42 2017 +0200 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Fri Oct 20 16:57:48 2017 +0200 ---------------------------------------------------------------------- .../init/ClassPathScanImplementationLookup.java | 13 + .../client/console/panels/BeanPanel.java | 2 +- .../panels/ImplementationModalPanel.java | 10 + .../policies/PolicyModalPanelBuilder.java | 15 +- .../policies/PolicyRuleDirectoryPanel.java | 14 - .../console/policies/PolicySpecModalPanel.java | 344 ------------------- .../policies/PullPolicyDirectoryPanel.java | 11 +- .../console/policies/PullPolicyModalPanel.java | 338 ++++++++++++++++++ .../reports/ReportletDirectoryPanel.java | 15 - .../console/wizards/any/Relationships.java | 2 +- .../MyPullCorrelationRule.groovy | 5 +- .../policies/PolicyDirectoryPanel.properties | 1 + .../policies/PolicyDirectoryPanel_it.properties | 1 + .../PolicyDirectoryPanel_pt_BR.properties | 1 + .../policies/PolicyDirectoryPanel_ru.properties | 1 + ...licySpecModalPanel$CorrelationRulePanel.html | 32 -- .../console/policies/PolicySpecModalPanel.html | 28 -- .../policies/PolicySpecModalPanel.properties | 22 -- .../policies/PolicySpecModalPanel_it.properties | 22 -- .../PolicySpecModalPanel_pt_BR.properties | 22 -- .../policies/PolicySpecModalPanel_ru.properties | 23 -- ...llPolicyModalPanel$CorrelationRulePanel.html | 31 ++ .../console/policies/PullPolicyModalPanel.html | 25 ++ .../policies/PullPolicyModalPanel.properties | 19 + .../policies/PullPolicyModalPanel_it.properties | 20 ++ .../PullPolicyModalPanel_pt_BR.properties | 20 ++ .../policies/PullPolicyModalPanel_ru.properties | 20 ++ .../org/apache/syncope/common/lib/Schema.java | 37 ++ .../policy/AbstractPullCorrelationRuleConf.java | 52 +++ .../lib/policy/DefaultAccountRuleConf.java | 2 +- .../lib/policy/DefaultPasswordRuleConf.java | 2 +- .../policy/DefaultPullCorrelationRuleConf.java | 47 +++ .../lib/policy/PullCorrelationRuleConf.java | 23 ++ .../common/lib/report/GroupReportletConf.java | 1 + .../syncope/common/lib/report/Schema.java | 35 -- .../common/lib/report/UserReportletConf.java | 1 + .../init/ClassPathScanImplementationLookup.java | 34 +- .../persistence/api/ImplementationLookup.java | 14 +- .../api/dao/PullCorrelationRule.java | 42 +++ .../api/dao/PullCorrelationRuleConfClass.java | 33 ++ .../persistence/jpa/dao/DefaultAccountRule.java | 1 - .../jpa/dao/DefaultPullCorrelationRule.java | 113 ++++++ .../jpa/DummyImplementationLookup.java | 10 + .../core/persistence/jpa/inner/PolicyTest.java | 15 +- .../test/resources/domains/MasterContent.xml | 2 +- .../api/pushpull/PullCorrelationRule.java | 36 -- .../java/data/ImplementationDataBinderImpl.java | 8 +- .../java/data/PolicyDataBinderImpl.java | 9 +- .../pushpull/PlainAttrsPullCorrelationRule.java | 113 ------ .../provisioning/java/pushpull/PullUtils.java | 31 +- .../java/DummyImplementationLookup.java | 10 + .../core/spring/ImplementationManager.java | 39 ++- .../security/DummyImplementationLookup.java | 9 + .../reference/DummyPullCorrelationRule.java | 35 ++ .../reference/DummyPullCorrelationRuleConf.java | 29 ++ .../core/reference/ITImplementationLookup.java | 24 ++ .../syncope/fit/console/PoliciesITCase.java | 69 +--- .../syncope/fit/console/ReportsITCase.java | 119 ------- .../syncope/fit/console/TopologyITCase.java | 2 +- .../apache/syncope/fit/console/UsersITCase.java | 1 - .../apache/syncope/fit/core/PolicyITCase.java | 8 +- .../src/test/resources/TestPullRule.groovy | 6 +- .../src/test/resources/log4j2.xml | 4 + 63 files changed, 1131 insertions(+), 942 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java b/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java index ed60e6c..415e7c4 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/init/ClassPathScanImplementationLookup.java @@ -36,6 +36,7 @@ import org.apache.syncope.client.console.wicket.markup.html.form.preview.Abstrac import org.apache.syncope.client.console.widgets.BaseExtWidget; import org.apache.syncope.common.lib.policy.AccountRuleConf; import org.apache.syncope.common.lib.policy.PasswordRuleConf; +import org.apache.syncope.common.lib.policy.PullCorrelationRuleConf; import org.apache.syncope.common.lib.report.ReportletConf; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,6 +66,8 @@ public class ClassPathScanImplementationLookup { private Map<String, Class<? extends PasswordRuleConf>> passwordRuleConfs; + private Map<String, Class<? extends PullCorrelationRuleConf>> pullCorrelationRuleConfs; + /** * This method can be overridden by subclasses to customize classpath scan. * @@ -84,6 +87,7 @@ public class ClassPathScanImplementationLookup { reportletConfs = new HashMap<>(); accountRuleConfs = new HashMap<>(); passwordRuleConfs = new HashMap<>(); + pullCorrelationRuleConfs = new HashMap<>(); ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false); scanner.addIncludeFilter(new AssignableTypeFilter(BasePage.class)); @@ -94,6 +98,7 @@ public class ClassPathScanImplementationLookup { scanner.addIncludeFilter(new AssignableTypeFilter(ReportletConf.class)); scanner.addIncludeFilter(new AssignableTypeFilter(AccountRuleConf.class)); scanner.addIncludeFilter(new AssignableTypeFilter(PasswordRuleConf.class)); + scanner.addIncludeFilter(new AssignableTypeFilter(PullCorrelationRuleConf.class)); scanner.findCandidateComponents(getBasePackage()).forEach(bd -> { try { @@ -128,6 +133,8 @@ public class ClassPathScanImplementationLookup { accountRuleConfs.put(clazz.getName(), (Class<? extends AccountRuleConf>) clazz); } else if (PasswordRuleConf.class.isAssignableFrom(clazz)) { passwordRuleConfs.put(clazz.getName(), (Class<? extends PasswordRuleConf>) clazz); + } else if (PullCorrelationRuleConf.class.isAssignableFrom(clazz)) { + pullCorrelationRuleConfs.put(clazz.getName(), (Class<? extends PullCorrelationRuleConf>) clazz); } } } catch (Throwable t) { @@ -154,6 +161,7 @@ public class ClassPathScanImplementationLookup { reportletConfs = Collections.unmodifiableMap(reportletConfs); accountRuleConfs = Collections.unmodifiableMap(accountRuleConfs); passwordRuleConfs = Collections.unmodifiableMap(passwordRuleConfs); + pullCorrelationRuleConfs = Collections.unmodifiableMap(pullCorrelationRuleConfs); LOG.debug("Binary previewers found: {}", previewers); LOG.debug("Extension pages found: {}", extPages); @@ -162,6 +170,7 @@ public class ClassPathScanImplementationLookup { LOG.debug("Reportlet configurations found: {}", reportletConfs); LOG.debug("Account Rule configurations found: {}", accountRuleConfs); LOG.debug("Password Rule configurations found: {}", passwordRuleConfs); + LOG.debug("Pull Correlation Rule configurations found: {}", pullCorrelationRuleConfs); } public Class<? extends AbstractBinaryPreviewer> getPreviewerClass(final String mimeType) { @@ -206,4 +215,8 @@ public class ClassPathScanImplementationLookup { return passwordRuleConfs; } + public Map<String, Class<? extends PullCorrelationRuleConf>> getPullCorrelationRuleConfs() { + return pullCorrelationRuleConfs; + } + } http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java index d30bdbe..96ee931 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java @@ -45,7 +45,7 @@ import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel; import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel; import org.apache.syncope.client.lib.SyncopeClient; import org.apache.syncope.common.lib.SyncopeConstants; -import org.apache.syncope.common.lib.report.Schema; +import org.apache.syncope.common.lib.Schema; import org.apache.syncope.common.lib.report.SearchCondition; import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder; import org.apache.syncope.common.lib.to.AbstractSchemaTO; http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java index a2d4690..0e23e1b 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationModalPanel.java @@ -86,6 +86,7 @@ public class ImplementationModalPanel extends AbstractModalPanel<ImplementationT : implementation.getType() == ImplementationType.REPORTLET || implementation.getType() == ImplementationType.ACCOUNT_RULE || implementation.getType() == ImplementationType.PASSWORD_RULE + || implementation.getType() == ImplementationType.PULL_CORRELATION_RULE ? ViewMode.JSON_BODY : ViewMode.JAVA_CLASS; this.create = implementation.getKey() == null; @@ -122,6 +123,11 @@ public class ImplementationModalPanel extends AbstractModalPanel<ImplementationT collect(Collectors.toList()); break; + case PULL_CORRELATION_RULE: + classes = implementationLookup.getPullCorrelationRuleConfs().keySet().stream(). + collect(Collectors.toList()); + break; + default: } } @@ -266,6 +272,10 @@ public class ImplementationModalPanel extends AbstractModalPanel<ImplementationT clazz = implementationLookup.getPasswordRuleConfs().get(jsonClass.getModelObject()); break; + case PULL_CORRELATION_RULE: + clazz = implementationLookup.getPullCorrelationRuleConfs().get(jsonClass.getModelObject()); + break; + default: } http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java index 91b24d0..3fcb08e 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java @@ -18,7 +18,9 @@ */ package org.apache.syncope.client.console.policies; +import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; @@ -31,6 +33,7 @@ import org.apache.syncope.client.console.rest.PolicyRestClient; import org.apache.syncope.client.console.rest.ResourceRestClient; import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel; +import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxSpinnerFieldPanel; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; @@ -40,7 +43,9 @@ import org.apache.syncope.client.console.wizards.AjaxWizard; import org.apache.syncope.common.lib.policy.AbstractPolicyTO; import org.apache.syncope.common.lib.policy.AccountPolicyTO; import org.apache.syncope.common.lib.policy.PasswordPolicyTO; +import org.apache.syncope.common.lib.policy.PullPolicyTO; import org.apache.syncope.common.lib.to.EntityTO; +import org.apache.syncope.common.lib.types.ConflictResolutionAction; import org.apache.wicket.Component; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -115,9 +120,7 @@ public class PolicyModalPanelBuilder<T extends AbstractPolicyTO> extends Abstrac "field", new PropertyModel<List<String>>(policyTO, "passthroughResources"), new ListModel<String>(resources.getObject()))); - } - - if (policyTO instanceof PasswordPolicyTO) { + } else if (policyTO instanceof PasswordPolicyTO) { fields.add(new AjaxSpinnerFieldPanel.Builder<Integer>().build( "field", "historyLength", @@ -129,6 +132,12 @@ public class PolicyModalPanelBuilder<T extends AbstractPolicyTO> extends Abstrac "allowNullPassword", new PropertyModel<>(policyTO, "allowNullPassword"), false)); + } else if (policyTO instanceof PullPolicyTO) { + fields.add(new AjaxDropDownChoicePanel<>( + "field", + "conflictResolutionAction", + new PropertyModel<>(policyTO, "conflictResolutionAction")). + setChoices(Arrays.asList((Serializable[]) ConflictResolutionAction.values()))); } add(new ListView<Component>("fields", fields) { http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java index 2b5f8d4..1cddad3 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java @@ -26,7 +26,6 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; -import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.client.console.SyncopeConsoleSession; import org.apache.syncope.client.console.commons.Constants; @@ -140,19 +139,6 @@ public class PolicyRuleDirectoryPanel<T extends AbstractPolicyTO> extends Direct @Override public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) { - RuleConf clone = SerializationUtils.clone(model.getObject().getConf()); - - PolicyRuleDirectoryPanel.this.getTogglePanel().close(target); - send(PolicyRuleDirectoryPanel.this, Broadcast.EXACT, - new AjaxWizard.EditItemActionEvent<>(new PolicyRuleWrapper(true).setConf(clone), target)); - } - }, ActionLink.ActionType.CLONE, StandardEntitlement.POLICY_CREATE); - panel.add(new ActionLink<PolicyRuleWrapper>() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target, final PolicyRuleWrapper ignore) { PolicyRuleDirectoryPanel.this.getTogglePanel().close(target); if (model.getObject().getConf() == null) { SyncopeConsoleSession.get().info(getString("noConf")); http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicySpecModalPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicySpecModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicySpecModalPanel.java deleted file mode 100644 index 4280996..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicySpecModalPanel.java +++ /dev/null @@ -1,344 +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.client.console.policies; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import java.io.IOException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; -import org.apache.commons.lang3.StringUtils; -import org.apache.syncope.client.console.SyncopeConsoleSession; -import org.apache.syncope.client.console.commons.Constants; -import org.apache.syncope.client.console.pages.BasePage; -import org.apache.syncope.client.console.panels.AbstractModalPanel; -import org.apache.syncope.client.console.rest.AnyTypeRestClient; -import org.apache.syncope.client.console.rest.ImplementationRestClient; -import org.apache.syncope.client.console.rest.PolicyRestClient; -import org.apache.syncope.client.console.rest.SchemaRestClient; -import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior; -import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel; -import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel; -import org.apache.syncope.client.console.wicket.markup.html.form.MultiPanel; -import org.apache.syncope.common.lib.policy.PullPolicyTO; -import org.apache.syncope.common.lib.to.EntityTO; -import org.apache.syncope.common.lib.types.AnyTypeKind; -import org.apache.syncope.common.lib.types.ConflictResolutionAction; -import org.apache.syncope.common.lib.types.ImplementationType; -import org.apache.syncope.common.lib.types.SchemaType; -import org.apache.wicket.PageReference; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.list.ListItem; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; - -public class PolicySpecModalPanel extends AbstractModalPanel<PullPolicyTO> { - - private static final long serialVersionUID = 5945391813567245081L; - - private enum CorrelationRuleType { - PLAIN_ATTRIBUTES, - CUSTOM; - - } - - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - - private final IModel<List<CorrelationRule>> model; - - private final PolicyRestClient restClient = new PolicyRestClient(); - - public PolicySpecModalPanel( - final PullPolicyTO policyTO, final BaseModal<PullPolicyTO> modal, final PageReference pageRef) { - - super(modal, pageRef); - modal.setFormModel(policyTO); - - add(new AjaxDropDownChoicePanel<>( - "conflictResolutionAction", - "conflictResolutionAction", - new PropertyModel<>(policyTO, "conflictResolutionAction")). - setChoices(Arrays.asList((Serializable[]) ConflictResolutionAction.values()))); - - model = new PropertyModel<List<CorrelationRule>>(policyTO, "correlationRules") { - - private static final long serialVersionUID = -8168676563540297301L; - - private List<CorrelationRule> rules = policyTO.getCorrelationRules().keySet().stream(). - map(rule -> new CorrelationRule(rule, policyTO.getCorrelationRules().get(rule))). - collect(Collectors.toList()); - - @Override - public List<CorrelationRule> getObject() { - return rules; - } - - @Override - public void setObject(final List<CorrelationRule> object) { - policyTO.getCorrelationRules().clear(); - rules.forEach(rule -> { - policyTO.getCorrelationRules().put(rule.getAny(), rule.getRule()); - }); - } - }; - - add(new MultiPanel<CorrelationRule>("correlationRules", "correlationRules", model) { - - private static final long serialVersionUID = -2481579077338205547L; - - @Override - protected CorrelationRule newModelObject() { - return new CorrelationRule(); - } - - @Override - protected CorrelationRulePanel getItemPanel(final ListItem<CorrelationRule> item) { - return new CorrelationRulePanel("panel", Model.of(item.getModelObject())); - } - }); - } - - @Override - public void onSubmit(final AjaxRequestTarget target, final Form<?> form) { - try { - getItem().getCorrelationRules().clear(); - model.getObject().forEach(rule -> { - getItem().getCorrelationRules().put(rule.getAny(), rule.getRule()); - }); - restClient.updatePolicy(getItem()); - SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED)); - this.modal.close(target); - } catch (Exception e) { - LOG.error("While creating/updating policy", e); - SyncopeConsoleSession.get().error( - StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()); - } - ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target); - } - - public static class CorrelationRulePanel extends Panel { - - private static final long serialVersionUID = -4708008994320210839L; - - private final ImplementationRestClient implRestClient = new ImplementationRestClient(); - - CorrelationRulePanel(final String id, final IModel<CorrelationRule> rule) { - super(id); - - AjaxDropDownChoicePanel<String> anyType = new AjaxDropDownChoicePanel<>( - "anyType", "any.type", new PropertyModel<String>(rule.getObject(), "any")). - setNullValid(true). - setChoices(new AnyTypeRestClient().list()); - add(anyType); - - final AjaxDropDownChoicePanel<CorrelationRuleType> ruleType = new AjaxDropDownChoicePanel<>( - "ruleType", "rule.type", new PropertyModel<CorrelationRuleType>(rule.getObject(), "type"), false). - setNullValid(true). - setChoices(Arrays.stream(CorrelationRuleType.values()).collect(Collectors.toList())); - add(ruleType); - - // --------------------------------------------------------------- - // Custom rule palette - // --------------------------------------------------------------- - List<String> rules = implRestClient.list(ImplementationType.PULL_CORRELATION_RULE).stream(). - map(EntityTO::getKey).sorted().collect(Collectors.toList()); - final AjaxDropDownChoicePanel<String> customRule = new AjaxDropDownChoicePanel<>( - "customRule", "rule.custom", new PropertyModel<String>(rule.getObject(), "rule")).setChoices(rules); - customRule.setOutputMarkupPlaceholderTag(true); - add(customRule.setVisible(CorrelationRuleType.CUSTOM == rule.getObject().getType())); - // --------------------------------------------------------------- - - // --------------------------------------------------------------- - // JSON rule palette - // --------------------------------------------------------------- - AjaxPalettePanel.Builder<String> jsonRuleBuilder = - new AjaxPalettePanel.Builder<String>().setName("rule.json"); - - final PropertyModel<List<String>> jsonRuleModel = - new PropertyModel<List<String>>(rule.getObject(), "rule") { - - private static final long serialVersionUID = 3799387950428254072L; - - @Override - public List<String> getObject() { - final List<String> res = new ArrayList<>(); - try { - JsonNode obj = OBJECT_MAPPER.readTree(rule.getObject().getRule()); - if (obj.isArray()) { - for (final JsonNode objNode : obj) { - res.add(objNode.asText()); - } - } - } catch (IOException e) { - LOG.warn("Error deserializing json tree", e); - } - return res; - } - - @Override - public void setObject(final List<String> object) { - final StringBuilder bld = new StringBuilder(); - bld.append("["); - - boolean comma = false; - for (String obj : object) { - if (comma) { - bld.append(","); - } else { - comma = true; - } - bld.append("\"").append(obj).append("\""); - } - bld.append("]"); - rule.getObject().setRule(bld.toString()); - } - }; - - final AjaxPalettePanel<String> jsonRule = - jsonRuleBuilder.build("jsonRule", jsonRuleModel, new AjaxPalettePanel.Builder.Query<String>() { - - private static final long serialVersionUID = -7223078772249308813L; - - @Override - public List<String> execute(final String filter) { - return getPlainSchemas(rule.getObject()); - } - }); - jsonRule.hideLabel().setOutputMarkupPlaceholderTag(true); - - anyType.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - if (jsonRule.isVisibleInHierarchy()) { - rule.getObject().setRule("[]"); - jsonRule.reload(target); - target.add(jsonRule); - } - } - }); - - add(jsonRule.setVisible(CorrelationRuleType.PLAIN_ATTRIBUTES == rule.getObject().getType())); - // --------------------------------------------------------------- - - ruleType.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { - - private static final long serialVersionUID = -1107858522700306810L; - - @Override - protected void onUpdate(final AjaxRequestTarget target) { - switch (ruleType.getModelObject()) { - case PLAIN_ATTRIBUTES: - jsonRule.setVisible(true); - customRule.setVisible(false); - jsonRule.reload(target); - break; - - case CUSTOM: - jsonRule.setVisible(false); - customRule.setVisible(true); - break; - - default: - customRule.setVisible(false); - jsonRule.setVisible(false); - - } - target.add(jsonRule); - target.add(customRule); - } - }); - } - - private static List<String> getPlainSchemas(final CorrelationRule rule) { - final List<String> choices = StringUtils.isEmpty(rule.getAny()) - ? new ArrayList<>() - : new SchemaRestClient().getSchemas(SchemaType.PLAIN, - rule.getAny().equals(AnyTypeKind.USER.name()) - ? AnyTypeKind.USER - : rule.getAny().equals(AnyTypeKind.GROUP.name()) - ? AnyTypeKind.GROUP - : AnyTypeKind.ANY_OBJECT).stream().map(EntityTO::getKey). - collect(Collectors.toList()); - - choices.add("key"); - choices.add(rule.getAny().equals(AnyTypeKind.USER.name()) ? "username" : "name"); - Collections.sort(choices); - return choices; - } - } - - private static class CorrelationRule implements Serializable { - - private static final long serialVersionUID = 5250228867297353011L; - - private String any; - - private CorrelationRuleType type; - - private String rule; - - CorrelationRule() { - this.any = AnyTypeKind.USER.name(); - this.type = CorrelationRuleType.PLAIN_ATTRIBUTES; - this.rule = "[]"; - } - - CorrelationRule(final String any, final String rule) { - this.any = any; - this.type = StringUtils.isEmpty(rule) || rule.trim().startsWith("[") ? CorrelationRuleType.PLAIN_ATTRIBUTES - : CorrelationRuleType.CUSTOM; - this.rule = rule; - } - - public String getAny() { - return any; - } - - public CorrelationRuleType getType() { - return type; - } - - public String getRule() { - return rule; - } - - public void setAny(final String any) { - this.any = any; - } - - public void setType(final CorrelationRuleType type) { - this.type = type; - } - - public void setRule(final String rule) { - this.rule = rule; - } - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java index 5a29cae..735aa24 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyDirectoryPanel.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.client.console.policies; +import java.util.List; import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel; import org.apache.syncope.common.lib.policy.PullPolicyTO; @@ -26,6 +27,8 @@ import org.apache.syncope.common.lib.types.StandardEntitlement; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; @@ -50,6 +53,12 @@ public class PullPolicyDirectoryPanel extends PolicyDirectoryPanel<PullPolicyTO> } @Override + protected void addCustomColumnFields(final List<IColumn<PullPolicyTO, String>> columns) { + columns.add(new PropertyColumn<>(new StringResourceModel( + "conflictResolutionAction", this), "conflictResolutionAction", "conflictResolutionAction")); + } + + @Override protected void addCustomActions(final ActionsPanel<PullPolicyTO> panel, final IModel<PullPolicyTO> model) { panel.add(new ActionLink<PullPolicyTO>() { @@ -58,7 +67,7 @@ public class PullPolicyDirectoryPanel extends PolicyDirectoryPanel<PullPolicyTO> @Override public void onClick(final AjaxRequestTarget target, final PullPolicyTO ignore) { target.add(policySpecModal.setContent( - new PolicySpecModalPanel(model.getObject(), policySpecModal, pageRef))); + new PullPolicyModalPanel(model.getObject(), policySpecModal, pageRef))); policySpecModal.header(new StringResourceModel( "policy.rules", PullPolicyDirectoryPanel.this, Model.of(model.getObject()))); http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyModalPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyModalPanel.java new file mode 100644 index 0000000..23a2283 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PullPolicyModalPanel.java @@ -0,0 +1,338 @@ +/* + * 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.client.console.policies; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; +import org.apache.syncope.client.console.SyncopeConsoleSession; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.pages.BasePage; +import org.apache.syncope.client.console.panels.AbstractModalPanel; +import org.apache.syncope.client.console.rest.AnyTypeRestClient; +import org.apache.syncope.client.console.rest.ImplementationRestClient; +import org.apache.syncope.client.console.rest.PolicyRestClient; +import org.apache.syncope.client.console.rest.SchemaRestClient; +import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel; +import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel; +import org.apache.syncope.client.console.wicket.markup.html.form.MultiPanel; +import org.apache.syncope.common.lib.policy.DefaultPullCorrelationRuleConf; +import org.apache.syncope.common.lib.policy.PullPolicyTO; +import org.apache.syncope.common.lib.to.EntityTO; +import org.apache.syncope.common.lib.to.ImplementationTO; +import org.apache.syncope.common.lib.types.AnyTypeKind; +import org.apache.syncope.common.lib.types.ImplementationEngine; +import org.apache.syncope.common.lib.types.ImplementationType; +import org.apache.syncope.common.lib.types.SchemaType; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; + +public class PullPolicyModalPanel extends AbstractModalPanel<PullPolicyTO> { + + private static final long serialVersionUID = 2988891313881271124L; + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private final PolicyRestClient restClient = new PolicyRestClient(); + + private final ImplementationRestClient implRestClient = new ImplementationRestClient(); + + private final SchemaRestClient schemaRestClient = new SchemaRestClient(); + + private final LoadableDetachableModel<Map<String, ImplementationTO>> implementations = + new LoadableDetachableModel<Map<String, ImplementationTO>>() { + + private static final long serialVersionUID = 5275935387613157437L; + + @Override + protected Map<String, ImplementationTO> load() { + return implRestClient.list(ImplementationType.PULL_CORRELATION_RULE).stream(). + collect(Collectors.toMap(EntityTO::getKey, Function.identity())); + } + }; + + private final IModel<List<CorrelationRule>> model; + + public PullPolicyModalPanel( + final PullPolicyTO policyTO, + final BaseModal<PullPolicyTO> modal, + final PageReference pageRef) { + + super(modal, pageRef); + modal.setFormModel(policyTO); + + model = new PropertyModel<List<CorrelationRule>>(policyTO, "correlationRules") { + + private static final long serialVersionUID = -8168676563540297301L; + + private final List<CorrelationRule> rules = policyTO.getCorrelationRules().keySet().stream(). + map(anyType -> new CorrelationRule(anyType, + implementations.getObject().get(policyTO.getCorrelationRules().get(anyType)))). + collect(Collectors.toList()); + + @Override + public List<CorrelationRule> getObject() { + return rules; + } + + @Override + public void setObject(final List<CorrelationRule> object) { + policyTO.getCorrelationRules().clear(); + rules.forEach(rule -> { + policyTO.getCorrelationRules().put(rule.getAnyType(), rule.getImpl().getKey()); + }); + } + }; + + add(new MultiPanel<CorrelationRule>("correlationRules", "correlationRules", model) { + + private static final long serialVersionUID = -2481579077338205547L; + + @Override + protected CorrelationRule newModelObject() { + return new CorrelationRule(); + } + + @Override + protected CorrelationRulePanel getItemPanel(final ListItem<CorrelationRule> item) { + return new CorrelationRulePanel("panel", Model.of(item.getModelObject())); + } + }); + } + + @Override + public void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + try { + getItem().getCorrelationRules().clear(); + model.getObject().forEach(rule -> { + getItem().getCorrelationRules().put(rule.getAnyType(), rule.getImplKey()); + + if (rule.getImpl().getEngine() == ImplementationEngine.JAVA && rule.getDefaultRuleConf() != null) { + try { + implRestClient.update(rule.getImpl()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }); + restClient.updatePolicy(getItem()); + + SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED)); + this.modal.close(target); + } catch (Exception e) { + LOG.error("While creating/updating policy", e); + SyncopeConsoleSession.get().error( + StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()); + } + ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target); + } + + protected class CorrelationRulePanel extends Panel { + + private static final long serialVersionUID = -5380414818290018189L; + + CorrelationRulePanel(final String id, final IModel<CorrelationRule> correlationRule) { + super(id); + + AjaxDropDownChoicePanel<String> anyType = new AjaxDropDownChoicePanel<>( + "anyType", "anyType", new PropertyModel<String>(correlationRule.getObject(), "anyType")). + setNullValid(true). + setChoices(new AnyTypeRestClient().list()); + anyType.setNullValid(false); + anyType.setRequired(true); + anyType.setOutputMarkupId(true); + add(anyType); + + AjaxDropDownChoicePanel<String> rule = new AjaxDropDownChoicePanel<>( + "rule", "rule", new PropertyModel<String>(correlationRule.getObject(), "implKey")). + setChoices(implementations.getObject().keySet().stream().sorted().collect(Collectors.toList())); + rule.setNullValid(false); + rule.setRequired(true); + rule.setOutputMarkupId(true); + add(rule); + + PropertyModel<List<String>> defaultRuleConfModel = + new PropertyModel<List<String>>(correlationRule.getObject().getDefaultRuleConf(), "schemas") { + + private static final long serialVersionUID = 3799387950428254072L; + + @Override + public List<String> getObject() { + List<String> schemas = new ArrayList<>(); + if (correlationRule.getObject().getDefaultRuleConf() != null) { + schemas.addAll(correlationRule.getObject().getDefaultRuleConf().getSchemas()); + } + return schemas; + } + + @Override + public void setObject(final List<String> object) { + if (correlationRule.getObject().getDefaultRuleConf() != null) { + correlationRule.getObject().getDefaultRuleConf().getSchemas().clear(); + correlationRule.getObject().getDefaultRuleConf().getSchemas().addAll(object); + } + } + }; + + AjaxPalettePanel<String> defaultRuleConf = new AjaxPalettePanel.Builder<String>(). + setName("defaultRuleConf").build("defaultRuleConf", + defaultRuleConfModel, new AjaxPalettePanel.Builder.Query<String>() { + + private static final long serialVersionUID = -7223078772249308813L; + + @Override + public List<String> execute(final String filter) { + return getSchemas(correlationRule.getObject()); + } + }); + defaultRuleConf.hideLabel().setOutputMarkupPlaceholderTag(true); + add(defaultRuleConf.setVisible(correlationRule.getObject().getDefaultRuleConf() != null)); + + anyType.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + + private static final long serialVersionUID = -1107858522700306810L; + + @Override + protected void onUpdate(final AjaxRequestTarget target) { + if (defaultRuleConf.isVisibleInHierarchy()) { + correlationRule.getObject().setImpl(null); + defaultRuleConf.reload(target); + target.add(defaultRuleConf); + } + } + }); + + rule.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + + private static final long serialVersionUID = -1107858522700306810L; + + @Override + protected void onUpdate(final AjaxRequestTarget target) { + if (correlationRule.getObject().getDefaultRuleConf() == null) { + defaultRuleConf.setVisible(false); + } else { + defaultRuleConf.setVisible(true); + } + target.add(defaultRuleConf); + } + }); + } + + private List<String> getSchemas(final CorrelationRule rule) { + List<String> choices = StringUtils.isEmpty(rule.getAnyType()) + ? new ArrayList<>() + : schemaRestClient.getSchemas(SchemaType.PLAIN, + rule.getAnyType().equals(AnyTypeKind.USER.name()) + ? AnyTypeKind.USER + : rule.getAnyType().equals(AnyTypeKind.GROUP.name()) + ? AnyTypeKind.GROUP + : AnyTypeKind.ANY_OBJECT).stream().map(EntityTO::getKey). + collect(Collectors.toList()); + choices.add("key"); + choices.add(rule.getAnyType().equals(AnyTypeKind.USER.name()) ? "username" : "name"); + Collections.sort(choices); + return choices; + } + } + + private class CorrelationRule implements Serializable { + + private static final long serialVersionUID = 4221521483948294336L; + + private String anyType; + + private ImplementationTO impl; + + private DefaultPullCorrelationRuleConf defaultRuleConf; + + CorrelationRule() { + this.anyType = AnyTypeKind.USER.name(); + } + + CorrelationRule(final String anyType, final ImplementationTO impl) { + this.anyType = anyType; + setImpl(impl); + } + + public String getAnyType() { + return anyType; + } + + public void setAnyType(final String anyType) { + this.anyType = anyType; + } + + public String getImplKey() { + return impl == null ? null : impl.getKey(); + } + + public void setImplKey(final String key) { + setImpl(implementations.getObject().get(key)); + } + + public final void setImpl(final ImplementationTO impl) { + this.impl = impl; + if (impl != null) { + this.defaultRuleConf = null; + try { + this.defaultRuleConf = OBJECT_MAPPER.readValue( + impl.getBody(), DefaultPullCorrelationRuleConf.class); + } catch (Exception e) { + LOG.debug("Could not deserialize {} as {}", + impl.getBody(), DefaultPullCorrelationRuleConf.class.getName()); + } + } + } + + public ImplementationTO getImpl() { + if (defaultRuleConf != null) { + try { + this.impl.setBody(OBJECT_MAPPER.writeValueAsString(defaultRuleConf)); + } catch (Exception e) { + LOG.error("Could not serialize {}", defaultRuleConf); + } + } + return impl; + } + + public void setDefaultRuleConf(final DefaultPullCorrelationRuleConf defaultRuleConf) { + this.defaultRuleConf = defaultRuleConf; + } + + public DefaultPullCorrelationRuleConf getDefaultRuleConf() { + return defaultRuleConf; + } + + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java index 667cc92..db7f4b8 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java @@ -26,7 +26,6 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; -import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.client.console.SyncopeConsoleSession; import org.apache.syncope.client.console.commons.Constants; @@ -138,20 +137,6 @@ public class ReportletDirectoryPanel extends DirectoryPanel< @Override public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) { ReportletDirectoryPanel.this.getTogglePanel().close(target); - ReportletConf clone = SerializationUtils.clone(model.getObject().getConf()); - - send(ReportletDirectoryPanel.this, Broadcast.EXACT, - new AjaxWizard.EditItemActionEvent<>( - new ReportletWrapper(true).setConf(clone), target)); - } - }, ActionLink.ActionType.CLONE, StandardEntitlement.REPORT_CREATE); - panel.add(new ActionLink<ReportletWrapper>() { - - private static final long serialVersionUID = -3722207913631435501L; - - @Override - public void onClick(final AjaxRequestTarget target, final ReportletWrapper ignore) { - ReportletDirectoryPanel.this.getTogglePanel().close(target); if (model.getObject().getConf() == null) { SyncopeConsoleSession.get().info(getString("noConf")); } else { http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java index 7d64b7d..06e126b 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java @@ -136,7 +136,7 @@ public class Relationships extends WizardStep implements ICondition { public Panel getPanel(final String panelId) { return new ListViewPanel.Builder<>(RelationshipTO.class, pageRef). setItems(relationships.get(relationship)). - includes("rightType", "rightKey"). + includes("otherEndType", "otherEndKey"). addAction(new ActionLink<RelationshipTO>() { private static final long serialVersionUID = -6847033126124401556L; http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullCorrelationRule.groovy ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullCorrelationRule.groovy b/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullCorrelationRule.groovy index 6f48a4c..bb56ebe 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullCorrelationRule.groovy +++ b/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullCorrelationRule.groovy @@ -17,15 +17,16 @@ * under the License. */ import groovy.transform.CompileStatic +import org.apache.syncope.core.persistence.api.dao.PullCorrelationRule import org.apache.syncope.core.persistence.api.dao.search.SearchCond -import org.apache.syncope.core.provisioning.api.pushpull.PullCorrelationRule +import org.apache.syncope.core.persistence.api.entity.resource.Provision import org.identityconnectors.framework.common.objects.ConnectorObject @CompileStatic class MyPullCorrelationRule implements PullCorrelationRule { @Override - SearchCond getSearchCond(ConnectorObject connObj) { + SearchCond getSearchCond(ConnectorObject connObj, Provision provision) { } } http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties index be212f8..b9074b2 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel.properties @@ -28,3 +28,4 @@ any.new=New Policy any.finish=Submit ${description} any.cancel=Cancel ${description} compose.title=rules +conflictResolutionAction=Conflict Resolution Action http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties index 9a00b8d..f93168d 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_it.properties @@ -28,3 +28,4 @@ any.new=Nuova Policy any.finish=Invia ${description} any.cancel=Annulla ${description} compose.title=regole +conflictResolutionAction=Azione di Risoluzione Conflitti http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties index be212f8..b9074b2 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_pt_BR.properties @@ -28,3 +28,4 @@ any.new=New Policy any.finish=Submit ${description} any.cancel=Cancel ${description} compose.title=rules +conflictResolutionAction=Conflict Resolution Action http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties index afbd430..d161fdc 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicyDirectoryPanel_ru.properties @@ -29,3 +29,4 @@ any.new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u0438\u044 any.finish=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c ${description} any.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c ${description} compose.title=rules +conflictResolutionAction=Conflict Resolution Action http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel$CorrelationRulePanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel$CorrelationRulePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel$CorrelationRulePanel.html deleted file mode 100644 index d514604..0000000 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel$CorrelationRulePanel.html +++ /dev/null @@ -1,32 +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. ---> -<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> - <wicket:panel> - <div class="form-group"> - <span wicket:id="anyType"/> - </div> - <div class="form-group"> - <span wicket:id="ruleType"/> - </div> - <div class="form-group"> - <span wicket:id="customRule"/> - <span wicket:id="jsonRule"/> - </div> - </wicket:panel> -</html> http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel.html deleted file mode 100644 index 9aaced7..0000000 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel.html +++ /dev/null @@ -1,28 +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. ---> -<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> - <wicket:panel> - <div class="form-group"> - <span wicket:id="conflictResolutionAction"/> - </div> - <div class="form-group"> - <span wicket:id="correlationRules"/> - </div> - </wicket:panel> -</html> http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel.properties deleted file mode 100644 index 1c6b31c..0000000 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel.properties +++ /dev/null @@ -1,22 +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. -rule.custom=Custom -rule.json=Plain attributes -rule.type=Rule Type -any.type=Applies to -correlationRules=Correlation Rules -conflictResolutionAction=Conflict Resolution Action http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_it.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_it.properties deleted file mode 100644 index 040e8fd..0000000 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_it.properties +++ /dev/null @@ -1,22 +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. -rule.custom=Custom -rule.json=Attributi -rule.type=Tipo Regola -any.type=Applicata a -correlationRules=Regole di Correlazione -conflictResolutionAction=Azione di Risoluzione Conflitti http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_pt_BR.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_pt_BR.properties deleted file mode 100644 index 1c6b31c..0000000 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_pt_BR.properties +++ /dev/null @@ -1,22 +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. -rule.custom=Custom -rule.json=Plain attributes -rule.type=Rule Type -any.type=Applies to -correlationRules=Correlation Rules -conflictResolutionAction=Conflict Resolution Action http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_ru.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_ru.properties deleted file mode 100644 index 8d35548..0000000 --- a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PolicySpecModalPanel_ru.properties +++ /dev/null @@ -1,23 +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. -# -rule.custom=Custom -rule.json=\u041f\u0440\u0430\u0432\u0438\u043b\u043e JSON -rule.type=\u0422\u0438\u043f \u043f\u0440\u0430\u0432\u0438\u043b -any.type=\u041e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 -correlationRules=\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438 -conflictResolutionAction=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel$CorrelationRulePanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel$CorrelationRulePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel$CorrelationRulePanel.html new file mode 100644 index 0000000..0092417 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel$CorrelationRulePanel.html @@ -0,0 +1,31 @@ +<!-- +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. +--> +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> + <wicket:panel> + <div class="form-group"> + <span wicket:id="anyType"/> + </div> + <div class="form-group"> + <span wicket:id="rule"/> + </div> + <div class="form-group"> + <span wicket:id="defaultRuleConf"/> + </div> + </wicket:panel> +</html> http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel.html new file mode 100644 index 0000000..5ade68c --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel.html @@ -0,0 +1,25 @@ +<!-- +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. +--> +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> + <wicket:panel> + <div class="form-group"> + <span wicket:id="correlationRules"/> + </div> + </wicket:panel> +</html> http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel.properties new file mode 100644 index 0000000..a661523 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel.properties @@ -0,0 +1,19 @@ +# 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. +rule=Rule +anyType=Applies to +correlationRules=Correlation Rules http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_it.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_it.properties new file mode 100644 index 0000000..18420ca --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_it.properties @@ -0,0 +1,20 @@ +# 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. +# +rule=Regola +anyType=Applicata a +correlationRules=Regole di Correlazione http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_pt_BR.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_pt_BR.properties new file mode 100644 index 0000000..e8338c2 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_pt_BR.properties @@ -0,0 +1,20 @@ +# 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. +# +rule=Rule +anyType=Applies to +correlationRules=Correlation Rules http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_ru.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_ru.properties new file mode 100644 index 0000000..39701d7 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/policies/PullPolicyModalPanel_ru.properties @@ -0,0 +1,20 @@ +# 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. +# +rule=Rule +anyType=\u041e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 +correlationRules=\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438 http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/common/lib/src/main/java/org/apache/syncope/common/lib/Schema.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/Schema.java b/common/lib/src/main/java/org/apache/syncope/common/lib/Schema.java new file mode 100644 index 0000000..625e31d --- /dev/null +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/Schema.java @@ -0,0 +1,37 @@ +/* + * 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.common.lib; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import org.apache.syncope.common.lib.types.AnyTypeKind; +import org.apache.syncope.common.lib.types.SchemaType; + +@Target({ ElementType.FIELD }) +@Retention(RetentionPolicy.RUNTIME) +public @interface Schema { + + SchemaType[] type() default { SchemaType.PLAIN }; + + AnyTypeKind anyTypeKind() default AnyTypeKind.USER; + + boolean includeFields() default false; +} http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPullCorrelationRuleConf.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPullCorrelationRuleConf.java b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPullCorrelationRuleConf.java new file mode 100644 index 0000000..c545b9d --- /dev/null +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPullCorrelationRuleConf.java @@ -0,0 +1,52 @@ +/* + * 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.common.lib.policy; + +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; +import org.apache.commons.lang3.StringUtils; +import org.apache.syncope.common.lib.AbstractBaseBean; + +@XmlType +@XmlSeeAlso({ DefaultPullCorrelationRuleConf.class }) +public abstract class AbstractPullCorrelationRuleConf extends AbstractBaseBean implements PullCorrelationRuleConf { + + private static final long serialVersionUID = -4080475005967851092L; + + private String name; + + public AbstractPullCorrelationRuleConf() { + this(StringUtils.EMPTY); + setName(getClass().getName()); + } + + public AbstractPullCorrelationRuleConf(final String name) { + super(); + this.name = name; + } + + @Override + public final String getName() { + return name; + } + + public final void setName(final String name) { + this.name = name; + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultAccountRuleConf.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultAccountRuleConf.java b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultAccountRuleConf.java index 2788a4a..81b86c2 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultAccountRuleConf.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultAccountRuleConf.java @@ -25,7 +25,7 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; -import org.apache.syncope.common.lib.report.Schema; +import org.apache.syncope.common.lib.Schema; import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.SchemaType; http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPasswordRuleConf.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPasswordRuleConf.java b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPasswordRuleConf.java index b622546..71e7488 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPasswordRuleConf.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPasswordRuleConf.java @@ -25,7 +25,7 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; -import org.apache.syncope.common.lib.report.Schema; +import org.apache.syncope.common.lib.Schema; import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.SchemaType; http://git-wip-us.apache.org/repos/asf/syncope/blob/17174c7a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPullCorrelationRuleConf.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPullCorrelationRuleConf.java b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPullCorrelationRuleConf.java new file mode 100644 index 0000000..c781f50 --- /dev/null +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/DefaultPullCorrelationRuleConf.java @@ -0,0 +1,47 @@ +/* + * 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.common.lib.policy; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import org.apache.syncope.common.lib.Schema; +import org.apache.syncope.common.lib.types.SchemaType; + +@XmlRootElement(name = "defaultPullCorrelationRuleConf") +@XmlType +public class DefaultPullCorrelationRuleConf extends AbstractPullCorrelationRuleConf implements PullCorrelationRuleConf { + + private static final long serialVersionUID = 429126085793346273L; + + @Schema(type = { SchemaType.PLAIN }, includeFields = true) + private final List<String> schemas = new ArrayList<>(); + + @XmlElementWrapper(name = "schemas") + @XmlElement(name = "schema") + @JsonProperty("schemas") + public List<String> getSchemas() { + return schemas; + } + +}