diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMExternalResourceProvider.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMExternalResourceProvider.java index bb92a285545..236dbeee1f6 100644 --- a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMExternalResourceProvider.java +++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMExternalResourceProvider.java @@ -22,6 +22,7 @@ import java.util.stream.Collectors; import org.apache.syncope.client.console.rest.ResourceRestClient; import org.apache.syncope.common.lib.to.ResourceTO; +import org.apache.syncope.common.lib.types.AnyTypeKind; public class IdMExternalResourceProvider implements ExternalResourceProvider { @@ -34,7 +35,20 @@ public IdMExternalResourceProvider(final ResourceRestClient resourceRestClient) } @Override - public List get() { - return resourceRestClient.list().stream().map(ResourceTO::getKey).collect(Collectors.toList()); + public List get(final String anyType) { + return resourceRestClient.list().stream(). + filter(r -> anyType == null + || AnyTypeKind.GROUP.name().equals(anyType) + || r.getProvision(anyType).isPresent()). + map(ResourceTO::getKey). + collect(Collectors.toList()); + } + + @Override + public List getForRealms() { + return resourceRestClient.list().stream(). + filter(r -> r.getOrgUnit() != null). + map(ResourceTO::getKey). + collect(Collectors.toList()); } } diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java index ac1d1e131cd..db2aeec6351 100644 --- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java +++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java @@ -47,10 +47,10 @@ public Resources(final AnyWrapper modelObject) { public boolean evaluate() { if (SyncopeWebApplication.get().getSecuritySettings(). getAuthorizationStrategy().isActionAuthorized(this, RENDER)) { - available.setObject(SyncopeWebApplication.get().getResourceProvider().get()); + + available.setObject(SyncopeWebApplication.get().getResourceProvider().get(anyTO.getType())); return !available.getObject().isEmpty(); - } else { - return false; } + return false; } } diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/layout/AbstractAnyFormLayout.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/layout/AbstractAnyFormLayout.java index 87462253ae1..3e2ba898205 100644 --- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/layout/AbstractAnyFormLayout.java +++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/layout/AbstractAnyFormLayout.java @@ -45,5 +45,4 @@ public List getWhichDerAttrs() { public List getWhichVirAttrs() { return whichVirAttrs; } - } diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractResources.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractResources.java index 47c265f335d..0d141dd2ee9 100644 --- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractResources.java +++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractResources.java @@ -34,10 +34,12 @@ public abstract class AbstractResources extends WizardStep implements ICondition private static final long serialVersionUID = 552437609667518888L; + protected final AnyTO anyTO; + protected final ListModel available; public AbstractResources(final AnyWrapper modelObject) { - final T entityTO = modelObject.getInnerObject(); + anyTO = modelObject.getInnerObject(); if (modelObject instanceof UserWrapper && UserWrapper.class.cast(modelObject).getPreviousUserTO() != null @@ -52,21 +54,20 @@ public AbstractResources(final AnyWrapper modelObject) { this.setOutputMarkupId(true); this.available = new ListModel<>(List.of()); - add(new AjaxPalettePanel.Builder().build("resources", - new PropertyModel<>(entityTO, "resources") { + add(new AjaxPalettePanel.Builder().build("resources", new PropertyModel<>(anyTO, "resources") { - private static final long serialVersionUID = 3799387950428254072L; + private static final long serialVersionUID = 3799387950428254072L; - @Override - public List getObject() { - return new ArrayList<>(entityTO.getResources()); - } + @Override + public List getObject() { + return new ArrayList<>(anyTO.getResources()); + } - @Override - public void setObject(final List object) { - entityTO.getResources().clear(); - entityTO.getResources().addAll(object); - } - }, available).hideLabel().setOutputMarkupId(true)); + @Override + public void setObject(final List object) { + anyTO.getResources().clear(); + anyTO.getResources().addAll(object); + } + }, available).hideLabel().setOutputMarkupId(true)); } } diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/ExternalResourceProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/ExternalResourceProvider.java index fc419cff9f6..0b860692399 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/ExternalResourceProvider.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/ExternalResourceProvider.java @@ -21,8 +21,9 @@ import java.io.Serializable; import java.util.List; -@FunctionalInterface public interface ExternalResourceProvider extends Serializable { - List get(); + List get(String anyType); + + List getForRealms(); } diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoExternalResourceProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoExternalResourceProvider.java index e21f6225bc9..5c0a5e776ad 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoExternalResourceProvider.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoExternalResourceProvider.java @@ -25,7 +25,12 @@ public class IdRepoExternalResourceProvider implements ExternalResourceProvider private static final long serialVersionUID = 3002474783308961295L; @Override - public List get() { + public List get(final String anyType) { + return List.of(); + } + + @Override + public List getForRealms() { return List.of(); } } diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java index 2012e631948..e1fe0fbd78e 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/AnyObjectFormLayoutInfo.java @@ -40,5 +40,4 @@ public boolean isRelationships() { public void setRelationships(final boolean relationships) { this.relationships = relationships; } - } diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java index 722b6b4bcb0..739f65ed199 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/GroupFormLayoutInfo.java @@ -60,5 +60,4 @@ public boolean isTypeExtensions() { public void setTypeExtensions(final boolean typeExtensions) { this.typeExtensions = typeExtensions; } - } diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccountPolicy.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccountPolicy.java index 60aae41a807..db1d36c9aae 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccountPolicy.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccountPolicy.java @@ -31,5 +31,4 @@ public class AccountPolicy extends Panel { public AccountPolicy(final String id) { super(id); } - } diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java index c02ef37cf78..eabb6829f2a 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java @@ -67,7 +67,7 @@ protected List load() { @Override protected List load() { - return SyncopeWebApplication.get().getResourceProvider().get(); + return SyncopeWebApplication.get().getResourceProvider().getForRealms(); } }; diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipViewPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipViewPanel.java index d979d2f96de..b19aabdcb7e 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipViewPanel.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipViewPanel.java @@ -56,8 +56,15 @@ private RelationshipViewPanel( final AnyTO anyTO, final boolean reuseItem, final boolean wizardInModal) { + super(id, wizardInModal); - addInnerObject(getHeader()); + + WebMarkupContainer header = new WebMarkupContainer("header"); + header.add(new Label("header_left_end", getString("left.end"))); + header.add(new Label("header_relationship", new ResourceModel("relationship"))); + header.add(new Label("header_right_end", new ResourceModel("right.end"))); + addInnerObject(header); + relationshipsList = new ListView<>("relationships", relationships) { private static final long serialVersionUID = 4983556433071042668L; @@ -101,9 +108,8 @@ protected void onEvent(final AjaxRequestTarget target) { if (togglePanel == null) { relationshipItem.add(action); } else { - relationshipItem.add(new ActionsPanel<>("action", new Model<>(relationshipTO)) - .setVisible(false) - .setEnabled(false)); + relationshipItem.add(new ActionsPanel<>("action", new Model<>(relationshipTO)). + setVisible(false).setEnabled(false)); } } }; @@ -112,21 +118,13 @@ protected void onEvent(final AjaxRequestTarget target) { relationshipsList.setRenderBodyOnly(true); addInnerObject(relationshipsList); - - } - - private WebMarkupContainer getHeader() { - WebMarkupContainer headerContainer = new WebMarkupContainer("header"); - headerContainer.add(new Label("header_left_end", getString("left.end"))); - headerContainer.add(new Label("header_relationship", new ResourceModel("relationship"))); - headerContainer.add(new Label("header_right_end", new ResourceModel("right.end"))); - return headerContainer; } - private void buildRowLabels( + private static void buildRowLabels( final ListItem row, final RelationshipTO relationshipTO, final AnyTO anyTO) { + boolean isLeftRelation = relationshipTO.getEnd() == RelationshipTO.End.LEFT; String anyName = anyTO instanceof UserTO ? UserTO.class.cast(anyTO).getUsername() @@ -149,7 +147,7 @@ private void buildRowLabels( row.add(leftEnd, rightEnd); } - private void setBold(final Label... labels) { + private static void setBold(final Label... labels) { for (Label label : labels) { label.add(new AttributeModifier("style", "font-weight: bold;")); } @@ -176,7 +174,6 @@ public RelationshipViewPanel.Builder setAnyTO(final AnyTO anyTO) { return this; } - public RelationshipViewPanel.Builder setRelationships(final List relationships) { this.relationships = relationships; return this; @@ -204,8 +201,5 @@ public RelationshipViewPanel.Builder setReuseItem(final boolean reuseItem) { protected WizardMgtPanel newInstance(final String id, final boolean wizardInModal) { return new RelationshipViewPanel(id, relationships, anyTO, reuseItem, wizardInModal); } - } - } - diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java index ace22a7ae0e..20c8afcebe5 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java @@ -89,7 +89,7 @@ public abstract class AbstractSearchPanel extends Panel { protected final AnyTypeKind typeKind; - protected final String type; + protected final String anyType; public abstract static class Builder implements Serializable { @@ -152,7 +152,7 @@ protected AbstractSearchPanel( this.model = builder.model; this.typeKind = kind; - this.type = type; + this.anyType = type; setOutputMarkupId(true); @@ -235,8 +235,8 @@ public void onClick(final AjaxRequestTarget target, final Serializable ignore) { protected abstract String getFIQLQueryTarget(); protected void updateFIQL(final AjaxRequestTarget target, final String fiql) { - model.setObject(SearchUtils.getSearchClauses( - fiql.replaceAll(SearchUtils.getTypeConditionPattern(type).pattern(), ""))); + model.setObject(SearchUtils.getSearchClauses(fiql.replaceAll(SearchUtils.getTypeConditionPattern(anyType). + pattern(), ""))); target.add(searchFormContainer); } @@ -276,17 +276,17 @@ protected List load() { @Override protected List load() { - return SyncopeWebApplication.get().getResourceProvider().get(); + return SyncopeWebApplication.get().getResourceProvider().get(anyType); } }; } public IModel> getModel() { - return this.model; + return model; } - public String getBackObjectType() { - return this.type; + public String getAnyType() { + return anyType; } public Map getAvailableSchemaTypes() { diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java index 908168830c4..4045b8f03aa 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java @@ -77,12 +77,12 @@ protected AnyObjectSearchPanel(final String id, final AnyTypeKind kind, final St @Override protected AbstractFiqlSearchConditionBuilder getSearchConditionBuilder() { - return SyncopeClient.getAnyObjectSearchConditionBuilder(type); + return SyncopeClient.getAnyObjectSearchConditionBuilder(anyType); } @Override protected String getFIQLQueryTarget() { - return type; + return anyType; } @Override @@ -121,8 +121,8 @@ protected List load() { @Override protected Map load() { - return schemaRestClient.getSchemas(SchemaType.PLAIN, null, anyTypeRestClient.read(type). - getClasses().toArray(String[]::new)). + return schemaRestClient.getSchemas( + SchemaType.PLAIN, null, anyTypeRestClient.read(anyType).getClasses().toArray(String[]::new)). stream().collect(Collectors.toMap(SchemaTO::getKey, Function.identity())); } }; diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java index 66251893ddc..22da0fad1a5 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/GroupSearchPanel.java @@ -110,7 +110,7 @@ protected List load() { @Override protected Map load() { return schemaRestClient.getSchemas( - SchemaType.PLAIN, null, anyTypeRestClient.read(type).getClasses().toArray(String[]::new)). + SchemaType.PLAIN, null, anyTypeRestClient.read(anyType).getClasses().toArray(String[]::new)). stream().collect(Collectors.toMap(SchemaTO::getKey, Function.identity())); } }; diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java index 164306d2ab5..112389d0b40 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java @@ -134,7 +134,7 @@ private class Profile extends AbstractModalPanel { @Override protected List load() { - return SyncopeWebApplication.get().getResourceProvider().get(); + return SyncopeWebApplication.get().getResourceProvider().get(null); } }; diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java index b02247bc982..22ce991e1d8 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java @@ -127,8 +127,7 @@ protected WizardModel buildModelSteps(final AnyWrapper modelObject, final Wiz // attributes panel steps if (formLayoutInfo.isPlainAttrs()) { - wizardModel.add( - new PlainAttrs(modelObject, mode, anyTypeClasses, formLayoutInfo.getWhichPlainAttrs()) { + wizardModel.add(new PlainAttrs(modelObject, mode, anyTypeClasses, formLayoutInfo.getWhichPlainAttrs()) { private static final long serialVersionUID = 8167894751609598306L; diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java index a04054e42f4..348569a184d 100644 --- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java +++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; @@ -32,7 +31,6 @@ import org.apache.syncope.client.console.panels.search.SearchClausePanel; import org.apache.syncope.client.console.panels.search.SearchUtils; import org.apache.syncope.client.console.rest.AnyObjectRestClient; -import org.apache.syncope.client.console.rest.AnyTypeClassRestClient; import org.apache.syncope.client.console.rest.AnyTypeRestClient; import org.apache.syncope.client.console.rest.RelationshipTypeRestClient; import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; @@ -63,10 +61,8 @@ import org.apache.wicket.extensions.wizard.WizardStep; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.panel.Fragment; 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; import org.apache.wicket.model.ResourceModel; @@ -81,13 +77,10 @@ public class Relationships extends WizardStep implements ICondition { protected RelationshipTypeRestClient relationshipTypeRestClient; @SpringBean - protected AnyTypeRestClient anyTypeRestClient; - - @SpringBean - protected AnyTypeClassRestClient anyTypeClassRestClient; + protected AnyObjectRestClient anyObjectRestClient; @SpringBean - protected AnyObjectRestClient anyObjectRestClient; + protected AnyTypeRestClient anyTypeRestClient; protected final AnyTO anyTO; @@ -163,13 +156,14 @@ protected List getCurrentRelationships() { : List.of(); } - protected void addNewRelationships(final RelationshipTO... rels) { - getCurrentRelationships().addAll(List.of(rels)); + protected void addNewRelationship(final RelationshipTO relaltionship) { + if (anyTO instanceof GroupableRelatableTO) { + GroupableRelatableTO.class.cast(anyTO).getRelationships().add(relaltionship); + } } @Override public boolean evaluate() { - // [SYNCOPE-1171] - skip current step when the are no relationships types in Syncope return !relationshipTypeRestClient.list().isEmpty(); } @@ -179,10 +173,6 @@ public class Specification extends Panel { protected final RelationshipTO rel; - protected final AjaxDropDownChoicePanel type; - - protected final AjaxDropDownChoicePanel otherType; - protected final WebMarkupContainer container; protected final Fragment emptyFragment; @@ -200,58 +190,18 @@ public Specification() { List availableRels = relationshipTypeRestClient.list().stream(). map(RelationshipTypeTO::getKey).collect(Collectors.toList()); - - type = new AjaxDropDownChoicePanel<>("type", "type", new PropertyModel<>(rel, "type")); + AjaxDropDownChoicePanel type = new AjaxDropDownChoicePanel<>( + "type", "type", new PropertyModel<>(rel, "type")); type.setChoices(availableRels); add(type.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true).setRenderBodyOnly(true)); - List availableTypes = anyTypeRestClient.listAnyTypes().stream(). - filter(anyType -> anyType.getKind() != AnyTypeKind.GROUP - && anyType.getKind() != AnyTypeKind.USER).collect(Collectors.toList()); - - otherType = new AjaxDropDownChoicePanel<>("otherType", "otherType", new PropertyModel<>(rel, "otherType") { - - private static final long serialVersionUID = -5861057041758169508L; - - @Override - public AnyTypeTO getObject() { - for (AnyTypeTO obj : availableTypes) { - if (obj.getKey().equals(rel.getOtherEndType())) { - return obj; - } - } - return null; - } - - @Override - public void setObject(final AnyTypeTO object) { - rel.setOtherEndType(Optional.ofNullable(object).map(AnyTypeTO::getKey).orElse(null)); - } - }, false); - otherType.setChoices(availableTypes); - otherType.setChoiceRenderer(new IChoiceRenderer<>() { - - private static final long serialVersionUID = -734743540442190178L; - - @Override - public Object getDisplayValue(final AnyTypeTO object) { - return object.getKey(); - } - - @Override - public String getIdValue(final AnyTypeTO object, final int index) { - return object.getKey(); - } - - @Override - public AnyTypeTO getObject(final String id, final IModel> choices) { - return choices.getObject().stream(). - filter(anyTypeTO -> id.equals(anyTypeTO.getKey())).findAny().orElse(null); - } - }); - // enable "otherType" dropdown only if "type" option is selected - SYNCOPE-1140 - otherType.setEnabled(false); - add(otherType.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true)); + List availableTypes = anyTypeRestClient.listAnyTypes().stream(). + filter(anyType -> anyType.getKind() == AnyTypeKind.ANY_OBJECT). + map(AnyTypeTO::getKey).collect(Collectors.toList()); + AjaxDropDownChoicePanel otherEndType = new AjaxDropDownChoicePanel<>( + "otherType", "otherType", new PropertyModel<>(rel, "otherEndType"), false); + otherEndType.setChoices(availableTypes); + add(otherEndType.setEnabled(false).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true)); container = new WebMarkupContainer("searchPanelContainer"); add(container.setOutputMarkupId(true)); @@ -268,21 +218,21 @@ public AnyTypeTO getObject(final String id, final IModel(new ArrayList<>()), pageRef). enableSearch(Specification.this). @@ -304,11 +254,11 @@ protected void setupFragment(final AnyTypeTO anyType) { fragment.addOrReplace(anyObjectSearchPanel.setRenderBodyOnly(true)); anyObjectDirectoryPanel = new AnyObjectSelectionDirectoryPanel.Builder( - anyTypeClassRestClient.list(anyType.getClasses()), + List.of(), anyObjectRestClient, - anyType.getKey(), + anyType, pageRef). - setFiql(SyncopeClient.getAnyObjectSearchConditionBuilder(anyType.getKey()). + setFiql(SyncopeClient.getAnyObjectSearchConditionBuilder(anyType). is(Constants.KEY_FIELD_NAME).notNullValue().query()). setWizardInModal(true).build("searchResultPanel"); fragment.addOrReplace(anyObjectDirectoryPanel.setRenderBodyOnly(true)); @@ -320,8 +270,8 @@ public void onEvent(final IEvent event) { AjaxRequestTarget target = SearchClausePanel.SearchEvent.class.cast(event.getPayload()).getTarget(); String fiql = SearchUtils.buildFIQL(anyObjectSearchPanel.getModel().getObject(), - SyncopeClient.getAnyObjectSearchConditionBuilder(anyObjectSearchPanel.getBackObjectType())); - AnyDirectoryPanel.class.cast(Specification.this.anyObjectDirectoryPanel).search(fiql, target); + SyncopeClient.getAnyObjectSearchConditionBuilder(anyObjectSearchPanel.getAnyType())); + AnyDirectoryPanel.class.cast(anyObjectDirectoryPanel).search(fiql, target); } else if (event.getPayload() instanceof AnySelectionDirectoryPanel.ItemSelection) { AjaxRequestTarget target = AnySelectionDirectoryPanel.ItemSelection.class.cast(event.getPayload()).getTarget(); @@ -330,7 +280,7 @@ public void onEvent(final IEvent event) { rel.setOtherEndKey(right.getKey()); rel.setOtherEndName(AnyObjectTO.class.cast(right).getName()); - Relationships.this.addNewRelationships(rel); + Relationships.this.addNewRelationship(rel); Relationships.this.addOrReplace(getViewFragment().setRenderBodyOnly(true)); target.add(Relationships.this); diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html index c58eb6f5956..18e2b521890 100644 --- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html +++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html @@ -19,7 +19,7 @@
- +
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java index 5baff5a4808..42e91163748 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java @@ -179,7 +179,7 @@ public static AnyObjectUR diff( EntityTOUtils.buildRelationshipMap(original.getRelationships()); updatedRels.entrySet().stream(). - filter(entry -> (!originalRels.containsKey(entry.getKey()))). + filter(entry -> !originalRels.containsKey(entry.getKey())). forEach(entry -> result.getRelationships().add(new RelationshipUR.Builder(entry.getValue()). operation(PatchOperation.ADD_REPLACE).build())); @@ -285,7 +285,7 @@ public static UserUR diff(final UserTO updated, final UserTO original, final boo EntityTOUtils.buildRelationshipMap(original.getRelationships()); updatedRels.entrySet().stream(). - filter(entry -> (!originalRels.containsKey(entry.getKey()))). + filter(entry -> !originalRels.containsKey(entry.getKey())). forEach(entry -> result.getRelationships().add(new RelationshipUR.Builder(entry.getValue()). operation(PatchOperation.ADD_REPLACE).build())); diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java index 1a02eda8140..0a30dc5183f 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java @@ -107,107 +107,6 @@ public void clickToCloneUser() { formTester.submit("buttons:cancel"); } - @Test - public void editRelationships() { - TESTER.clickLink("body:realmsLI:realms", false); - TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link"); - - Component component = findComponentByProp("username", CONTAINER - + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "puccini"); - assertNotNull(component); - - TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK); - TESTER.clickLink(TAB_PANEL - + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:" - + "actions:actions:actionRepeater:0:action:action"); - - TESTER.assertComponent(TAB_PANEL - + "outerObjectsRepeater:0:outer:form:content:form:view:username:textField", - TextField.class); - - FormTester formTester = TESTER.newFormTester(TAB_PANEL - + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - - formTester.submit("buttons:next"); - - formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - formTester.submit("buttons:next"); - - formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - formTester.submit("buttons:next"); - - formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - formTester.submit("buttons:next"); - - formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - formTester.submit("buttons:next"); - - formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - formTester.submit("buttons:next"); - - formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - formTester.submit("buttons:next"); - - // Add first RELATIONSHIP - addRelationship("Canon MF 8030cn"); - component = TESTER.getComponentFromLastRenderedPage(TAB_PANEL + "outerObjectsRepeater:0:outer" - + ":form:content:form:view:relationships:relationships:container:content:relationships:0:right_end"); - assertNotNull(component); - assertEquals("PRINTER Canon MF 8030cn", component.getDefaultModel().getObject()); - - // Add second RELATIONSHIP - addRelationship("HP LJ 1300n"); - component = TESTER.getComponentFromLastRenderedPage(TAB_PANEL + "outerObjectsRepeater:0:outer" - + ":form:content:form:view:relationships:relationships:container:content:relationships:1:right_end"); - assertNotNull(component); - assertEquals("PRINTER HP LJ 1300n", component.getDefaultModel().getObject()); - - formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - formTester.submit("buttons:cancel"); - } - - // issue SYNCOPE-1846 - private void addRelationship(final String printerName) { - TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form:view:relationships:actions:" - + "actionRepeater:0:action:action", Constants.ON_CLICK); - FormTester formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form"); - assertNotNull(formTester); - - formTester.setValue("view:relationships:specification:type:dropDownChoiceField", "neighborhood"); - TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form:view:relationships:" - + "specification:type:dropDownChoiceField", Constants.ON_CHANGE); - formTester.setValue("view:relationships:specification:type:dropDownChoiceField", "neighborhood"); - // The ON_CHANGE above should enable this component, but it doesn't; doing it by hand - Component otherType = findComponentById( - TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form:view:relationships:specification", - "otherType"); - assertNotNull(otherType); - otherType.setEnabled(true); - - formTester.setValue("view:relationships:specification:otherType:dropDownChoiceField", "PRINTER"); - TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form:view:relationships:" - + "specification:otherType:dropDownChoiceField", Constants.ON_CHANGE); - - Component component = findComponentByProp("name", TAB_PANEL + "outerObjectsRepeater:" - + "0:outer:form:content:form:view:relationships:specification:searchPanelContainer:searchPanel:" - + "searchResultPanel:container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:" - + "dataTable:body:rows:1:cells:2:cell", printerName); - assertNotNull(component); - TESTER.executeAjaxEvent(component, Constants.ON_CLICK); - TESTER.clickLink(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form:view:relationships:specification:" - + "searchPanelContainer:searchPanel:searchResultPanel:" - + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:" - + "actions:actions:actionRepeater:0:action:action"); - } - @Test public void editUser() { TESTER.clickLink("body:realmsLI:realms", false); diff --git a/pom.xml b/pom.xml index 1934b152347..1f4ea818bac 100644 --- a/pom.xml +++ b/pom.xml @@ -450,7 +450,7 @@ under the License. 2.3.232 2.2.36 - 5.27.1 + 5.28.0 1.3.8 1.4.1-1