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