You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/01/29 11:09:47 UTC
[isis] branch master updated: ISIS-2509: SecMan: add multi select
action to relocate orphaned CLASSes to new namespace
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new d798eaa ISIS-2509: SecMan: add multi select action to relocate orphaned CLASSes to new namespace
d798eaa is described below
commit d798eaa736ec13c6a83f8aa17e87bc690f9de078
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jan 29 12:09:32 2021 +0100
ISIS-2509: SecMan: add multi select action to relocate orphaned CLASSes
to new namespace
---
.../services/appfeat/ApplicationFeatureId.java | 12 ++++
.../api/permission/ApplicationPermission.java | 3 +
.../ApplicationOrphanedPermissionManager.java | 47 +++++++++++++
...OrphanedPermissionManager_relocateSelected.java | 77 +++++++++++++++++++++
.../dom/permission/ApplicationPermissionMenu.java | 6 +-
.../ApplicationOrphanedPermissionManager.png | Bin 0 -> 1082 bytes
6 files changed, 143 insertions(+), 2 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
index 3c8ba8d..45e12fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
@@ -42,6 +42,8 @@ import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import lombok.NonNull;
+
/**
* Value type representing a package, class or member.
* <p>
@@ -482,6 +484,16 @@ implements
return toString.toString(this);
}
+ // -- WITHERS
+
+ /**
+ * Returns a new instance that is a clone of this, except for the namespace which is taken from the argument.
+ * @param namespace
+ */
+ public ApplicationFeatureId withNamespace(final @NonNull String namespace) {
+ return newFeature(namespace, this.getTypeSimpleName(), this.getMemberName());
+ }
+
}
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
index 0856bc5..d95ed38 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
@@ -71,6 +71,8 @@ public interface ApplicationPermission {
public static class ChangingDomainEvent extends ActionDomainEvent {}
public static class ViewingDomainEvent extends ActionDomainEvent {}
+ public static class RelocateNamespaceDomainEvent extends ActionDomainEvent {}
+
// -- MODEL
/**
@@ -114,6 +116,7 @@ public interface ApplicationPermission {
ApplicationFeatureType getFeatureType();
String getFeatureFqn();
+ void setFeatureFqn(String featureFqn);
ApplicationPermissionRule getRule();
void setRule(ApplicationPermissionRule rule);
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager.java
new file mode 100644
index 0000000..1b5e23a
--- /dev/null
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.extensions.secman.model.dom.permission;
+
+import java.util.Collection;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
+import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
+
+@DomainObject(
+ nature = Nature.VIEW_MODEL,
+ objectType = "isis.ext.secman.ApplicationOrphanedPermissionManager"
+ )
+public class ApplicationOrphanedPermissionManager {
+
+ @Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
+
+ public String title() {
+ return "Manage Orphaned Permissions";
+ }
+
+ @org.apache.isis.applib.annotation.Collection
+ public Collection<? extends ApplicationPermission> getOrphanedPermissions() {
+ return applicationPermissionRepository.findOrphaned();
+ }
+
+}
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager_relocateSelected.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager_relocateSelected.java
new file mode 100644
index 0000000..6148dc0
--- /dev/null
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationOrphanedPermissionManager_relocateSelected.java
@@ -0,0 +1,77 @@
+/*
+ * 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.isis.extensions.secman.model.dom.permission;
+
+import java.util.Collection;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Parameter;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
+import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
+import org.apache.isis.extensions.secman.api.permission.ApplicationPermission.RelocateNamespaceDomainEvent;
+
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+
+@Action(
+ associateWith = "orphanedPermissions",
+ domainEvent = RelocateNamespaceDomainEvent.class,
+ semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)
+@RequiredArgsConstructor
+public class ApplicationOrphanedPermissionManager_relocateSelected {
+
+ @Inject private ApplicationFeatureRepositoryDefault applicationFeatureRepository;
+
+ private final ApplicationOrphanedPermissionManager holder;
+
+ public ApplicationOrphanedPermissionManager act(
+ final Collection<? extends ApplicationPermission> permissions,
+
+ @Parameter(optionality = Optionality.MANDATORY)
+ final String targetNamespace) {
+
+ permissions.forEach(perm->relocate(perm, targetNamespace));
+ return holder;
+ }
+
+ public Collection<String> choices1Act() {
+ return applicationFeatureRepository.packageNames();
+ }
+
+ private void relocate(
+ final ApplicationPermission permission,
+ final String targetNamespace) {
+
+ val appFeatureId = ApplicationFeatureId.newFeature(
+ permission.getFeatureType(),
+ permission.getFeatureFqn());
+
+ val relocatedFqn = appFeatureId
+ .withNamespace(targetNamespace)
+ .getFullyQualifiedName();
+
+ permission.setFeatureFqn(relocatedFqn);
+ }
+
+}
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationPermissionMenu.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationPermissionMenu.java
index b5a7fb6..e5a3297 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationPermissionMenu.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/permission/ApplicationPermissionMenu.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.RestrictTo;
import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermission;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
@@ -49,6 +50,7 @@ public class ApplicationPermissionMenu {
public static abstract class ActionDomainEvent extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationPermissionMenu> {}
@Inject private ApplicationPermissionRepository<? extends ApplicationPermission> applicationPermissionRepository;
+ @Inject private FactoryService factoryService;
// -- iconName
public String iconName() {
@@ -64,8 +66,8 @@ public class ApplicationPermissionMenu {
semantics = SemanticsOf.SAFE
)
@MemberOrder(sequence = "100.50.1")
- public Collection<? extends ApplicationPermission> findOrphanedPermissions() {
- return applicationPermissionRepository.findOrphaned();
+ public ApplicationOrphanedPermissionManager findOrphanedPermissions() {
+ return factoryService.viewModel(new ApplicationOrphanedPermissionManager());
}
diff --git a/extensions/security/secman/model/src/main/resources/images/ApplicationOrphanedPermissionManager.png b/extensions/security/secman/model/src/main/resources/images/ApplicationOrphanedPermissionManager.png
new file mode 100644
index 0000000..76a6ea2
Binary files /dev/null and b/extensions/security/secman/model/src/main/resources/images/ApplicationOrphanedPermissionManager.png differ