Repository: syncope Updated Branches: refs/heads/2_0_X c9354a517 -> 6c9018fff refs/heads/master fdc991aa6 -> 1d74b79c2
[SYNCOPE-1138] Replacing left and right with otherEnd Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/6c9018ff Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/6c9018ff Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/6c9018ff Branch: refs/heads/2_0_X Commit: 6c9018fff5c6353a9a7eab3338ba7d691685209c Parents: c9354a5 Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Tue Oct 17 09:50:02 2017 +0200 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Tue Oct 17 09:50:02 2017 +0200 ---------------------------------------------------------------------- .../console/wizards/any/AbstractAttrs.java | 2 +- .../client/console/wizards/any/Groups.java | 8 ++-- .../console/wizards/any/Relationships.java | 37 ++++++++------- .../any/Relationships$Specification.html | 2 +- .../app/js/controllers/UserController.js | 4 +- .../resources/app/js/directives/groups.js | 4 +- .../resources/app/js/filters/propsFilter.js | 11 +++-- .../META-INF/resources/app/views/groups.html | 2 +- .../syncope/common/lib/EntityTOUtils.java | 4 +- .../syncope/common/lib/to/AnyObjectTO.java | 4 +- .../common/lib/to/GroupableRelatableTO.java | 2 +- .../syncope/common/lib/to/MembershipTO.java | 35 ++++----------- .../syncope/common/lib/to/RelationshipTO.java | 28 ++++++------ .../apache/syncope/common/lib/to/UserTO.java | 6 +-- .../core/persistence/api/dao/AnyObjectDAO.java | 5 ++- .../persistence/jpa/dao/JPAAnyObjectDAO.java | 27 ++++++++--- .../jpa/entity/AbstractGroupableRelatable.java | 13 ------ .../jpa/entity/anyobject/JPAAnyObject.java | 17 +++++++ .../persistence/jpa/entity/user/JPAUser.java | 15 +++++++ .../test/resources/domains/MasterContent.xml | 2 +- .../java/data/AbstractAnyDataBinder.java | 7 +-- .../java/data/AnyObjectDataBinderImpl.java | 47 +++++++++++--------- .../java/data/UserDataBinderImpl.java | 19 ++++---- .../java/job/report/UserReportlet.java | 10 ++--- .../provisioning/java/utils/TemplateUtils.java | 2 +- .../client/ElasticsearchUtils.java | 4 +- .../syncope/fit/core/AnyObjectITCase.java | 2 +- .../apache/syncope/fit/core/PullTaskITCase.java | 2 +- .../syncope/fit/core/UserWorkflowITCase.java | 4 +- 29 files changed, 171 insertions(+), 154 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java index 334a97f..75ca867 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java @@ -215,7 +215,7 @@ public abstract class AbstractAttrs<S extends AbstractSchemaTO> extends WizardSt protected List<String> getMembershipAuxClasses(final MembershipTO membershipTO, final String anyType) { try { - final GroupTO groupTO = groupRestClient.read(membershipTO.getRightKey()); + final GroupTO groupTO = groupRestClient.read(membershipTO.getGroupKey()); return groupTO.getTypeExtension(anyType).getAuxClasses(); } catch (Exception e) { return Collections.emptyList(); http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java index 499bc26..2c28a23 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java @@ -155,7 +155,7 @@ public class Groups extends WizardStep implements ICondition { : groupRestClient.search( anyTO.getRealm(), SyncopeClient.getGroupSearchConditionBuilder(). - isAssignable().and().is("name").equalTo(filter).query(), + isAssignable().and().is("name").equalTo(filter).query(), 1, MAX_GROUP_LIST_CARDINALITY, new SortParam<>("name", true), null), @@ -223,7 +223,7 @@ public class Groups extends WizardStep implements ICondition { ? CollectionUtils.isNotEmpty(allDynRealms) : CollectionUtils.isNotEmpty(allDynRealms) || CollectionUtils.isNotEmpty(groupsModel.getObject())) && SyncopeConsoleApplication.get().getSecuritySettings().getAuthorizationStrategy(). - isActionAuthorized(this, RENDER); + isActionAuthorized(this, RENDER); } private class GroupsModel extends ListModel<GroupTO> { @@ -290,8 +290,8 @@ public class Groups extends WizardStep implements ICondition { // set group names in membership TOs and remove membership not assignable List<MembershipTO> toBeRemoved = new ArrayList<>(); for (MembershipTO membership : GroupableRelatableTO.class.cast(anyTO).getMemberships()) { - if (assignedGroups.containsKey(membership.getRightKey())) { - membership.setGroupName(assignedGroups.get(membership.getRightKey()).getName()); + if (assignedGroups.containsKey(membership.getGroupKey())) { + membership.setGroupName(assignedGroups.get(membership.getGroupKey()).getName()); } else { toBeRemoved.add(membership); } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/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 115da51..5fd4726 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java @@ -18,7 +18,6 @@ */ package org.apache.syncope.client.console.wizards.any; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -95,7 +94,7 @@ public class Relationships extends WizardStep implements WizardModel.ICondition private final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient(); private final AnyTO anyTO; - + private final RelationshipTypeRestClient relationshipTypeRestClient = new RelationshipTypeRestClient(); public Relationships(final AnyWrapper<?> modelObject, final PageReference pageRef) { @@ -149,7 +148,7 @@ public class Relationships extends WizardStep implements WizardModel.ICondition public Panel getPanel(final String panelId) { return new ListViewPanel.Builder<>(RelationshipTO.class, pageRef). setItems(relationships.get(input)). - includes("rightType", "rightKey"). + includes("otherEndType", "otherEndKey"). addAction(new ActionLink<RelationshipTO>() { private static final long serialVersionUID = -6847033126124401556L; @@ -275,15 +274,15 @@ public class Relationships extends WizardStep implements WizardModel.ICondition } }); - final AjaxDropDownChoicePanel<AnyTypeTO> rightType = new AjaxDropDownChoicePanel<>( - "rightType", "rightType", new PropertyModel<AnyTypeTO>(rel, "rightType") { + final AjaxDropDownChoicePanel<AnyTypeTO> otherType = new AjaxDropDownChoicePanel<>( + "otherType", "otherType", new PropertyModel<AnyTypeTO>(rel, "otherType") { private static final long serialVersionUID = -5861057041758169508L; @Override public AnyTypeTO getObject() { for (AnyTypeTO obj : availableTypes) { - if (obj.getKey().equals(rel.getRightType())) { + if (obj.getKey().equals(rel.getOtherEndType())) { return obj; } } @@ -292,11 +291,11 @@ public class Relationships extends WizardStep implements WizardModel.ICondition @Override public void setObject(final AnyTypeTO object) { - rel.setRightType(object == null ? null : object.getKey()); + rel.setOtherEndType(object == null ? null : object.getKey()); } }, false); - rightType.setChoices(availableTypes); - rightType.setChoiceRenderer(new IChoiceRenderer<AnyTypeTO>() { + otherType.setChoices(availableTypes); + otherType.setChoiceRenderer(new IChoiceRenderer<AnyTypeTO>() { private static final long serialVersionUID = -734743540442190178L; @@ -321,9 +320,9 @@ public class Relationships extends WizardStep implements WizardModel.ICondition }); } }); - // enable "rightType" dropdown only if "type" option is selected - SYNCOPE-1140 - rightType.setEnabled(false); - add(rightType); + // enable "otherType" dropdown only if "type" option is selected - SYNCOPE-1140 + otherType.setEnabled(false); + add(otherType); final WebMarkupContainer container = new WebMarkupContainer("searchPanelContainer"); container.setOutputMarkupId(true); @@ -340,21 +339,21 @@ public class Relationships extends WizardStep implements WizardModel.ICondition protected void onUpdate(final AjaxRequestTarget target) { Fragment emptyFragment = new Fragment("searchPanel", "emptyFragment", Specification.this); container.addOrReplace(emptyFragment.setRenderBodyOnly(true)); - rightType.setModelObject(null); - // enable "rightType" dropdown only if "type" option is selected - SYNCOPE-1140 - rightType.setEnabled(type.getModelObject() != null && !type.getModelObject().isEmpty()); - target.add(rightType); + otherType.setModelObject(null); + // enable "otherType" dropdown only if "type" option is selected - SYNCOPE-1140 + otherType.setEnabled(type.getModelObject() != null && !type.getModelObject().isEmpty()); + target.add(otherType); target.add(container); } }); - rightType.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + otherType.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { private static final long serialVersionUID = -1107858522700306810L; @Override protected void onUpdate(final AjaxRequestTarget target) { - final AnyTypeTO anyType = rightType.getModelObject(); + final AnyTypeTO anyType = otherType.getModelObject(); if (anyType == null) { Fragment emptyFragment = new Fragment("searchPanel", "emptyFragment", Specification.this); container.addOrReplace(emptyFragment.setRenderBodyOnly(true)); @@ -396,7 +395,7 @@ public class Relationships extends WizardStep implements WizardModel.ICondition getPayload()).getTarget(); AnyTO right = AnySelectionDirectoryPanel.ItemSelection.class.cast(event.getPayload()).getSelection(); - rel.setRightKey(right.getKey()); + rel.setOtherEndKey(right.getKey()); Relationships.this.addNewRelationships(rel); http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html index cce2c7c..83ab31d 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html @@ -25,7 +25,7 @@ under the License. </div> <div class="form-group"> - <span wicket:id="rightType"/> + <span wicket:id="otherType"/> </div> <div wicket:id="searchPanelContainer"> http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js index cfc57ed..acf8a06 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js +++ b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js @@ -221,7 +221,7 @@ angular.module("self").controller("UserController", ['$scope', '$rootScope', '$l GroupService.getGroups(realm).then(function (response) { $scope.dynamicForm.groups = new Array(); for (var i in response) { - $scope.dynamicForm.groups.push({"rightKey": response[i].key, "groupName": response[i].name}); + $scope.dynamicForm.groups.push({"groupKey": response[i].key, "groupName": response[i].name}); } $scope.dynamicForm.groups.sort(function (a, b) { var x = a.groupName; @@ -284,7 +284,7 @@ angular.module("self").controller("UserController", ['$scope', '$rootScope', '$l for (var index in $scope.user.memberships) { $scope.dynamicForm.selectedGroups.push( { - "rightKey": $scope.user.memberships[index]["rightKey"].toString(), + "groupKey": $scope.user.memberships[index]["groupKey"].toString(), "groupName": $scope.user.memberships[index]["groupName"] }); } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/client/enduser/src/main/resources/META-INF/resources/app/js/directives/groups.js ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/directives/groups.js b/client/enduser/src/main/resources/META-INF/resources/app/js/directives/groups.js index 330b1a4..8cb89a9 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/js/directives/groups.js +++ b/client/enduser/src/main/resources/META-INF/resources/app/js/directives/groups.js @@ -33,10 +33,10 @@ angular.module('self') $scope.user.memberships = new Array(); } }; - + $scope.addGroup = function (item, model) { var membership = item; - $scope.user.memberships.push({"rightKey": membership.rightKey, "groupName": membership.groupName}); + $scope.user.memberships.push({"groupKey": membership.groupKey, "groupName": membership.groupName}); $scope.$emit("groupAdded", membership.groupName); }; http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/client/enduser/src/main/resources/META-INF/resources/app/js/filters/propsFilter.js ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/filters/propsFilter.js b/client/enduser/src/main/resources/META-INF/resources/app/js/filters/propsFilter.js index fe23dce..51e0159 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/js/filters/propsFilter.js +++ b/client/enduser/src/main/resources/META-INF/resources/app/js/filters/propsFilter.js @@ -29,23 +29,22 @@ angular.module("self") .filter('propsFilter', function () { return function (items, props) { - var out = []; + var out = []; if (items && items.length && props.selected && props.selected.length) { - var selected = props.selected; + var selected = props.selected; for (var i = 0; i < items.length; i++) { var item = items[i], itemMisses = true; for (var j = 0; j < selected.length; j++) { - if (item.rightKey == selected[j].rightKey) { + if (item.groupKey == selected[j].groupKey) { itemMisses = false; break; } } - if(itemMisses){ + if (itemMisses) { out.push(item); } } - } - else{ + } else { out = items; } return out; http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/client/enduser/src/main/resources/META-INF/resources/app/views/groups.html ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/groups.html b/client/enduser/src/main/resources/META-INF/resources/app/views/groups.html index ef77ae1..38e6a29 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/views/groups.html +++ b/client/enduser/src/main/resources/META-INF/resources/app/views/groups.html @@ -25,7 +25,7 @@ under the License. {{$item.groupName}} </ui-select-match> <ui-select-choices repeat="group in dynamicForm.groups | propsFilter: {selected: dynamicForm.selectedGroups} - track by group.rightKey" class="ui-select-choices"> + track by group.groupKey" class="ui-select-choices"> <div id="{{group.groupName}}" ng-bind-html="group.groupName | highlight: $select.search"></div> </ui-select-choices> </ui-select> http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java b/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java index dfc0a1e..d42a625 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java @@ -55,7 +55,7 @@ public final class EntityTOUtils { Map<Pair<String, String>, RelationshipTO> result = new HashMap<>(relationships.size()); for (RelationshipTO relationship : relationships) { - result.put(Pair.of(relationship.getType(), relationship.getRightKey()), relationship); + result.put(Pair.of(relationship.getType(), relationship.getOtherEndKey()), relationship); } return Collections.unmodifiableMap(result); @@ -64,7 +64,7 @@ public final class EntityTOUtils { public static Map<String, MembershipTO> buildMembershipMap(final Collection<MembershipTO> memberships) { Map<String, MembershipTO> result = new HashMap<>(memberships.size()); for (MembershipTO membership : memberships) { - result.put(membership.getRightKey(), membership); + result.put(membership.getGroupKey(), membership); } return Collections.unmodifiableMap(result); http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java index af8b0ea..9581cd9 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java @@ -53,12 +53,12 @@ public class AnyObjectTO extends AnyTO implements GroupableRelatableTO { @JsonIgnore @Override - public RelationshipTO getRelationship(final String type, final String rightKey) { + public RelationshipTO getRelationship(final String type, final String otherKey) { return IterableUtils.find(relationships, new Predicate<RelationshipTO>() { @Override public boolean evaluate(final RelationshipTO object) { - return type.equals(object.getType()) && rightKey.equals(object.getRightKey()); + return type.equals(object.getType()) && otherKey.equals(object.getOtherEndKey()); } }); } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java index f2b8dbc..ee0ed63 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupableRelatableTO.java @@ -28,7 +28,7 @@ public interface GroupableRelatableTO { List<MembershipTO> getDynMemberships(); - RelationshipTO getRelationship(String type, String rightKey); + RelationshipTO getRelationship(String type, String otherKey); List<RelationshipTO> getRelationships(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java index 5737c7f..1003a50 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java @@ -28,11 +28,11 @@ import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import org.apache.commons.collections4.IterableUtils; import org.apache.commons.collections4.Predicate; -import org.apache.syncope.common.lib.types.AnyTypeKind; +import org.apache.syncope.common.lib.AbstractBaseBean; @XmlRootElement(name = "membership") @XmlType -public class MembershipTO extends RelationshipTO implements AttributableTO { +public class MembershipTO extends AbstractBaseBean implements AttributableTO { private static final long serialVersionUID = 5992828670273935861L; @@ -41,12 +41,12 @@ public class MembershipTO extends RelationshipTO implements AttributableTO { private final MembershipTO instance = new MembershipTO(); public Builder group(final String groupKey) { - instance.setRightKey(groupKey); + instance.setGroupKey(groupKey); return this; } public Builder group(final String groupKey, final String groupName) { - instance.setRightKey(groupKey); + instance.setGroupKey(groupKey); instance.setGroupName(groupName); return this; } @@ -56,6 +56,8 @@ public class MembershipTO extends RelationshipTO implements AttributableTO { } } + private String groupKey; + private String groupName; private final Set<AttrTO> plainAttrs = new HashSet<>(); @@ -64,33 +66,12 @@ public class MembershipTO extends RelationshipTO implements AttributableTO { private final Set<AttrTO> virAttrs = new HashSet<>(); - @Override - public String getType() { - return "Membership"; - } - - @Override - public void setType(final String relationshipType) { - // ignore - } - - @Override - public String getRightType() { - return AnyTypeKind.GROUP.name(); - } - - @Override - public void setRightType(final String rightType) { - // ignore - } - - @JsonIgnore public String getGroupKey() { - return getRightKey(); + return groupKey; } public void setGroupKey(final String groupKey) { - setRightKey(groupKey); + this.groupKey = groupKey; } public String getGroupName() { http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java index fc5de4f..015e18c 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java @@ -2,7 +2,7 @@ * 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 + * regarding copyother 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 @@ -37,9 +37,9 @@ public class RelationshipTO extends AbstractBaseBean { return this; } - public Builder right(final String rightType, final String rightKey) { - instance.setRightType(rightType); - instance.setRightKey(rightKey); + public Builder otherEnd(final String otherEndType, final String otherEndKey) { + instance.setOtherEndType(otherEndType); + instance.setOtherEndKey(otherEndKey); return this; } @@ -50,9 +50,9 @@ public class RelationshipTO extends AbstractBaseBean { private String type; - private String rightType; + private String otherEndType; - private String rightKey; + private String otherEndKey; public String getType() { return type; @@ -62,20 +62,20 @@ public class RelationshipTO extends AbstractBaseBean { this.type = type; } - public String getRightType() { - return rightType; + public String getOtherEndType() { + return otherEndType; } - public void setRightType(final String rightType) { - this.rightType = rightType; + public void setOtherEndType(final String otherEndType) { + this.otherEndType = otherEndType; } - public String getRightKey() { - return rightKey; + public String getOtherEndKey() { + return otherEndKey; } - public void setRightKey(final String rightKey) { - this.rightKey = rightKey; + public void setOtherEndKey(final String otherEndKey) { + this.otherEndKey = otherEndKey; } } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java index 8acca6f..061f06e 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java @@ -196,12 +196,12 @@ public class UserTO extends AnyTO implements GroupableRelatableTO { @JsonIgnore @Override - public RelationshipTO getRelationship(final String type, final String rightKey) { + public RelationshipTO getRelationship(final String type, final String otherKey) { return IterableUtils.find(relationships, new Predicate<RelationshipTO>() { @Override - public boolean evaluate(final RelationshipTO object) { - return type.equals(object.getType()) && rightKey.equals(object.getRightKey()); + public boolean evaluate(final RelationshipTO relationship) { + return type.equals(relationship.getType()) && otherKey.equals(relationship.getOtherEndKey()); } }); } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java index 518575b..f001204 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java @@ -23,8 +23,9 @@ import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang3.tuple.Pair; +import org.apache.syncope.core.persistence.api.entity.Any; import org.apache.syncope.core.persistence.api.entity.AnyType; -import org.apache.syncope.core.persistence.api.entity.anyobject.ARelationship; +import org.apache.syncope.core.persistence.api.entity.Relationship; import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject; import org.apache.syncope.core.persistence.api.entity.group.Group; import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; @@ -45,7 +46,7 @@ public interface AnyObjectDAO extends AnyDAO<AnyObject> { List<Group> findDynGroups(String key); - List<ARelationship> findAllRelationships(AnyObject anyObject); + List<Relationship<Any<?>, Any<?>>> findAllRelationships(AnyObject anyObject); Collection<Group> findAllGroups(AnyObject anyObject); http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java index 1c2aaf4..cab4a22 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java @@ -45,9 +45,11 @@ import org.apache.syncope.core.provisioning.api.utils.EntityUtils; import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO; import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.UserDAO; +import org.apache.syncope.core.persistence.api.entity.Any; import org.apache.syncope.core.persistence.api.entity.AnyType; import org.apache.syncope.core.persistence.api.entity.AnyUtils; import org.apache.syncope.core.persistence.api.entity.Realm; +import org.apache.syncope.core.persistence.api.entity.Relationship; import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership; import org.apache.syncope.core.persistence.api.entity.anyobject.ARelationship; import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject; @@ -177,13 +179,26 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj } @Override - public List<ARelationship> findAllRelationships(final AnyObject anyObject) { - TypedQuery<ARelationship> query = entityManager().createQuery( - "SELECT e FROM " + JPAARelationship.class.getSimpleName() - + " e WHERE e.rightEnd=:anyObject OR e.leftEnd=:anyObject", ARelationship.class); - query.setParameter("anyObject", anyObject); + public List<Relationship<Any<?>, Any<?>>> findAllRelationships(final AnyObject anyObject) { + List<Relationship<Any<?>, Any<?>>> result = new ArrayList<>(); - return query.getResultList(); + @SuppressWarnings("unchecked") + TypedQuery<Relationship<Any<?>, Any<?>>> aquery = + (TypedQuery<Relationship<Any<?>, Any<?>>>) entityManager().createQuery( + "SELECT e FROM " + JPAARelationship.class.getSimpleName() + + " e WHERE e.rightEnd=:anyObject OR e.leftEnd=:anyObject"); + aquery.setParameter("anyObject", anyObject); + result.addAll(aquery.getResultList()); + + @SuppressWarnings("unchecked") + TypedQuery<Relationship<Any<?>, Any<?>>> uquery = + (TypedQuery<Relationship<Any<?>, Any<?>>>) entityManager().createQuery( + "SELECT e FROM " + JPAURelationship.class.getSimpleName() + + " e WHERE e.rightEnd=:anyObject"); + uquery.setParameter("anyObject", anyObject); + result.addAll(uquery.getResultList()); + + return result; } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGroupableRelatable.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGroupableRelatable.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGroupableRelatable.java index a2a41fa..1612db4 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGroupableRelatable.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGroupableRelatable.java @@ -122,19 +122,6 @@ public abstract class AbstractGroupableRelatable< } @Override - public REL getRelationship(final RelationshipType relationshipType, final String otherEndKey) { - return IterableUtils.find(getRelationships(), new Predicate<REL>() { - - @Override - public boolean evaluate(final REL relationship) { - return otherEndKey != null && otherEndKey.equals(relationship.getRightEnd().getKey()) - && ((relationshipType == null && relationship.getType() == null) - || (relationshipType != null && relationshipType.equals(relationship.getType()))); - } - }); - } - - @Override public Collection<? extends REL> getRelationships(final RelationshipType relationshipType) { return CollectionUtils.select(getRelationships(), new Predicate<REL>() { http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java index 32bd4c0..16f94e5 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java @@ -33,8 +33,11 @@ import javax.persistence.OneToMany; import javax.persistence.Table; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import org.apache.commons.collections4.IterableUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.core.persistence.api.entity.AnyType; import org.apache.syncope.core.persistence.api.entity.AnyTypeClass; +import org.apache.syncope.core.persistence.api.entity.RelationshipType; import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership; import org.apache.syncope.core.persistence.api.entity.anyobject.APlainAttr; import org.apache.syncope.core.persistence.api.entity.anyobject.ARelationship; @@ -152,6 +155,20 @@ public class JPAAnyObject } @Override + public ARelationship getRelationship(final RelationshipType relationshipType, final String otherEndKey) { + return IterableUtils.find(getRelationships(), new Predicate<ARelationship>() { + + @Override + public boolean evaluate(final ARelationship relationship) { + return relationshipType.equals(relationship.getType()) + && otherEndKey != null + && (otherEndKey.equals(relationship.getLeftEnd().getKey()) + || otherEndKey.equals(relationship.getRightEnd().getKey())); + } + }); + } + + @Override public List<? extends ARelationship> getRelationships() { return relationships; } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java index 0dddb77..15407d9 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java @@ -46,6 +46,8 @@ import javax.validation.Valid; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; +import org.apache.commons.collections4.IterableUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.types.CipherAlgorithm; import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion; import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr; @@ -58,6 +60,7 @@ import org.apache.syncope.core.spring.ApplicationContextProvider; import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; import org.apache.syncope.core.persistence.api.entity.AnyType; import org.apache.syncope.core.persistence.api.entity.AnyTypeClass; +import org.apache.syncope.core.persistence.api.entity.RelationshipType; import org.apache.syncope.core.persistence.api.entity.Role; import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject; import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; @@ -511,6 +514,18 @@ public class JPAUser } @Override + public URelationship getRelationship(final RelationshipType relationshipType, final String otherEndKey) { + return IterableUtils.find(getRelationships(), new Predicate<URelationship>() { + + @Override + public boolean evaluate(final URelationship relationship) { + return relationshipType.equals(relationship.getType()) + && otherEndKey != null && otherEndKey.equals(relationship.getRightEnd().getKey()); + } + }); + } + + @Override public List<? extends URelationship> getRelationships() { return relationships; } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/persistence-jpa/src/test/resources/domains/MasterContent.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml index 59bef19..3463de3 100644 --- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml +++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml @@ -1167,7 +1167,7 @@ under the License. pullMode="INCREMENTAL" unmatchingRule="ASSIGN" matchingRule="UPDATE" active="1"/> <AnyTemplatePullTask id="3a6173a9-8c34-4e37-b3b1-0c2ea385fac0" pullTask_id="c41b9b71-9bfa-4f90-89f2-84787def4c5c" anyType_id="USER" - template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["csv"],"derAttrs":[{"schema":"cn","values":[""]}],"virAttrs":[],"resources":["resource-testdb"],"relationships":[],"memberships":[{"rightType":"GROUP","rightKey":"f779c0d4-633b-4be5-8f57-32eb478a3ca5","groupName":null}],"dynMemberships":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","values":["email == 'te...@syncope.apache.org'? 'TYPE_8': 'TYPE_OTHER'"]}]}'/> + template='{"@class":"org.apache.syncope.common.lib.to.UserTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"USER","realm":null,"status":null,"password":null,"token":null,"tokenExpireTime":null,"username":null,"lastLoginDate":null,"changePwdDate":null,"failedLogins":null,"securityQuestion":null,"securityAnswer":null,"auxClasses":["csv"],"derAttrs":[{"schema":"cn","values":[""]}],"virAttrs":[],"resources":["resource-testdb"],"relationships":[],"memberships":[{"groupKey":"f779c0d4-633b-4be5-8f57-32eb478a3ca5","groupName":null}],"dynMemberships":[],"roles":[],"dynRoles":[],"plainAttrs":[{"schema":"ctype","values":["email == 'te...@syncope.apache.org'? 'TYPE_8': 'TYPE_OTHER'"]}]}'/> <AnyTemplatePullTask id="b3772d66-ec06-4133-bf38-b3273845ac5b" pullTask_id="c41b9b71-9bfa-4f90-89f2-84787def4c5c" anyType_id="GROUP" template='{"@class":"org.apache.syncope.common.lib.to.GroupTO","creator":null,"creationDate":null,"lastModifier":null,"lastChangeDate":null,"key":null,"type":"GROUP","realm":null,"status":null,"name":null,"userOwner":null,"groupOwner":null,"udynMembershipCond":null,"auxClasses":[],"derAttrs":[],"virAttrs":[],"resources":[],"plainAttrs":[]}'/> http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java index 5b8d693..8e2b83c 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java @@ -65,9 +65,7 @@ import org.apache.syncope.core.persistence.api.entity.PlainAttr; import org.apache.syncope.core.persistence.api.entity.PlainAttrValue; import org.apache.syncope.core.persistence.api.entity.PlainSchema; import org.apache.syncope.core.persistence.api.entity.Realm; -import org.apache.syncope.core.persistence.api.entity.Relationship; import org.apache.syncope.core.persistence.api.entity.VirSchema; -import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject; import org.apache.syncope.core.persistence.api.entity.group.Group; import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; import org.apache.syncope.core.persistence.api.entity.resource.Item; @@ -588,10 +586,9 @@ abstract class AbstractAnyDataBinder { } } - protected RelationshipTO getRelationshipTO(final Relationship<? extends Any<?>, AnyObject> relationship) { + protected RelationshipTO getRelationshipTO(final String relationshipType, final Any<?> otherEnd) { return new RelationshipTO.Builder(). - type(relationship.getType().getKey()). - right(relationship.getRightEnd().getType().getKey(), relationship.getRightEnd().getKey()). + type(relationshipType).otherEnd(otherEnd.getType().getKey(), otherEnd.getKey()). build(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java index 0173d5b..f5cca66 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java @@ -47,10 +47,12 @@ import org.apache.syncope.core.provisioning.api.PropagationByResource; import org.apache.syncope.common.lib.types.ResourceOperation; import org.apache.syncope.core.spring.BeanUtils; import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO; +import org.apache.syncope.core.persistence.api.entity.Any; import org.apache.syncope.core.persistence.api.entity.AnyType; import org.apache.syncope.core.persistence.api.entity.AnyUtils; import org.apache.syncope.core.persistence.api.entity.PlainSchema; import org.apache.syncope.core.persistence.api.entity.Realm; +import org.apache.syncope.core.persistence.api.entity.Relationship; import org.apache.syncope.core.persistence.api.entity.RelationshipType; import org.apache.syncope.core.persistence.api.entity.VirSchema; import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership; @@ -105,13 +107,17 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An anyObjectTO.getDynRealms().addAll(userDAO.findDynRealms(anyObject.getKey())); // relationships - CollectionUtils.collect(anyObject.getRelationships(), new Transformer<ARelationship, RelationshipTO>() { + CollectionUtils.collect(anyObjectDAO.findAllRelationships(anyObject), + new Transformer<Relationship<Any<?>, Any<?>>, RelationshipTO>() { @Override - public RelationshipTO transform(final ARelationship relationship) { - return AnyObjectDataBinderImpl.this.getRelationshipTO(relationship); + public RelationshipTO transform(final Relationship<Any<?>, Any<?>> relationship) { + return getRelationshipTO( + relationship.getType().getKey(), + relationship.getLeftEnd().getKey().equals(anyObject.getKey()) + ? relationship.getRightEnd() + : relationship.getLeftEnd()); } - }, anyObjectTO.getRelationships()); // memberships @@ -180,19 +186,19 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An if (anyObject.getRealm() != null) { // relationships for (RelationshipTO relationshipTO : anyObjectTO.getRelationships()) { - if (StringUtils.isBlank(relationshipTO.getRightType()) - || AnyTypeKind.USER.name().equals(relationshipTO.getRightType()) - || AnyTypeKind.GROUP.name().equals(relationshipTO.getRightType())) { + if (StringUtils.isBlank(relationshipTO.getOtherEndType()) + || AnyTypeKind.USER.name().equals(relationshipTO.getOtherEndType()) + || AnyTypeKind.GROUP.name().equals(relationshipTO.getOtherEndType())) { SyncopeClientException invalidAnyType = SyncopeClientException.build(ClientExceptionType.InvalidAnyType); invalidAnyType.getElements().add(AnyType.class.getSimpleName() - + " not allowed for relationship: " + relationshipTO.getRightType()); + + " not allowed for relationship: " + relationshipTO.getOtherEndType()); scce.addException(invalidAnyType); } else { - AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getRightKey()); + AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getOtherEndKey()); if (otherEnd == null) { - LOG.debug("Ignoring invalid anyObject " + relationshipTO.getRightKey()); + LOG.debug("Ignoring invalid anyObject " + relationshipTO.getOtherEndKey()); } else if (anyObject.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) { RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTO.getType()); if (relationshipType == null) { @@ -218,12 +224,12 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An // memberships for (MembershipTO membershipTO : anyObjectTO.getMemberships()) { - Group group = membershipTO.getRightKey() == null + Group group = membershipTO.getGroupKey() == null ? groupDAO.findByName(membershipTO.getGroupName()) - : groupDAO.find(membershipTO.getRightKey()); + : groupDAO.find(membershipTO.getGroupKey()); if (group == null) { LOG.debug("Ignoring invalid group " - + membershipTO.getRightKey() + " / " + membershipTO.getGroupName()); + + membershipTO.getGroupKey() + " / " + membershipTO.getGroupName()); } else if (anyObject.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) { AMembership membership = entityFactory.newEntity(AMembership.class); membership.setRightEnd(group); @@ -290,26 +296,27 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An LOG.debug("Ignoring invalid relationship type {}", patch.getRelationshipTO().getType()); } else { ARelationship relationship = - anyObject.getRelationship(relationshipType, patch.getRelationshipTO().getRightKey()); + anyObject.getRelationship(relationshipType, patch.getRelationshipTO().getOtherEndKey()); if (relationship != null) { anyObject.getRelationships().remove(relationship); relationship.setLeftEnd(null); + relationship.setRightEnd(null); } if (patch.getOperation() == PatchOperation.ADD_REPLACE) { - if (StringUtils.isBlank(patch.getRelationshipTO().getRightType()) - || AnyTypeKind.USER.name().equals(patch.getRelationshipTO().getRightType()) - || AnyTypeKind.GROUP.name().equals(patch.getRelationshipTO().getRightType())) { + if (StringUtils.isBlank(patch.getRelationshipTO().getOtherEndType()) + || AnyTypeKind.USER.name().equals(patch.getRelationshipTO().getOtherEndType()) + || AnyTypeKind.GROUP.name().equals(patch.getRelationshipTO().getOtherEndType())) { SyncopeClientException invalidAnyType = SyncopeClientException.build(ClientExceptionType.InvalidAnyType); invalidAnyType.getElements().add(AnyType.class.getSimpleName() - + " not allowed for relationship: " + patch.getRelationshipTO().getRightType()); + + " not allowed for relationship: " + patch.getRelationshipTO().getOtherEndType()); scce.addException(invalidAnyType); } else { - AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getRightKey()); + AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getOtherEndKey()); if (otherEnd == null) { - LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getRightKey()); + LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getOtherEndKey()); } else if (anyObject.getRealm().getFullPath(). startsWith(otherEnd.getRealm().getFullPath())) { http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java index 0f47f70..4b3c517 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java @@ -214,9 +214,9 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat if (user.getRealm() != null) { // relationships for (RelationshipTO relationshipTO : userTO.getRelationships()) { - AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getRightKey()); + AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getOtherEndKey()); if (otherEnd == null) { - LOG.debug("Ignoring invalid anyObject " + relationshipTO.getRightKey()); + LOG.debug("Ignoring invalid anyObject " + relationshipTO.getOtherEndKey()); } else if (user.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) { RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTO.getType()); if (relationshipType == null) { @@ -241,12 +241,12 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat // memberships for (MembershipTO membershipTO : userTO.getMemberships()) { - Group group = membershipTO.getRightKey() == null + Group group = membershipTO.getGroupKey() == null ? groupDAO.findByName(membershipTO.getGroupName()) - : groupDAO.find(membershipTO.getRightKey()); + : groupDAO.find(membershipTO.getGroupKey()); if (group == null) { LOG.debug("Ignoring invalid group " - + membershipTO.getRightKey() + " / " + membershipTO.getGroupName()); + + membershipTO.getGroupKey() + " / " + membershipTO.getGroupName()); } else if (user.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) { UMembership membership = entityFactory.newEntity(UMembership.class); membership.setRightEnd(group); @@ -388,16 +388,16 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat LOG.debug("Ignoring invalid relationship type {}", patch.getRelationshipTO().getType()); } else { URelationship relationship = - user.getRelationship(relationshipType, patch.getRelationshipTO().getRightKey()); + user.getRelationship(relationshipType, patch.getRelationshipTO().getOtherEndKey()); if (relationship != null) { user.getRelationships().remove(relationship); relationship.setLeftEnd(null); } if (patch.getOperation() == PatchOperation.ADD_REPLACE) { - AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getRightKey()); + AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getOtherEndKey()); if (otherEnd == null) { - LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getRightKey()); + LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getOtherEndKey()); } else if (user.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) { relationship = entityFactory.newEntity(URelationship.class); relationship.setType(relationshipType); @@ -623,9 +623,8 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat @Override public RelationshipTO transform(final URelationship relationship) { - return UserDataBinderImpl.this.getRelationshipTO(relationship); + return getRelationshipTO(relationship.getType().getKey(), relationship.getRightEnd()); } - }, userTO.getRelationships()); // memberships http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java index 2e4314d..5ab0e78 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java @@ -260,11 +260,11 @@ public class UserReportlet extends AbstractReportlet { atts.clear(); atts.addAttribute("", "", "anyObjectKey", - ReportXMLConst.XSD_STRING, rel.getRightKey()); + ReportXMLConst.XSD_STRING, rel.getOtherEndKey()); handler.startElement("", "", "relationship", atts); if (conf.getFeatures().contains(Feature.resources)) { - for (URelationship actualRel : user.getRelationships(rel.getRightKey())) { + for (URelationship actualRel : user.getRelationships(rel.getOtherEndKey())) { doExtractResources( handler, anyObjectDataBinder.getAnyObjectTO(actualRel.getRightEnd(), true)); } @@ -282,15 +282,15 @@ public class UserReportlet extends AbstractReportlet { atts.clear(); atts.addAttribute("", "", "groupKey", - ReportXMLConst.XSD_STRING, memb.getRightKey()); + ReportXMLConst.XSD_STRING, memb.getGroupKey()); atts.addAttribute("", "", "groupName", ReportXMLConst.XSD_STRING, memb.getGroupName()); handler.startElement("", "", "membership", atts); if (conf.getFeatures().contains(Feature.resources)) { - UMembership actualMemb = user.getMembership(memb.getRightKey()); + UMembership actualMemb = user.getMembership(memb.getGroupKey()); if (actualMemb == null) { LOG.warn("Unexpected: cannot find membership for group {} for user {}", - memb.getRightKey(), user); + memb.getGroupKey(), user); } else { doExtractResources(handler, groupDataBinder.getGroupTO(actualMemb.getRightEnd(), true)); } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java index ef47ef1..2b342af 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java @@ -109,7 +109,7 @@ public class TemplateUtils { private void fillRelationships(final GroupableRelatableTO any, final GroupableRelatableTO template) { for (RelationshipTO relationship : template.getRelationships()) { - if (any.getRelationship(relationship.getRightKey(), relationship.getRightKey()) == null) { + if (any.getRelationship(relationship.getType(), relationship.getOtherEndKey()) == null) { any.getRelationships().add(relationship); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java ---------------------------------------------------------------------- diff --git a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java index 9bcea18..09c7638 100644 --- a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java +++ b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java @@ -31,9 +31,9 @@ import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.apache.syncope.core.persistence.api.entity.Any; import org.apache.syncope.core.persistence.api.entity.PlainAttr; import org.apache.syncope.core.persistence.api.entity.PlainAttrValue; +import org.apache.syncope.core.persistence.api.entity.Relationship; import org.apache.syncope.core.persistence.api.entity.Role; import org.apache.syncope.core.persistence.api.entity.anyobject.AMembership; -import org.apache.syncope.core.persistence.api.entity.anyobject.ARelationship; import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject; import org.apache.syncope.core.persistence.api.entity.group.Group; import org.apache.syncope.core.persistence.api.entity.user.UMembership; @@ -120,7 +120,7 @@ public class ElasticsearchUtils { List<Object> relationships = new ArrayList<>(); List<Object> relationshipTypes = new ArrayList<>(); - for (ARelationship relationship : anyObjectDAO.findAllRelationships(anyObject)) { + for (Relationship<Any<?>, Any<?>> relationship : anyObjectDAO.findAllRelationships(anyObject)) { relationships.add(relationship.getRightEnd().getKey()); relationshipTypes.add(relationship.getType().getKey()); } http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java index 0a46f15..9736940 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AnyObjectITCase.java @@ -203,7 +203,7 @@ public class AnyObjectITCase extends AbstractITCase { @Test public void issueSYNCOPE756() { AnyObjectTO anyObjectTO = getSampleTO("issueSYNCOPE756"); - anyObjectTO.getRelationships().add(new RelationshipTO.Builder().right( + anyObjectTO.getRelationships().add(new RelationshipTO.Builder().otherEnd( AnyTypeKind.USER.name(), "1417acbe-cbf6-4277-9372-e75e04f97000").build()); try { http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java index 40bebc4..6436f54 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java @@ -245,7 +245,7 @@ public class PullTaskITCase extends AbstractTaskITCase { assertTrue(userTO.getResources().contains(RESOURCE_NAME_TESTDB)); assertTrue(userTO.getResources().contains(RESOURCE_NAME_WS2)); assertEquals(1, userTO.getMemberships().size()); - assertEquals("f779c0d4-633b-4be5-8f57-32eb478a3ca5", userTO.getMemberships().get(0).getRightKey()); + assertEquals("f779c0d4-633b-4be5-8f57-32eb478a3ca5", userTO.getMemberships().get(0).getGroupKey()); // Unmatching --> Assign (link) - SYNCOPE-658 assertTrue(userTO.getResources().contains(RESOURCE_NAME_CSV)); http://git-wip-us.apache.org/repos/asf/syncope/blob/6c9018ff/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java index 8de8265..f6cb707 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java @@ -79,7 +79,7 @@ public class UserWorkflowITCase extends AbstractITCase { userTO = createUser(userTO).getEntity(); assertNotNull(userTO); assertEquals(1, userTO.getMemberships().size()); - assertEquals("0cbcabd2-4410-4b6b-8f05-a052b451d18f", userTO.getMemberships().get(0).getRightKey()); + assertEquals("0cbcabd2-4410-4b6b-8f05-a052b451d18f", userTO.getMemberships().get(0).getGroupKey()); assertEquals("createApproval", userTO.getStatus()); // 2. request if there is any pending task for user just created @@ -159,7 +159,7 @@ public class UserWorkflowITCase extends AbstractITCase { assertNotNull(result); userTO = result.getEntity(); assertEquals(1, userTO.getMemberships().size()); - assertEquals("0cbcabd2-4410-4b6b-8f05-a052b451d18f", userTO.getMemberships().get(0).getRightKey()); + assertEquals("0cbcabd2-4410-4b6b-8f05-a052b451d18f", userTO.getMemberships().get(0).getGroupKey()); assertEquals("createApproval", userTO.getStatus()); assertEquals(Collections.singleton(RESOURCE_NAME_TESTDB), userTO.getResources());