You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/04/07 10:40:36 UTC
[1/2] syncope git commit: [SYNCOPE-819] Delete confirmation now works
everywhere
Repository: syncope
Updated Branches:
refs/heads/master 7300ccdf3 -> 0016d10c9
[SYNCOPE-819] Delete confirmation now works everywhere
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/27dae836
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/27dae836
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/27dae836
Branch: refs/heads/master
Commit: 27dae836f910977a640d9a1506dc0971dc1cb745
Parents: 7300ccd
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 7 10:08:03 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 7 10:08:03 2016 +0200
----------------------------------------------------------------------
.../console/topology/TopologyTogglePanel.java | 50 ++++++--------
.../confirmation/ConfirmationModalBehavior.java | 70 --------------------
.../html/form/IndicatingOnConfirmAjaxLink.java | 37 ++++++++++-
.../syncope/client/console/pages/BasePage.html | 4 ++
4 files changed, 60 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/27dae836/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index 30df39b..22ec34b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -33,8 +33,8 @@ import org.apache.syncope.client.console.tasks.PropagationTasks;
import org.apache.syncope.client.console.tasks.PushTasks;
import org.apache.syncope.client.console.tasks.SchedTasks;
import org.apache.syncope.client.console.tasks.PullTasks;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.confirmation.ConfirmationModalBehavior;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.IndicatingOnConfirmAjaxLink;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.ConnInstanceTO;
import org.apache.syncope.common.lib.to.ResourceTO;
@@ -173,9 +173,9 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
}
private Fragment getConnectorFragment(final TopologyNode node, final PageReference pageRef) {
- final Fragment fragment = new Fragment("actions", "connectorActions", this);
+ Fragment fragment = new Fragment("actions", "connectorActions", this);
- final AjaxLink<String> delete = new IndicatingAjaxLink<String>("delete") {
+ AjaxLink<String> delete = new IndicatingOnConfirmAjaxLink<String>("delete", true) {
private static final long serialVersionUID = 3776750333491622263L;
@@ -186,19 +186,16 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
target.appendJavaScript(String.format("jsPlumb.remove('%s');", node.getKey()));
info(getString(Constants.OPERATION_SUCCEEDED));
} catch (SyncopeClientException e) {
- error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
LOG.error("While deleting resource {}", node.getKey(), e);
+ error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
}
SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
}
};
-
- fragment.add(delete);
- delete.add(new ConfirmationModalBehavior());
-
MetaDataRoleAuthorizationStrategy.authorize(delete, ENABLE, StandardEntitlement.CONNECTOR_DELETE);
+ fragment.add(delete);
- final AjaxLink<String> create = new IndicatingAjaxLink<String>("create") {
+ AjaxLink<String> create = new IndicatingAjaxLink<String>("create") {
private static final long serialVersionUID = 3776750333491622263L;
@@ -221,11 +218,10 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
resourceModal.show(true);
}
};
- fragment.add(create);
-
MetaDataRoleAuthorizationStrategy.authorize(create, ENABLE, StandardEntitlement.RESOURCE_CREATE);
+ fragment.add(create);
- final AjaxLink<String> edit = new IndicatingAjaxLink<String>("edit") {
+ AjaxLink<String> edit = new IndicatingAjaxLink<String>("edit") {
private static final long serialVersionUID = 3776750333491622263L;
@@ -246,17 +242,16 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
resourceModal.show(true);
}
};
- fragment.add(edit);
-
MetaDataRoleAuthorizationStrategy.authorize(edit, ENABLE, StandardEntitlement.CONNECTOR_UPDATE);
+ fragment.add(edit);
return fragment;
}
private Fragment getResurceFragment(final TopologyNode node, final PageReference pageRef) {
- final Fragment fragment = new Fragment("actions", "resourceActions", this);
+ Fragment fragment = new Fragment("actions", "resourceActions", this);
- final AjaxLink<String> delete = new IndicatingAjaxLink<String>("delete") {
+ AjaxLink<String> delete = new IndicatingOnConfirmAjaxLink<String>("delete", true) {
private static final long serialVersionUID = 3776750333491622263L;
@@ -267,19 +262,16 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
target.appendJavaScript(String.format("jsPlumb.remove('%s');", node.getKey()));
info(getString(Constants.OPERATION_SUCCEEDED));
} catch (SyncopeClientException e) {
- error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
LOG.error("While deleting resource {}", node.getKey(), e);
+ error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
}
SyncopeConsoleSession.get().getNotificationPanel().refresh(target);
}
};
- fragment.add(delete);
-
- delete.add(new ConfirmationModalBehavior());
-
MetaDataRoleAuthorizationStrategy.authorize(delete, ENABLE, StandardEntitlement.RESOURCE_DELETE);
+ fragment.add(delete);
- final AjaxLink<String> edit = new IndicatingAjaxLink<String>("edit") {
+ AjaxLink<String> edit = new IndicatingAjaxLink<String>("edit") {
private static final long serialVersionUID = 3776750333491622263L;
@@ -300,10 +292,10 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
resourceModal.show(true);
}
};
- fragment.add(edit);
MetaDataRoleAuthorizationStrategy.authorize(edit, ENABLE, StandardEntitlement.RESOURCE_UPDATE);
+ fragment.add(edit);
- final AjaxLink<String> propagation = new IndicatingAjaxLink<String>("propagation") {
+ AjaxLink<String> propagation = new IndicatingAjaxLink<String>("propagation") {
private static final long serialVersionUID = 3776750333491622263L;
@@ -315,10 +307,10 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
taskModal.show(true);
}
};
- fragment.add(propagation);
MetaDataRoleAuthorizationStrategy.authorize(propagation, ENABLE, StandardEntitlement.TASK_LIST);
+ fragment.add(propagation);
- final AjaxLink<String> pull = new IndicatingAjaxLink<String>("pull") {
+ AjaxLink<String> pull = new IndicatingAjaxLink<String>("pull") {
private static final long serialVersionUID = 3776750333491622263L;
@@ -329,10 +321,10 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
taskModal.show(true);
}
};
- fragment.add(pull);
MetaDataRoleAuthorizationStrategy.authorize(pull, ENABLE, StandardEntitlement.TASK_LIST);
+ fragment.add(pull);
- final AjaxLink<String> push = new IndicatingAjaxLink<String>("push") {
+ AjaxLink<String> push = new IndicatingAjaxLink<String>("push") {
private static final long serialVersionUID = 3776750333491622263L;
@@ -343,8 +335,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
taskModal.show(true);
}
};
- fragment.add(push);
MetaDataRoleAuthorizationStrategy.authorize(push, ENABLE, StandardEntitlement.TASK_LIST);
+ fragment.add(push);
return fragment;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/27dae836/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/confirmation/ConfirmationModalBehavior.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/confirmation/ConfirmationModalBehavior.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/confirmation/ConfirmationModalBehavior.java
deleted file mode 100644
index 7996766..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/confirmation/ConfirmationModalBehavior.java
+++ /dev/null
@@ -1,70 +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.wicket.markup.html.bootstrap.confirmation;
-
-import static de.agilecoders.wicket.jquery.JQuery.$;
-
-import de.agilecoders.wicket.jquery.function.JavaScriptInlineFunction;
-import org.apache.wicket.Component;
-import org.apache.wicket.behavior.Behavior;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.model.ResourceModel;
-
-/**
- * A behavior that shows a modal with OK/Cancel buttons to confirm an action.
- *
- */
-public class ConfirmationModalBehavior extends Behavior {
-
- private static final long serialVersionUID = 1741536820040325586L;
-
- private final String message;
-
- public ConfirmationModalBehavior() {
- this("confirmDelete");
- }
-
- public ConfirmationModalBehavior(final String msg) {
- message = new ResourceModel(msg, "Are you sure?").getObject();
- }
-
- @Override
- public void renderHead(final Component component, final IHeaderResponse response) {
- super.renderHead(component, response);
-
- response.render(JavaScriptHeaderItem.forScript("var confirm = false;", null));
- response.render($(component).on("click",
- new JavaScriptInlineFunction(""
- + "var element = $(this);"
- + "evt.preventDefault();"
- + "if(confirm == false){"
- + "evt.stopImmediatePropagation();"
- + "bootbox.confirm(\"" + message + "\", function(result){"
- + "if(result == true){"
- + "confirm = true;"
- + "element.click();"
- + "}"
- + "else{confirm = false;}"
- + "return true;"
- + "})} "
- + "else {confirm = false;};"
- )).asDomReadyScript());
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/27dae836/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/IndicatingOnConfirmAjaxLink.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/IndicatingOnConfirmAjaxLink.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/IndicatingOnConfirmAjaxLink.java
index 98b3541..53ab39c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/IndicatingOnConfirmAjaxLink.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/IndicatingOnConfirmAjaxLink.java
@@ -18,8 +18,13 @@
*/
package org.apache.syncope.client.console.wicket.markup.html.form;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.confirmation.ConfirmationModalBehavior;
+import static de.agilecoders.wicket.jquery.JQuery.$;
+
+import de.agilecoders.wicket.jquery.function.JavaScriptInlineFunction;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.model.ResourceModel;
public abstract class IndicatingOnConfirmAjaxLink<T> extends IndicatingAjaxLink<T> {
@@ -27,6 +32,8 @@ public abstract class IndicatingOnConfirmAjaxLink<T> extends IndicatingAjaxLink<
private final String msg;
+ private final boolean enabled;
+
public IndicatingOnConfirmAjaxLink(final String id, final boolean enabled) {
this(id, "confirmDelete", enabled);
}
@@ -34,8 +41,34 @@ public abstract class IndicatingOnConfirmAjaxLink<T> extends IndicatingAjaxLink<
public IndicatingOnConfirmAjaxLink(final String id, final String msg, final boolean enabled) {
super(id);
this.msg = msg;
+ this.enabled = enabled;
+ }
+
+ @Override
+ public void renderHead(final IHeaderResponse response) {
+ super.renderHead(response);
+
if (enabled) {
- this.add(new ConfirmationModalBehavior(msg));
+ response.render(JavaScriptHeaderItem.forScript("proceed = false;", null));
+ response.render($(this).on("click",
+ new JavaScriptInlineFunction(""
+ + "var element = $(this);"
+ + "evt.preventDefault();"
+ + "if (proceed == false) {"
+ + " evt.stopImmediatePropagation();"
+ + " bootbox.confirm('" + new ResourceModel(msg).getObject() + "', function(result) {"
+ + " if (result == true) {"
+ + " proceed = true;"
+ + " element.click();"
+ + " } else {"
+ + " proceed = false;"
+ + " }"
+ + " return true;"
+ + " })"
+ + "} else {"
+ + " proceed = false;"
+ + "};"
+ )).asDomReadyScript());
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/27dae836/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
index c05cd68..39ab5ca 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
@@ -34,6 +34,10 @@ under the License.
<script type="text/javascript" src="webjars/bootbox/${bootbox.version}/bootbox.js"></script>
<script type="text/javascript" src="webjars/jQuery-slimScroll/${jquery-slimscroll.version}/jquery.slimscroll.min.js"></script>
+ <script type="text/javascript">
+ // global variable for IndicatingOnConfirmAjaxLink
+ var proceed = false;
+ </script>
</head>
<body class="skin-green-light hold-transition sidebar-mini" wicket:id="body">
[2/2] syncope git commit: Enhancing checks when deleting a realm
containig users, groups or any objects
Posted by il...@apache.org.
Enhancing checks when deleting a realm containig users, groups or any objects
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/0016d10c
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/0016d10c
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/0016d10c
Branch: refs/heads/master
Commit: 0016d10c90659102986d9eb0405c56d6f1ee32f9
Parents: 27dae83
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 7 10:40:17 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 7 10:40:17 2016 +0200
----------------------------------------------------------------------
.../common/lib/types/ClientExceptionType.java | 1 +
.../syncope/core/logic/ConnectorLogic.java | 20 +++++++-------
.../apache/syncope/core/logic/RealmLogic.java | 28 ++++++++++++++++++++
.../apache/syncope/fit/core/RealmITCase.java | 11 ++++++++
4 files changed, 49 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/0016d10c/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
index bceff27..951a4ca 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java
@@ -22,6 +22,7 @@ import javax.ws.rs.core.Response;
public enum ClientExceptionType {
+ AssociatedAnys(Response.Status.BAD_REQUEST),
AssociatedResources(Response.Status.BAD_REQUEST),
Composite(Response.Status.BAD_REQUEST),
ConcurrentModification(Response.Status.PRECONDITION_FAILED),
http://git-wip-us.apache.org/repos/asf/syncope/blob/0016d10c/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index 1d8f705..0546f8f 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -108,10 +108,10 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
}
@PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_DELETE + "')")
- public ConnInstanceTO delete(final Long connInstanceKey) {
- ConnInstance connInstance = connInstanceDAO.find(connInstanceKey);
+ public ConnInstanceTO delete(final Long key) {
+ ConnInstance connInstance = connInstanceDAO.find(key);
if (connInstance == null) {
- throw new NotFoundException("Connector '" + connInstanceKey + "'");
+ throw new NotFoundException("Connector '" + key + "'");
}
if (!connInstance.getResources().isEmpty()) {
@@ -123,11 +123,9 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
throw associatedResources;
}
- ConnInstanceTO connToDelete = binder.getConnInstanceTO(connInstance);
-
- connInstanceDAO.delete(connInstanceKey);
-
- return connToDelete;
+ ConnInstanceTO deleted = binder.getConnInstanceTO(connInstance);
+ connInstanceDAO.delete(key);
+ return deleted;
}
@PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_LIST + "')")
@@ -157,12 +155,12 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
@PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_READ + "')")
@Transactional(readOnly = true)
- public ConnInstanceTO read(final Long connInstanceKey, final String lang) {
+ public ConnInstanceTO read(final Long key, final String lang) {
CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : new Locale(lang));
- ConnInstance connInstance = connInstanceDAO.find(connInstanceKey);
+ ConnInstance connInstance = connInstanceDAO.find(key);
if (connInstance == null) {
- throw new NotFoundException("Connector '" + connInstanceKey + "'");
+ throw new NotFoundException("Connector '" + key + "'");
}
return binder.getConnInstanceTO(connInstance);
http://git-wip-us.apache.org/repos/asf/syncope/blob/0016d10c/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index 0b27a0f..c9822a5 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -20,14 +20,23 @@ package org.apache.syncope.core.logic;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import java.util.Set;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.ArrayUtils;
+import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.RealmTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.dao.RealmDAO;
+import org.apache.syncope.core.persistence.api.dao.search.AnyCond;
+import org.apache.syncope.core.persistence.api.dao.search.AttributeCond;
+import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.provisioning.api.data.RealmDataBinder;
import org.springframework.beans.factory.annotation.Autowired;
@@ -41,6 +50,9 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
private RealmDAO realmDAO;
@Autowired
+ private AnySearchDAO searchDAO;
+
+ @Autowired
private RealmDataBinder binder;
@PreAuthorize("hasRole('" + StandardEntitlement.REALM_LIST + "')")
@@ -90,6 +102,22 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
throw new NotFoundException(fullPath);
}
+ Set<String> adminRealms = Collections.singleton(realm.getFullPath());
+ AnyCond idCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
+ idCond.setSchema("id");
+ SearchCond allMatchingCond = SearchCond.getLeafCond(idCond);
+ int users = searchDAO.count(adminRealms, allMatchingCond, AnyTypeKind.USER);
+ int groups = searchDAO.count(adminRealms, allMatchingCond, AnyTypeKind.GROUP);
+ int anyObjects = searchDAO.count(adminRealms, allMatchingCond, AnyTypeKind.ANY_OBJECT);
+
+ if (users + groups + anyObjects > 0) {
+ SyncopeClientException containedAnys = SyncopeClientException.build(ClientExceptionType.AssociatedAnys);
+ containedAnys.getElements().add(users + " user(s)");
+ containedAnys.getElements().add(groups + " group(s)");
+ containedAnys.getElements().add(anyObjects + " anyObject(s)");
+ throw containedAnys;
+ }
+
RealmTO deleted = binder.getRealmTO(realm);
realmDAO.delete(realm);
return deleted;
http://git-wip-us.apache.org/repos/asf/syncope/blob/0016d10c/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
index c2b27df..4d3360f 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
@@ -185,4 +185,15 @@ public class RealmITCase extends AbstractITCase {
assertEquals(ClientExceptionType.NotFound, e.getType());
}
}
+
+ @Test
+ public void deleteNonEmpty() {
+ try {
+ realmService.delete("/even/two");
+ fail();
+ } catch (SyncopeClientException e) {
+ assertEquals(ClientExceptionType.AssociatedAnys, e.getType());
+ assertEquals(3, e.getElements().size());
+ }
+ }
}