[SYNCOPE-666] Any* tests added
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/a45a46bb Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/a45a46bb Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/a45a46bb Branch: refs/heads/master Commit: a45a46bba7186ef43b4877482d636901bc40cbc5 Parents: 46aaa9e Author: Francesco Chicchiriccò <[email protected]> Authored: Wed Jun 10 14:33:59 2015 +0200 Committer: Francesco Chicchiriccò <[email protected]> Committed: Wed Jun 10 14:33:59 2015 +0200 ---------------------------------------------------------------------- .../client/console/commons/AnyDataProvider.java | 101 ++++ .../commons/AttributableDataProvider.java | 103 ---- .../console/pages/BulkActionModalPage.java | 8 +- .../pages/BulkActionResultModalPage.java | 8 +- .../console/pages/ProvisioningModalPage.java | 38 +- .../client/console/pages/ResourceModalPage.java | 52 +- .../panels/AbstractSearchResultPanel.java | 22 +- .../console/panels/AjaxDataTablePanel.java | 4 +- .../console/panels/AnnotatedBeanPanel.java | 4 +- .../console/panels/ResourceConnConfPanel.java | 18 +- .../console/panels/ResourceDetailsPanel.java | 10 +- .../console/panels/ResourceMappingPanel.java | 228 +++++---- .../client/console/panels/Resources.java | 485 ------------------- .../console/rest/ConnectorRestClient.java | 6 +- .../client/console/rest/GroupRestClient.java | 47 +- .../client/console/rest/UserRestClient.java | 48 +- .../repeater/data/table/ActionResultColumn.java | 17 +- .../console/pages/ResourceModalPage.properties | 6 +- .../pages/ResourceModalPage_it.properties | 6 +- .../pages/ResourceModalPage_pt_BR.properties | 6 +- .../console/panels/ResourceMappingPanel.html | 14 +- .../client/console/panels/Resources.html | 52 -- .../client/console/panels/Resources.properties | 34 -- .../console/panels/Resources_it.properties | 34 -- .../console/panels/Resources_pt_BR.properties | 32 -- .../syncope/client/lib/SyncopeClient.java | 13 +- .../lib/builders/AnyListQueryBuilder.java | 1 + .../apache/syncope/common/lib/mod/AnyMod.java | 2 + .../AbstractFiqlSearchConditionBuilder.java | 1 + .../AnyObjectFiqlSearchConditionBuilder.java | 71 +++ .../common/lib/search/AnyObjectProperty.java | 23 + .../syncope/common/lib/search/SpecialAttr.java | 1 + .../common/lib/to/ConnIdObjectClassTO.java | 74 --- .../apache/syncope/common/lib/to/MappingTO.java | 2 +- .../common/lib/types/IntMappingType.java | 18 +- .../common/lib/wrap/ConnIdObjectClass.java | 30 ++ .../rest/api/service/AnyObjectService.java | 49 ++ .../common/rest/api/service/AnyService.java | 191 ++++++++ .../rest/api/service/ConnectorService.java | 4 +- .../common/rest/api/service/GroupService.java | 158 +----- .../common/rest/api/service/UserService.java | 160 +----- .../syncope/core/logic/AbstractAnyLogic.java | 16 +- .../syncope/core/logic/AnyObjectLogic.java | 27 +- .../apache/syncope/core/logic/AnyTypeLogic.java | 10 +- .../apache/syncope/core/logic/GroupLogic.java | 1 + .../apache/syncope/core/logic/UserLogic.java | 6 + .../syncope/core/misc/ConnObjectUtils.java | 5 + .../apache/syncope/core/misc/MappingUtils.java | 14 +- .../core/misc/search/SearchCondVisitor.java | 7 + .../misc/search/SearchCondConverterTest.java | 14 + .../core/persistence/api/dao/AnyObjectDAO.java | 8 +- .../persistence/api/dao/search/AnyTypeCond.java | 40 ++ .../persistence/api/dao/search/SearchCond.java | 22 +- .../persistence/jpa/dao/JPAAnyObjectDAO.java | 24 +- .../persistence/jpa/dao/JPAAnySearchDAO.java | 22 + .../persistence/jpa/entity/JPAAnyUtils.java | 6 +- .../jpa/entity/resource/JPAMapping.java | 2 +- .../jpa/entity/resource/JPAMappingItem.java | 2 +- .../persistence/jpa/entity/AnyObjectTest.java | 10 + .../persistence/jpa/entity/AnySearchTest.java | 24 +- .../persistence/jpa/entity/AnyTypeTest.java | 8 +- .../persistence/jpa/entity/PlainSchemaTest.java | 2 +- .../persistence/jpa/entity/ResourceTest.java | 4 +- .../core/persistence/jpa/entity/TaskTest.java | 2 +- .../persistence/jpa/relationship/GroupTest.java | 16 +- .../jpa/relationship/PlainSchemaTest.java | 12 +- .../persistence/jpa/relationship/RoleTest.java | 2 +- .../src/test/resources/content.xml | 70 ++- .../provisioning/java/ConnectorFacadeProxy.java | 35 +- .../provisioning/java/VirAttrHandlerImpl.java | 2 +- .../java/data/AbstractAnyDataBinder.java | 2 +- .../java/data/AnyObjectDataBinderImpl.java | 16 + .../propagation/PropagationManagerImpl.java | 1 + .../provisioning/java/sync/SyncJobImpl.java | 39 +- .../core/provisioning/java/sync/SyncUtils.java | 6 +- .../rest/cxf/service/AbstractAnyService.java | 290 +++++++++++ .../rest/cxf/service/AnyObjectServiceImpl.java | 71 +++ .../rest/cxf/service/ConnectorServiceImpl.java | 12 +- .../core/rest/cxf/service/GroupServiceImpl.java | 205 +------- .../core/rest/cxf/service/UserServiceImpl.java | 259 +--------- .../core/logic/init/CamelRouteLoader.java | 4 + .../CamelAnyObjectProvisioningManager.java | 163 +++++++ .../processor/AnyObjectCreateProcessor.java | 71 +++ .../processor/AnyObjectDeleteProcessor.java | 83 ++++ .../AnyObjectDeprovisionProcessor.java | 78 +++ .../processor/AnyObjectUpdateProcessor.java | 90 ++++ .../src/main/resources/anyObjectRoutes.xml | 121 +++++ .../src/main/resources/provisioning.properties | 2 +- .../main/resources/provisioningCamelContext.xml | 6 +- fit/build-tools/pom.xml | 10 +- .../fit/buildtools/ConnIdStartStopListener.java | 3 +- .../src/main/resources/buildToolsContext.xml | 7 +- fit/build-tools/src/main/resources/testdb.sql | 8 +- .../src/main/resources/connid.properties | 2 +- .../resources/scriptedsql/CreateScript.groovy | 52 ++ .../resources/scriptedsql/DeleteScript.groovy | 43 ++ .../resources/scriptedsql/SchemaScript.groovy | 50 ++ .../resources/scriptedsql/SearchScript.groovy | 94 ++++ .../resources/scriptedsql/SyncScript.groovy | 98 ++++ .../resources/scriptedsql/TestScript.groovy | 31 ++ .../resources/scriptedsql/UpdateScript.groovy | 67 +++ .../fit/core/reference/AbstractITCase.java | 35 +- .../fit/core/reference/AnyObjectITCase.java | 126 +++++ .../fit/core/reference/AnyTypeClassITCase.java | 117 +++++ .../fit/core/reference/AnyTypeITCase.java | 169 +++++++ .../fit/core/reference/ConnectorITCase.java | 15 +- .../syncope/fit/core/reference/GroupITCase.java | 24 +- .../fit/core/reference/SearchITCase.java | 93 ++-- .../fit/core/reference/SyncTaskITCase.java | 45 ++ .../syncope/fit/core/reference/UserITCase.java | 4 +- pom.xml | 11 +- 111 files changed, 3166 insertions(+), 2051 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java new file mode 100644 index 0000000..bd4183b --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java @@ -0,0 +1,101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.client.console.commons; + +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import org.apache.syncope.client.console.rest.AbstractAnyRestClient; +import org.apache.syncope.common.lib.to.AnyTO; +import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; +import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.IModel; + +public class AnyDataProvider extends SortableDataProvider<AnyTO, String> { + + private static final long serialVersionUID = 6267494272884913376L; + + private final SortableAnyProviderComparator comparator; + + private String fiql = null; + + private final int paginatorRows; + + private final boolean filtered; + + private final AbstractAnyRestClient restClient; + + private final String realm = "/"; + + public AnyDataProvider(final AbstractAnyRestClient restClient, final int paginatorRows, final boolean filtered) { + super(); + + this.restClient = restClient; + this.filtered = filtered; + this.paginatorRows = paginatorRows; + + // default sorting + setSort("key", SortOrder.ASCENDING); + + this.comparator = new SortableAnyProviderComparator(this); + } + + public void setFIQL(final String fiql) { + this.fiql = fiql; + } + + @Override + public Iterator<? extends AnyTO> iterator(final long first, final long count) { + List<? extends AnyTO> result; + + final int page = ((int) first / paginatorRows); + + if (filtered) { + result = fiql == null + ? Collections.<AnyTO>emptyList() + : restClient.search(realm, fiql, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()); + } else { + result = restClient.list(realm, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()); + } + + Collections.sort(result, comparator); + return result.iterator(); + } + + @Override + public long size() { + long result; + + if (filtered) { + result = fiql == null + ? 0 + : restClient.searchCount(realm, fiql); + } else { + result = restClient.count(realm); + } + + return result; + } + + @Override + public IModel<AnyTO> model(final AnyTO object) { + return new CompoundPropertyModel<>(object); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/commons/AttributableDataProvider.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/AttributableDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/AttributableDataProvider.java deleted file mode 100644 index 1890a80..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/AttributableDataProvider.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.syncope.client.console.commons; - -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import org.apache.syncope.client.console.rest.AbstractSubjectRestClient; -import org.apache.syncope.common.lib.to.AbstractAttributableTO; -import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; -import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; -import org.apache.wicket.model.CompoundPropertyModel; -import org.apache.wicket.model.IModel; - -public class AttributableDataProvider extends SortableDataProvider<AbstractAttributableTO, String> { - - private static final long serialVersionUID = 6267494272884913376L; - - private final SortableAttributableProviderComparator comparator; - - private String fiql = null; - - private final int paginatorRows; - - private final boolean filtered; - - private final AbstractSubjectRestClient restClient; - - private final String realm = "/"; - - public AttributableDataProvider(final AbstractSubjectRestClient restClient, - final int paginatorRows, final boolean filtered) { - - super(); - - this.restClient = restClient; - this.filtered = filtered; - this.paginatorRows = paginatorRows; - - // default sorting - setSort("key", SortOrder.ASCENDING); - - this.comparator = new SortableAttributableProviderComparator(this); - } - - public void setFIQL(final String fiql) { - this.fiql = fiql; - } - - @Override - public Iterator<? extends AbstractAttributableTO> iterator(final long first, final long count) { - List<? extends AbstractAttributableTO> result; - - final int page = ((int) first / paginatorRows); - - if (filtered) { - result = fiql == null - ? Collections.<AbstractAttributableTO>emptyList() - : restClient.search(realm, fiql, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()); - } else { - result = restClient.list(realm, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()); - } - - Collections.sort(result, comparator); - return result.iterator(); - } - - @Override - public long size() { - long result; - - if (filtered) { - result = fiql == null - ? 0 - : restClient.searchCount(realm, fiql); - } else { - result = restClient.count(realm); - } - - return result; - } - - @Override - public IModel<AbstractAttributableTO> model(final AbstractAttributableTO object) { - return new CompoundPropertyModel<>(object); - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java index 65dfa58..5567094 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java @@ -53,7 +53,7 @@ public class BulkActionModalPage<T, S> extends BaseModalPage { final List<IColumn<T, S>> columns, final Collection<ActionLink.ActionType> actions, final BaseRestClient bulkActionExecutor, - final String idFieldName, + final String keyFieldName, final String pageId) { super(); @@ -92,9 +92,9 @@ public class BulkActionModalPage<T, S> extends BaseModalPage { final BulkAction bulkAction = new BulkAction(); for (T item : items) { try { - bulkAction.getTargets().add(getTargetId(item, idFieldName).toString()); + bulkAction.getTargets().add(getTargetId(item, keyFieldName).toString()); } catch (IllegalAccessException | InvocationTargetException e) { - LOG.error("Error retrieving item id {}", idFieldName, e); + LOG.error("Error retrieving item id {}", keyFieldName, e); } } @@ -128,7 +128,7 @@ public class BulkActionModalPage<T, S> extends BaseModalPage { final BulkActionResult res = (BulkActionResult) bulkActionExecutor.getClass(). getMethod("bulkAction", BulkAction.class).invoke(bulkActionExecutor, bulkAction); - setResponsePage(new BulkActionResultModalPage<>(window, items, columns, res, idFieldName)); + setResponsePage(new BulkActionResultModalPage<>(window, items, columns, res, keyFieldName)); } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { error(getString(Constants.ERROR) http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java index 72a789f..98ac15c 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java @@ -36,14 +36,12 @@ import org.apache.wicket.model.IModel; /** * Show user or group status after performing a successful operation. + * * @param <T> * @param <S> */ public class BulkActionResultModalPage<T, S> extends BaseModalPage { - /** - * Serial version id. - */ private static final long serialVersionUID = 2646115294319713724L; public BulkActionResultModalPage( @@ -51,12 +49,12 @@ public class BulkActionResultModalPage<T, S> extends BaseModalPage { final Collection<T> items, final List<IColumn<T, S>> columns, final BulkActionResult results, - final String idFieldName) { + final String keyFieldName) { super(); final List<IColumn<T, S>> newColumnList = new ArrayList<>(columns.subList(1, columns.size() - 1)); - newColumnList.add(newColumnList.size(), new ActionResultColumn<T, S>(results, idFieldName)); + newColumnList.add(newColumnList.size(), new ActionResultColumn<T, S>(results, keyFieldName)); final SortableDataProvider<T, S> dataProvider = new SortableDataProvider<T, S>() { http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java index af1d0b5..6f56bbb 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java @@ -31,15 +31,13 @@ import org.apache.syncope.client.console.commons.status.StatusUtils; import org.apache.syncope.client.console.panels.ActionDataTablePanel; import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; import org.apache.syncope.client.lib.SyncopeClient; -import org.apache.syncope.common.lib.to.AbstractAttributableTO; -import org.apache.syncope.common.lib.to.AbstractSubjectTO; +import org.apache.syncope.common.lib.to.AnyTO; import org.apache.syncope.common.lib.to.BulkActionResult; import org.apache.syncope.common.lib.to.ResourceTO; -import org.apache.syncope.common.lib.to.GroupTO; -import org.apache.syncope.common.lib.to.UserTO; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.ResourceDeassociationActionType; import org.apache.syncope.common.lib.wrap.AbstractWrappable; -import org.apache.syncope.common.lib.wrap.SubjectKey; +import org.apache.syncope.common.lib.wrap.AnyKey; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; @@ -54,7 +52,7 @@ import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; -public class ProvisioningModalPage<T extends AbstractAttributableTO> extends AbstractStatusModalPage { +public class ProvisioningModalPage<T extends AnyTO> extends AbstractStatusModalPage { private static final long serialVersionUID = -4285220460543213901L; @@ -62,7 +60,7 @@ public class ProvisioningModalPage<T extends AbstractAttributableTO> extends Abs private final ResourceTO resourceTO; - private final Class<? extends AbstractAttributableTO> typeRef; + private final AnyTypeKind anyTypeKind; private final PageReference pageRef; @@ -76,16 +74,16 @@ public class ProvisioningModalPage<T extends AbstractAttributableTO> extends Abs final PageReference pageRef, final ModalWindow window, final ResourceTO resourceTO, - final Class<T> typeRef) { + final AnyTypeKind anyTypeKind) { super(); this.pageRef = pageRef; this.window = window; this.resourceTO = resourceTO; - this.typeRef = typeRef; + this.anyTypeKind = anyTypeKind; - statusUtils = new StatusUtils((UserTO.class.isAssignableFrom(typeRef) ? userRestClient : groupRestClient)); + statusUtils = new StatusUtils(anyTypeKind == AnyTypeKind.USER ? userRestClient : groupRestClient); add(new Label("displayName", StringUtils.EMPTY)); @@ -100,8 +98,8 @@ public class ProvisioningModalPage<T extends AbstractAttributableTO> extends Abs new StringResourceModel("resourceName", this, null, "Resource name"), "resourceName", "resourceName")); columns.add(new PropertyColumn<StatusBean, String>( - new StringResourceModel("accountLink", this, null, "Account link"), - "accountLink", "accountLink")); + new StringResourceModel("connObjectLink", this, null, "ConnObjectLink"), + "connObjectLink", "connObjectLink")); columns.add(new AbstractColumn<StatusBean, String>( new StringResourceModel("status", this, null, "")) { @@ -198,7 +196,7 @@ public class ProvisioningModalPage<T extends AbstractAttributableTO> extends Abs final String fiql = SyncopeClient.getUserSearchConditionBuilder().hasResources(resourceTO.getKey()).query(); final List<T> subjects = new ArrayList<>(); - if (UserTO.class.isAssignableFrom(typeRef)) { + if (anyTypeKind == AnyTypeKind.USER) { subjects.addAll((List<T>) userRestClient.search( realm, fiql, 1, ROWS_PER_PAGE, new SortParam<>("key", true))); } else { @@ -207,16 +205,16 @@ public class ProvisioningModalPage<T extends AbstractAttributableTO> extends Abs } final List<ConnObjectWrapper> connObjects = statusUtils.getConnectorObjects( - (List<AbstractSubjectTO>) subjects, Collections.<String>singleton(resourceTO.getKey())); + (List<AnyTO>) subjects, Collections.<String>singleton(resourceTO.getKey())); final List<StatusBean> statusBeans = new ArrayList<>(connObjects.size() + 1); final LinkedHashMap<String, StatusBean> initialStatusBeanMap = new LinkedHashMap<>(connObjects.size()); for (ConnObjectWrapper entry : connObjects) { - final StatusBean statusBean = statusUtils.getStatusBean(entry.getAttributable(), + StatusBean statusBean = statusUtils.getStatusBean(entry.getAny(), entry.getResourceName(), entry.getConnObjectTO(), - GroupTO.class.isAssignableFrom(typeRef)); + anyTypeKind == AnyTypeKind.GROUP); initialStatusBeanMap.put(entry.getResourceName(), statusBean); statusBeans.add(statusBean); @@ -233,21 +231,21 @@ public class ProvisioningModalPage<T extends AbstractAttributableTO> extends Abs final List<IColumn<StatusBean, String>> columns) { final List<StatusBean> beans = new ArrayList<>(table.getModelObject()); - List<SubjectKey> subjectKeys = new ArrayList<>(); + List<AnyKey> subjectKeys = new ArrayList<>(); for (StatusBean bean : beans) { LOG.debug("Selected bean {}", bean); - subjectKeys.add(AbstractWrappable.getInstance(SubjectKey.class, bean.getAttributableId())); + subjectKeys.add(AbstractWrappable.getInstance(AnyKey.class, bean.getAnyKey())); } if (beans.isEmpty()) { window.close(target); } else { final BulkActionResult res = resourceRestClient.bulkAssociationAction( - resourceTO.getKey(), typeRef, type, subjectKeys); + resourceTO.getKey(), anyTypeKind.name(), type, subjectKeys); ((BasePage) pageRef.getPage()).setModalResult(true); - setResponsePage(new BulkActionResultModalPage<>(window, beans, columns, res, "attributableKey")); + setResponsePage(new BulkActionResultModalPage<>(window, beans, columns, res, "anyKey")); } } } http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java index aa9dbfc..e578255 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/ResourceModalPage.java @@ -18,6 +18,8 @@ */ package org.apache.syncope.client.console.pages; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.client.console.commons.Constants; import org.apache.syncope.client.console.panels.AnnotatedBeanPanel; import org.apache.syncope.client.console.panels.ResourceConnConfPanel; @@ -25,8 +27,9 @@ import org.apache.syncope.client.console.panels.ResourceDetailsPanel; import org.apache.syncope.client.console.panels.ResourceMappingPanel; import org.apache.syncope.client.console.panels.ResourceSecurityPanel; import org.apache.syncope.common.lib.to.MappingItemTO; +import org.apache.syncope.common.lib.to.ProvisionTO; import org.apache.syncope.common.lib.to.ResourceTO; -import org.apache.syncope.common.lib.types.AttributableType; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.Entitlement; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -66,8 +69,8 @@ public class ResourceModalPage extends BaseModalPage { //-------------------------------- // Resource mapping panels //-------------------------------- - form.add(new ResourceMappingPanel("umapping", resourceTO, AttributableType.USER)); - form.add(new ResourceMappingPanel("gmapping", resourceTO, AttributableType.GROUP)); + form.add(new ResourceMappingPanel("umapping", resourceTO, AnyTypeKind.USER)); + form.add(new ResourceMappingPanel("gmapping", resourceTO, AnyTypeKind.GROUP)); //-------------------------------- //-------------------------------- @@ -84,7 +87,7 @@ public class ResourceModalPage extends BaseModalPage { form.add(new ResourceSecurityPanel("security", resourceTO)); //-------------------------------- - final AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(SUBMIT, SUBMIT)) { + AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(SUBMIT, SUBMIT)) { private static final long serialVersionUID = -958724007591692537L; @@ -92,34 +95,29 @@ public class ResourceModalPage extends BaseModalPage { protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { final ResourceTO resourceTO = (ResourceTO) form.getDefaultModelObject(); - boolean accountIdError = false; + boolean connObjectKeyError = false; - if (resourceTO.getUmapping() == null || resourceTO.getUmapping().getItems().isEmpty()) { - resourceTO.setUmapping(null); - } else { - int uAccountIdCount = 0; - for (MappingItemTO item : resourceTO.getUmapping().getItems()) { - if (item.isAccountid()) { - uAccountIdCount++; - } - } - accountIdError = uAccountIdCount != 1; - } + for (ProvisionTO provision : resourceTO.getProvisions()) { + if (provision != null) { + if (provision.getMapping() == null || provision.getMapping().getItems().isEmpty()) { + resourceTO.getProvisions().remove(provision); + } else { + int uConnObjectKeyCount = CollectionUtils.countMatches( + provision.getMapping().getItems(), new Predicate<MappingItemTO>() { - if (resourceTO.getGmapping() == null || resourceTO.getGmapping().getItems().isEmpty()) { - resourceTO.setGmapping(null); - } else { - int rAccountIdCount = 0; - for (MappingItemTO item : resourceTO.getGmapping().getItems()) { - if (item.isAccountid()) { - rAccountIdCount++; + @Override + public boolean evaluate(final MappingItemTO item) { + return item.isConnObjectKey(); + } + }); + + connObjectKeyError = uConnObjectKeyCount != 1; } } - accountIdError |= rAccountIdCount != 1; } - if (accountIdError) { - error(getString("accountIdValidation")); + if (connObjectKeyError) { + error(getString("connObjectKeyValidation")); feedbackPanel.refresh(target); } else { try { @@ -142,6 +140,7 @@ public class ResourceModalPage extends BaseModalPage { } @Override + protected void onError(final AjaxRequestTarget target, final Form<?> form) { feedbackPanel.refresh(target); } @@ -171,6 +170,7 @@ public class ResourceModalPage extends BaseModalPage { MetaDataRoleAuthorizationStrategy.authorize( submit, ENABLE, createFlag ? Entitlement.RESOURCE_CREATE : Entitlement.RESOURCE_UPDATE); + } /** http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java index 0af8a0b..20f62d5 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java @@ -21,12 +21,12 @@ package org.apache.syncope.client.console.panels; import java.util.Collection; import java.util.List; import org.apache.syncope.client.console.PreferenceManager; -import org.apache.syncope.client.console.commons.AttributableDataProvider; +import org.apache.syncope.client.console.commons.AnyDataProvider; import org.apache.syncope.client.console.commons.Constants; import org.apache.syncope.client.console.pages.AbstractBasePage; -import org.apache.syncope.client.console.rest.AbstractSubjectRestClient; +import org.apache.syncope.client.console.rest.AbstractAnyRestClient; import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; -import org.apache.syncope.common.lib.to.AbstractAttributableTO; +import org.apache.syncope.common.lib.to.AnyTO; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; @@ -89,7 +89,7 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS @SpringBean protected PreferenceManager prefMan; - protected final AbstractSubjectRestClient restClient; + protected final AbstractAnyRestClient restClient; /** * Number of rows per page. @@ -120,12 +120,12 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS /** * Result table. */ - private AjaxDataTablePanel<AbstractAttributableTO, String> resultTable; + private AjaxDataTablePanel<AnyTO, String> resultTable; /** * Data provider used to search for users. */ - private AttributableDataProvider dataProvider; + private AnyDataProvider dataProvider; /** * Modal window to be used for user profile editing. Global visibility is required ... @@ -147,8 +147,8 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS */ protected final AbstractBasePage page; - protected <T extends AbstractAttributableTO> AbstractSearchResultPanel(final String id, final boolean filtered, - final String fiql, final PageReference pageRef, final AbstractSubjectRestClient restClient) { + protected <T extends AnyTO> AbstractSearchResultPanel(final String id, final boolean filtered, + final String fiql, final PageReference pageRef, final AbstractAnyRestClient restClient) { super(id); @@ -238,7 +238,7 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS } private void updateResultTable(final boolean create, final int rows) { - dataProvider = new AttributableDataProvider(restClient, rows, filtered); + dataProvider = new AnyDataProvider(restClient, rows, filtered); dataProvider.setFIQL(fiql); final int currentPage = resultTable != null @@ -265,7 +265,7 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS container.addOrReplace(resultTable); } - protected abstract List<IColumn<AbstractAttributableTO, String>> getColumns(); + protected abstract List<IColumn<AnyTO, String>> getColumns(); @Override public void onEvent(final IEvent<?> event) { @@ -340,7 +340,7 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS } } - protected abstract <T extends AbstractAttributableTO> Collection<ActionLink.ActionType> getBulkActions(); + protected abstract <T extends AnyTO> Collection<ActionLink.ActionType> getBulkActions(); protected abstract String getPageId(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java index 563bd17..daaaa23 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java @@ -52,7 +52,7 @@ public class AjaxDataTablePanel<T, S> extends DataTablePanel<T, S> { final int rowsPerPage, final Collection<ActionLink.ActionType> actions, final BaseRestClient bulkActionExecutor, - final String itemIdField, + final String itemKeyField, final String pageId, final PageReference pageRef) { @@ -130,7 +130,7 @@ public class AjaxDataTablePanel<T, S> extends DataTablePanel<T, S> { columns, actions, bulkActionExecutor, - itemIdField, + itemKeyField, pageId); } }); http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/panels/AnnotatedBeanPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnnotatedBeanPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnnotatedBeanPanel.java index e809263..ab1e7e0 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnnotatedBeanPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnnotatedBeanPanel.java @@ -20,7 +20,7 @@ package org.apache.syncope.client.console.panels; import org.apache.syncope.client.console.SyncopeConsoleSession; import org.apache.syncope.common.lib.to.AbstractAnnotatedBean; -import org.apache.syncope.common.lib.to.AbstractAttributableTO; +import org.apache.syncope.common.lib.to.AnyTO; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; @@ -29,7 +29,7 @@ public class AnnotatedBeanPanel extends Panel { private static final long serialVersionUID = 4228064224811390809L; - public <T extends AbstractAttributableTO> AnnotatedBeanPanel( + public <T extends AnyTO> AnnotatedBeanPanel( final String id, final AbstractAnnotatedBean sysInfoTO) { super(id); http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java index c1d01e0..6f2a17b 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceConnConfPanel.java @@ -57,9 +57,9 @@ public class ResourceConnConfPanel extends Panel { private List<ConnConfProperty> connConfProperties; - private WebMarkupContainer connConfPropContainer; + private final WebMarkupContainer connConfPropContainer; - private AjaxButton check; + private final AjaxButton check; public ResourceConnConfPanel(final String id, final ResourceTO resourceTO, final boolean createFlag) { super(id); @@ -103,7 +103,7 @@ public class ResourceConnConfPanel extends Panel { check.setEnabled(!connConfProperties.isEmpty()); check.setVisible(!connConfProperties.isEmpty()); - + connConfPropContainer.add(check); } @@ -113,10 +113,10 @@ public class ResourceConnConfPanel extends Panel { * @return overridable properties. */ private List<ConnConfProperty> getConnConfProperties() { - final List<ConnConfProperty> props = new ArrayList<ConnConfProperty>(); - final Long connectorId = resourceTO.getConnectorId(); - if (connectorId != null && connectorId > 0) { - for (ConnConfProperty property : restClient.getConnectorProperties(connectorId)) { + List<ConnConfProperty> props = new ArrayList<>(); + Long connectorKey = resourceTO.getConnector(); + if (connectorKey != null && connectorKey > 0) { + for (ConnConfProperty property : restClient.getConnectorProperties(connectorKey)) { if (property.isOverridable()) { props.add(property); } @@ -125,7 +125,7 @@ public class ResourceConnConfPanel extends Panel { if (createFlag || resourceTO.getConnConfProperties().isEmpty()) { resourceTO.getConnConfProperties().clear(); } else { - Map<String, ConnConfProperty> valuedProps = new HashMap<String, ConnConfProperty>(); + Map<String, ConnConfProperty> valuedProps = new HashMap<>(); for (ConnConfProperty prop : resourceTO.getConnConfProperties()) { valuedProps.put(prop.getSchema().getName(), prop); } @@ -169,7 +169,7 @@ public class ResourceConnConfPanel extends Panel { */ public static class ConnConfModEvent extends ResourceEvent { - private List<ConnConfProperty> configuration; + private final List<ConnConfProperty> configuration; /** * Constructor. http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java index 3bff23f..3095b4e 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceDetailsPanel.java @@ -222,7 +222,7 @@ public class ResourceDetailsPanel extends Panel { new ResourceModel("connector", "connector").getObject(), new PropertyModel<ConnInstanceTO>(this, "connInstanceTO")); conn.setChoices(connectors.getObject()); - conn.setChoiceRenderer(new ChoiceRenderer("displayName", "key")); + conn.setChoiceRenderer(new ChoiceRenderer<String>("displayName", "key")); conn.getField().setModel(new IModel<ConnInstanceTO>() { @@ -235,7 +235,7 @@ public class ResourceDetailsPanel extends Panel { @Override public void setObject(final ConnInstanceTO connector) { - resourceTO.setConnectorId(connector.getKey()); + resourceTO.setConnector(connector.getKey()); connInstanceTO = connector; } @@ -270,20 +270,20 @@ public class ResourceDetailsPanel extends Panel { */ private ConnInstanceTO getConectorInstanceTO(final List<ConnInstanceTO> connectorTOs, final ResourceTO resourceTO) { if (connectorTOs.isEmpty()) { - resourceTO.setConnectorId(null); + resourceTO.setConnector(null); return null; } else { // use the first element as default ConnInstanceTO res = connectorTOs.get(0); for (ConnInstanceTO to : connectorTOs) { - if (Long.valueOf(to.getKey()).equals(resourceTO.getConnectorId())) { + if (Long.valueOf(to.getKey()).equals(resourceTO.getConnector())) { res = to; } } // in case of no match - resourceTO.setConnectorId(res.getKey()); + resourceTO.setConnector(res.getKey()); return res; } http://git-wip-us.apache.org/repos/asf/syncope/blob/a45a46bb/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java index b00bc1b..17ae3bf 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java @@ -36,12 +36,12 @@ import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownCho import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel; import org.apache.syncope.client.console.wicket.markup.html.form.MappingPurposePanel; -import org.apache.syncope.common.lib.to.ConnIdObjectClassTO; import org.apache.syncope.common.lib.to.ConnInstanceTO; import org.apache.syncope.common.lib.to.MappingItemTO; import org.apache.syncope.common.lib.to.MappingTO; +import org.apache.syncope.common.lib.to.ProvisionTO; import org.apache.syncope.common.lib.to.ResourceTO; -import org.apache.syncope.common.lib.types.AttributableType; +import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.ConnConfProperty; import org.apache.syncope.common.lib.types.IntMappingType; import org.apache.syncope.common.lib.types.MappingPurpose; @@ -122,37 +122,28 @@ public class ResourceMappingPanel extends Panel { /** * User / group. */ - private final AttributableType attrType; + private final AnyTypeKind anyTypeKind; /** * Mapping container. */ private final WebMarkupContainer mappingContainer; - /** - * AccountLink container. - */ - private final WebMarkupContainer accountLinkContainer; + private final WebMarkupContainer connObjectLinkContainer; - private final AjaxCheckBoxPanel accountLinkCheckbox; + private final AjaxCheckBoxPanel connObjectLinkCheckbox; private MappingTO getMapping() { - MappingTO result = null; - - if (AttributableType.USER == this.attrType) { - if (this.resourceTO.getUmapping() == null) { - this.resourceTO.setUmapping(new MappingTO()); - } - result = this.resourceTO.getUmapping(); + ProvisionTO provision = resourceTO.getProvision(this.anyTypeKind.name()); + if (provision == null) { + provision = new ProvisionTO(); + resourceTO.getProvisions().add(provision); } - if (AttributableType.GROUP == this.attrType) { - if (this.resourceTO.getGmapping() == null) { - this.resourceTO.setGmapping(new MappingTO()); - } - result = this.resourceTO.getGmapping(); + if (provision.getMapping() == null) { + provision.setMapping(new MappingTO()); } - return result; + return provision.getMapping(); } /** @@ -160,25 +151,25 @@ public class ResourceMappingPanel extends Panel { * * @param id panel id * @param resourceTO external resource - * @param attrType USER / GROUP + * @param anyTypeKind USER / GROUP */ - public ResourceMappingPanel(final String id, final ResourceTO resourceTO, final AttributableType attrType) { + public ResourceMappingPanel(final String id, final ResourceTO resourceTO, final AnyTypeKind anyTypeKind) { super(id); setOutputMarkupId(true); this.resourceTO = resourceTO; - this.attrType = attrType; + this.anyTypeKind = anyTypeKind; this.mappingContainer = new WebMarkupContainer("mappingContainer"); this.mappingContainer.setOutputMarkupId(true); add(this.mappingContainer); - this.accountLinkContainer = new WebMarkupContainer("accountLinkContainer"); - this.accountLinkContainer.setOutputMarkupId(true); - add(this.accountLinkContainer); + this.connObjectLinkContainer = new WebMarkupContainer("connObjectLinkContainer"); + this.connObjectLinkContainer.setOutputMarkupId(true); + add(this.connObjectLinkContainer); - if (this.resourceTO.getConnectorId() != null && this.resourceTO.getConnectorId() > 0) { - schemaNames = getSchemaNames(this.resourceTO.getConnectorId(), this.resourceTO.getConnConfProperties()); + if (this.resourceTO.getConnector() != null && this.resourceTO.getConnector() > 0) { + schemaNames = getSchemaNames(this.resourceTO.getConnector(), this.resourceTO.getConnConfProperties()); setEnabled(); } else { @@ -193,7 +184,7 @@ public class ResourceMappingPanel extends Panel { final Label passwordLabel = new Label("passwordLabel", new ResourceModel("password")); mappingContainer.add(passwordLabel); - if (AttributableType.USER != ResourceMappingPanel.this.attrType) { + if (AnyTypeKind.USER != ResourceMappingPanel.this.anyTypeKind) { passwordLabel.setVisible(false); } @@ -213,8 +204,8 @@ public class ResourceMappingPanel extends Panel { } else if (left.getPurpose() != MappingPurpose.BOTH && right.getPurpose() == MappingPurpose.BOTH) { compared = 1; } else if (left.getPurpose() == MappingPurpose.PROPAGATION - && (right.getPurpose() == MappingPurpose.SYNCHRONIZATION || right.getPurpose() - == MappingPurpose.NONE)) { + && (right.getPurpose() == MappingPurpose.SYNCHRONIZATION + || right.getPurpose() == MappingPurpose.NONE)) { compared = -1; } else if (left.getPurpose() == MappingPurpose.SYNCHRONIZATION && right.getPurpose() == MappingPurpose.PROPAGATION) { @@ -225,9 +216,9 @@ public class ResourceMappingPanel extends Panel { } else if (left.getPurpose() == MappingPurpose.NONE && right.getPurpose() != MappingPurpose.NONE) { compared = 1; - } else if (left.isAccountid()) { + } else if (left.isConnObjectKey()) { compared = -1; - } else if (right.isAccountid()) { + } else if (right.isConnObjectKey()) { compared = 1; } else if (left.isPassword()) { compared = -1; @@ -251,14 +242,12 @@ public class ResourceMappingPanel extends Panel { mapItem.setPurpose(MappingPurpose.BOTH); } - AttributableType entity = null; + AnyTypeKind entity = null; if (mapItem.getIntMappingType() != null) { - entity = mapItem.getIntMappingType().getAttributableType(); + entity = mapItem.getIntMappingType().getAnyTypeKind(); } - final List<IntMappingType> attrTypes = new ArrayList<IntMappingType>(getAttributeTypes(entity)); - - item.add(new AjaxDecoratedCheckbox("toRemove", new Model<Boolean>(Boolean.FALSE)) { + item.add(new AjaxDecoratedCheckbox("toRemove", new Model<>(Boolean.FALSE)) { private static final long serialVersionUID = 7170946748485726506L; @@ -282,7 +271,7 @@ public class ResourceMappingPanel extends Panel { protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) { super.updateAjaxAttributes(attributes); - final AjaxCallListener ajaxCallListener = new AjaxCallListener() { + AjaxCallListener ajaxCallListener = new AjaxCallListener() { private static final long serialVersionUID = 7160235486520935153L; @@ -296,7 +285,7 @@ public class ResourceMappingPanel extends Panel { }); final AjaxDropDownChoicePanel<String> intAttrNames = - new AjaxDropDownChoicePanel<String>("intAttrNames", getString("intAttrNames"), + new AjaxDropDownChoicePanel<>("intAttrNames", getString("intAttrNames"), new PropertyModel<String>(mapItem, "intAttrName"), false); intAttrNames.setChoices(schemaNames); intAttrNames.setRequired(true); @@ -311,8 +300,9 @@ public class ResourceMappingPanel extends Panel { }); item.add(intAttrNames); + final List<IntMappingType> attrTypes = new ArrayList<>(getAttributeTypes(entity)); final AjaxDropDownChoicePanel<IntMappingType> intMappingTypes = - new AjaxDropDownChoicePanel<IntMappingType>("intMappingTypes", + new AjaxDropDownChoicePanel<>("intMappingTypes", new ResourceModel("intMappingTypes", "intMappingTypes").getObject(), new PropertyModel<IntMappingType>(mapItem, "intMappingType")); intMappingTypes.setRequired(true); @@ -320,13 +310,13 @@ public class ResourceMappingPanel extends Panel { intMappingTypes.setStyleSheet(FIELD_STYLE); item.add(intMappingTypes); - final AjaxDropDownChoicePanel<AttributableType> entitiesPanel = - new AjaxDropDownChoicePanel<AttributableType>("entities", - new ResourceModel("entities", "entities").getObject(), new Model<AttributableType>( - entity)); - entitiesPanel.setChoices(attrType == AttributableType.GROUP - ? Collections.<AttributableType>singletonList(AttributableType.GROUP) - : Arrays.asList(AttributableType.values())); + final AjaxDropDownChoicePanel<AnyTypeKind> entitiesPanel = + new AjaxDropDownChoicePanel<>("entities", + new ResourceModel("entities", "entities").getObject(), + new Model<>(entity)); + entitiesPanel.setChoices(anyTypeKind == AnyTypeKind.GROUP + ? Collections.<AnyTypeKind>singletonList(AnyTypeKind.GROUP) + : Arrays.asList(AnyTypeKind.values())); entitiesPanel.setStyleSheet(DEF_FIELD_STYLE); entitiesPanel.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { @@ -369,16 +359,16 @@ public class ResourceMappingPanel extends Panel { mandatory.setStyleSheet(SHORT_FIELD_STYLE); item.add(mandatory); - final AjaxCheckBoxPanel accountId = new AjaxCheckBoxPanel("accountId", - new ResourceModel("accountId", "accountId").getObject(), - new PropertyModel<Boolean>(mapItem, "accountid")); - accountId.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + final AjaxCheckBoxPanel connObjectKey = new AjaxCheckBoxPanel("connObjectKey", + new ResourceModel("connObjectKey", "connObjectKey").getObject(), + new PropertyModel<Boolean>(mapItem, "connObjectKey")); + connObjectKey.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { private static final long serialVersionUID = -1107858522700306810L; @Override protected void onUpdate(final AjaxRequestTarget target) { - if (accountId.getModelObject()) { + if (connObjectKey.getModelObject()) { mapItem.setMandatoryCondition("true"); mandatory.setEnabled(false); } else { @@ -388,7 +378,7 @@ public class ResourceMappingPanel extends Panel { target.add(mandatory); } }); - item.add(accountId); + item.add(connObjectKey); final AjaxCheckBoxPanel password = new AjaxCheckBoxPanel("password", new ResourceModel("password", "password").getObject(), @@ -399,17 +389,17 @@ public class ResourceMappingPanel extends Panel { @Override protected void onUpdate(final AjaxRequestTarget target) { - extAttrNames.setEnabled(!mapItem.isAccountid() && !password.getModelObject()); + extAttrNames.setEnabled(!mapItem.isConnObjectKey() && !password.getModelObject()); extAttrNames.setModelObject(null); extAttrNames.setRequired(!password.getModelObject()); target.add(extAttrNames); - setAccountId(intMappingTypes.getModelObject(), accountId, password); - target.add(accountId); + setConnObjectKey(intMappingTypes.getModelObject(), connObjectKey, password); + target.add(connObjectKey); } }); item.add(password); - if (AttributableType.USER != ResourceMappingPanel.this.attrType) { + if (AnyTypeKind.USER != ResourceMappingPanel.this.anyTypeKind) { password.setVisible(false); } @@ -432,13 +422,13 @@ public class ResourceMappingPanel extends Panel { setAttrNames(intMappingTypes.getModelObject(), intAttrNames); target.add(intAttrNames); - setAccountId(intMappingTypes.getModelObject(), accountId, password); - target.add(accountId); + setConnObjectKey(intMappingTypes.getModelObject(), connObjectKey, password); + target.add(connObjectKey); } }); setAttrNames(mapItem.getIntMappingType(), intAttrNames); - setAccountId(mapItem.getIntMappingType(), accountId, password); + setConnObjectKey(mapItem.getIntMappingType(), connObjectKey, password); } }; @@ -456,41 +446,41 @@ public class ResourceMappingPanel extends Panel { } }; addMappingBtn.setDefaultFormProcessing(false); - addMappingBtn.setEnabled(this.resourceTO.getConnectorId() != null && this.resourceTO.getConnectorId() > 0); + addMappingBtn.setEnabled(this.resourceTO.getConnector() != null && this.resourceTO.getConnector() > 0); mappingContainer.add(addMappingBtn); - boolean accountLinkEnabled = false; - if (getMapping().getAccountLink() != null) { - accountLinkEnabled = true; + boolean connObjectLinkEnabled = false; + if (getMapping().getConnObjectLink() != null) { + connObjectLinkEnabled = true; } - accountLinkCheckbox = new AjaxCheckBoxPanel("accountLinkCheckbox", - new ResourceModel("accountLinkCheckbox", "accountLinkCheckbox").getObject(), - new Model<Boolean>(Boolean.valueOf(accountLinkEnabled))); - accountLinkCheckbox.setEnabled(true); + connObjectLinkCheckbox = new AjaxCheckBoxPanel("connObjectLinkCheckbox", + new ResourceModel("connObjectLinkCheckbox", "connObjectLinkCheckbox").getObject(), + new Model<>(connObjectLinkEnabled)); + connObjectLinkCheckbox.setEnabled(true); - accountLinkContainer.add(accountLinkCheckbox); + connObjectLinkContainer.add(connObjectLinkCheckbox); - final AjaxTextFieldPanel accountLink = new AjaxTextFieldPanel("accountLink", - new ResourceModel("accountLink", "accountLink").getObject(), - new PropertyModel<String>(getMapping(), "accountLink")); - accountLink.setEnabled(accountLinkEnabled); - accountLinkContainer.add(accountLink); + final AjaxTextFieldPanel connObjectLink = new AjaxTextFieldPanel("connObjectLink", + new ResourceModel("connObjectLink", "connObjectLink").getObject(), + new PropertyModel<String>(getMapping(), "connObjectLink")); + connObjectLink.setEnabled(connObjectLinkEnabled); + connObjectLinkContainer.add(connObjectLink); - accountLinkCheckbox.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { + connObjectLinkCheckbox.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { private static final long serialVersionUID = -1107858522700306810L; @Override protected void onUpdate(final AjaxRequestTarget target) { - if (accountLinkCheckbox.getModelObject()) { - accountLink.setEnabled(Boolean.TRUE); - accountLink.setModelObject(""); + if (connObjectLinkCheckbox.getModelObject()) { + connObjectLink.setEnabled(Boolean.TRUE); + connObjectLink.setModelObject(""); } else { - accountLink.setEnabled(Boolean.FALSE); - accountLink.setModelObject(""); + connObjectLink.setEnabled(Boolean.FALSE); + connObjectLink.setModelObject(""); } - target.add(accountLink); + target.add(connObjectLink); } }); } @@ -504,25 +494,22 @@ public class ResourceMappingPanel extends Panel { } private void setEnabled() { - final ConnInstanceTO connInstanceTO = new ConnInstanceTO(); - connInstanceTO.setKey(this.resourceTO.getConnectorId()); + ConnInstanceTO connInstanceTO = new ConnInstanceTO(); + connInstanceTO.setKey(this.resourceTO.getConnector()); connInstanceTO.getConfiguration().addAll(this.resourceTO.getConnConfProperties()); - List<ConnIdObjectClassTO> objectClasses = connRestClient.getSupportedObjectClasses(connInstanceTO); + boolean enabled = resourceTO.getProvision(anyTypeKind.name()) != null; - boolean enabled = objectClasses.isEmpty() - || (AttributableType.USER == attrType && objectClasses.contains(ConnIdObjectClassTO.ACCOUNT)) - || (AttributableType.GROUP == attrType && objectClasses.contains(ConnIdObjectClassTO.GROUP)); this.mappingContainer.setEnabled(enabled); this.mappingContainer.setVisible(enabled); - this.accountLinkContainer.setEnabled(enabled); - this.accountLinkContainer.setVisible(enabled); + this.connObjectLinkContainer.setEnabled(enabled); + this.connObjectLinkContainer.setVisible(enabled); if (!enabled) { getMapping().getItems().clear(); - getMapping().setAccountLink(null); - if (this.accountLinkCheckbox != null) { - this.accountLinkCheckbox.setModelObject(null); + getMapping().setConnObjectLink(null); + if (this.connObjectLinkCheckbox != null) { + this.connObjectLinkCheckbox.setModelObject(null); } } } @@ -536,10 +523,10 @@ public class ResourceMappingPanel extends Panel { mappings.removeAll(); - addMappingBtn.setEnabled(resourceTO.getConnectorId() != null && resourceTO.getConnectorId() > 0); + addMappingBtn.setEnabled(resourceTO.getConnector() != null && resourceTO.getConnector() > 0); schemaNames.clear(); - schemaNames.addAll(getSchemaNames(resourceTO.getConnectorId(), new HashSet<ConnConfProperty>(conf))); + schemaNames.addAll(getSchemaNames(resourceTO.getConnector(), new HashSet<ConnConfProperty>(conf))); setEnabled(); @@ -557,34 +544,35 @@ public class ResourceMappingPanel extends Panel { toBeUpdated.setRequired(true); toBeUpdated.setEnabled(true); - if (type == null || type.getAttributableType() == null) { + if (type == null || type.getAnyTypeKind() == null) { toBeUpdated.setChoices(Collections.<String>emptyList()); } else { switch (type) { // user attribute names case UserPlainSchema: case GroupPlainSchema: - case MembershipPlainSchema: - toBeUpdated.setChoices(schemaRestClient.getPlainSchemaNames(type.getAttributableType())); + case AnyObjectPlainSchema: + toBeUpdated.setChoices(schemaRestClient.getPlainSchemaNames()); break; case UserDerivedSchema: case GroupDerivedSchema: - case MembershipDerivedSchema: - toBeUpdated.setChoices(schemaRestClient.getDerSchemaNames(type.getAttributableType())); + case AnyObjectDerivedSchema: + toBeUpdated.setChoices(schemaRestClient.getDerSchemaNames()); break; case UserVirtualSchema: case GroupVirtualSchema: - case MembershipVirtualSchema: - toBeUpdated.setChoices(schemaRestClient.getVirSchemaNames(type.getAttributableType())); + case AnyObjectVirtualSchema: + toBeUpdated.setChoices(schemaRestClient.getVirSchemaNames()); break; - case UserId: + case UserKey: case Password: case Username: - case GroupId: + case GroupKey: case GroupName: + case AnyObjectKey: default: toBeUpdated.setRequired(false); toBeUpdated.setEnabled(false); @@ -594,33 +582,33 @@ public class ResourceMappingPanel extends Panel { } /** - * Enable/Disable accountId checkbox. + * Enable/Disable connObjectKey checkbox. * * @param type attribute type. - * @param accountId accountId checkbox. + * @param connObjectKey connObjectKey checkbox. * @param password password checkbox. */ - private void setAccountId(final IntMappingType type, final AjaxCheckBoxPanel accountId, - final AjaxCheckBoxPanel password) { + private void setConnObjectKey( + final IntMappingType type, final AjaxCheckBoxPanel connObjectKey, final AjaxCheckBoxPanel password) { - if (type != null && type.getAttributableType() != null) { + if (type != null && type.getAnyTypeKind() != null) { switch (type) { case UserVirtualSchema: case GroupVirtualSchema: - case MembershipVirtualSchema: - // Virtual accountId is not permitted + case AnyObjectVirtualSchema: + // Virtual connObjectKey is not permitted case Password: - // AccountId cannot be derived from password. - accountId.setReadOnly(true); - accountId.setModelObject(false); + // connObjectKey cannot be derived from password. + connObjectKey.setReadOnly(true); + connObjectKey.setModelObject(false); break; default: if (password.getModelObject()) { - accountId.setReadOnly(true); - accountId.setModelObject(false); + connObjectKey.setReadOnly(true); + connObjectKey.setModelObject(false); } else { - accountId.setReadOnly(false); + connObjectKey.setReadOnly(false); } } } @@ -632,11 +620,11 @@ public class ResourceMappingPanel extends Panel { * @param entity entity. * @return all attribute types. */ - private List<IntMappingType> getAttributeTypes(final AttributableType entity) { + private List<IntMappingType> getAttributeTypes(final AnyTypeKind entity) { final List<IntMappingType> res = new ArrayList<>(); if (entity != null) { - res.addAll(IntMappingType.getAttributeTypes(AttributableType.valueOf(entity.name()))); + res.addAll(IntMappingType.getAttributeTypes(entity)); } return res;
