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 2022/01/13 17:48:07 UTC
[isis] branch master updated: ISIS-2703: secman: convert ten. menu actions to Ten.Manager VM
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 950de6a ISIS-2703: secman: convert ten. menu actions to Ten.Manager VM
950de6a is described below
commit 950de6a35a26618c477a4310523e6d6c368f1063
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 13 18:47:58 2022 +0100
ISIS-2703: secman: convert ten. menu actions to Ten.Manager VM
---
.../modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc | 7 ++
...etForLogicalTypeNameAnnotationFacetFactory.java | 17 +++--
.../src/main/java/demoapp/dom/menubars.layout.xml | 3 +-
.../secman/applib/IsisModuleExtSecmanApplib.java | 9 ++-
.../dom/ApplicationTenancyRepositoryAbstract.java | 2 +-
.../tenancy/man/ApplicationTenancyManager.java | 40 +++++++++++
.../ApplicationTenancyManager.layout.fallback.xml | 61 +++++++++++++++++
.../ApplicationTenancyManager_allTenancies.java | 46 +++++++++++++
.../ApplicationTenancyManager_newTenancy.java | 74 +++++++++++++++++++++
.../tenancy/menu/ApplicationTenancyMenu.java | 70 +++++++------------
.../applib/user/menu/ApplicationUserMenu.java | 40 +++++------
.../resources/images/ApplicationTenancyManager.png | Bin 0 -> 1217 bytes
12 files changed, 290 insertions(+), 79 deletions(-)
diff --git a/antora/components/relnotes/modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc
index b394d18..6f9e01d 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2021/2.0.0-M7/mignotes.adoc
@@ -242,6 +242,9 @@ Following menu actions for roles have been removed:
<!--
<mb3:serviceAction objectType="isis.ext.secman.ApplicationRoleMenu" id="newRole"/>
<mb3:serviceAction objectType="isis.ext.secman.ApplicationRoleMenu" id="allRoles"/>
+
+<mb3:serviceAction objectType="isis.ext.secman.ApplicationRoleMenu" id="newTenancy"/>
+<mb3:serviceAction objectType="isis.ext.secman.ApplicationRoleMenu" id="allTenancies"/>
-->
----
@@ -250,5 +253,9 @@ Use the new Role Manager View Model instead:
[source,xml]
.menubars.layout.xml
----
+<!-- Roles -->
<mb3:serviceAction objectType="isis.ext.secman.ApplicationRoleMenu" id="roleManager"/>
+
+<!-- Tenancies -->
+<mb3:serviceAction objectType="isis.ext.secman.ApplicationTenancyMenu" id="tenancyManager"/>
----
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotationFacetFactory.java
index 598c4f1..3f89291 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotationFacetFactory.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype;
import javax.inject.Inject;
import org.apache.isis.applib.annotation.LogicalTypeName;
+import org.apache.isis.core.metamodel.commons.ClassExtensions;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -44,15 +45,17 @@ extends FacetFactoryAbstract {
val logicalTypeNameIfAny = processClassContext.synthesizeOnType(LogicalTypeName.class);
val cls = processClassContext.getCls();
- if(!cls.isInterface()) {
- return;
- }
+ if(cls.isInterface()
+ || ClassExtensions.isAbstract(cls)) {
+
+ val facetHolder = processClassContext.getFacetHolder();
- val facetHolder = processClassContext.getFacetHolder();
+ FacetUtil.addFacetIfPresent(
+ LogicalTypeFacetForLogicalTypeNameAnnotation
+ .create(logicalTypeNameIfAny, cls, facetHolder));
+
+ }
- FacetUtil.addFacetIfPresent(
- LogicalTypeFacetForLogicalTypeNameAnnotation
- .create(logicalTypeNameIfAny, cls, facetHolder));
}
}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
index 5e9494f..8bdc5c8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
@@ -350,9 +350,8 @@ For latest we use: https://raw.githubusercontent.com/apache/isis/master/antora/s
</mb3:section>
<mb3:section>
<mb3:named>Tenancies</mb3:named>
+ <mb3:serviceAction objectType="isis.ext.secman.ApplicationTenancyMenu" id="tenancyManager"/>
<mb3:serviceAction objectType="isis.ext.secman.ApplicationTenancyMenu" id="findTenancies"/>
- <mb3:serviceAction objectType="isis.ext.secman.ApplicationTenancyMenu" id="newTenancy"/>
- <mb3:serviceAction objectType="isis.ext.secman.ApplicationTenancyMenu" id="allTenancies"/>
</mb3:section>
</mb3:menu>
<mb3:menu>
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
index 50e2426..3ab76dc 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
@@ -52,6 +52,8 @@ import org.apache.isis.extensions.secman.applib.tenancy.dom.mixins.ApplicationTe
import org.apache.isis.extensions.secman.applib.tenancy.dom.mixins.ApplicationTenancy_removeUser;
import org.apache.isis.extensions.secman.applib.tenancy.dom.mixins.ApplicationTenancy_updateName;
import org.apache.isis.extensions.secman.applib.tenancy.dom.mixins.ApplicationTenancy_users;
+import org.apache.isis.extensions.secman.applib.tenancy.man.mixins.ApplicationTenancyManager_allTenancies;
+import org.apache.isis.extensions.secman.applib.tenancy.man.mixins.ApplicationTenancyManager_newTenancy;
import org.apache.isis.extensions.secman.applib.tenancy.menu.ApplicationTenancyMenu;
import org.apache.isis.extensions.secman.applib.user.contributions.HasUsername_open;
import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_addRole;
@@ -103,14 +105,11 @@ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
// -- ViewModels
- // TODO: not sure we need to register view models?
ApplicationUserManager.class,
UserPermissionViewModel.class,
ApplicationOrphanedPermissionManager.class,
// -- Mixins
- // TODO: not sure we need to register mixins?
-
ApplicationOrphanedPermissionManager_relocateSelected.class,
//ApplicationPermission
@@ -176,6 +175,10 @@ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
ApplicationRoleManager_newRole.class,
ApplicationRoleManager_exportAsYaml.class,
+ // ApplicationRoleManager
+ ApplicationTenancyManager_allTenancies.class,
+ ApplicationTenancyManager_newTenancy.class,
+
// other @Services
SeedSecurityModuleService.class,
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepositoryAbstract.java
index 24c9193..b180790 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepositoryAbstract.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/ApplicationTenancyRepositoryAbstract.java
@@ -144,7 +144,7 @@ implements ApplicationTenancyRepository {
// --
@Override
- public Collection<ApplicationTenancy> allTenancies() {
+ public final Collection<ApplicationTenancy> allTenancies() {
return queryResultsCacheProvider.get().execute(
() -> allTenanciesNoCache(),
ApplicationTenancyRepositoryAbstract.class, "allTenancies");
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/ApplicationTenancyManager.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/ApplicationTenancyManager.java
new file mode 100644
index 0000000..7c5eb46
--- /dev/null
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/ApplicationTenancyManager.java
@@ -0,0 +1,40 @@
+/*
+ * 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.applib.tenancy.man;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.ObjectSupport;
+import org.apache.isis.extensions.secman.applib.IsisModuleExtSecmanApplib;
+
+@DomainObject(
+ nature = Nature.VIEW_MODEL,
+ logicalTypeName = ApplicationTenancyManager.LOGICAL_TYPE_NAME
+)
+public class ApplicationTenancyManager {
+
+ public static final String LOGICAL_TYPE_NAME = IsisModuleExtSecmanApplib.NAMESPACE + ".ApplicationTenancyManager";
+
+ @ObjectSupport public String title() {
+ return "Application Tenancy Manager";
+ }
+
+ // behaviour provided by mixins
+
+}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/ApplicationTenancyManager.layout.fallback.xml b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/ApplicationTenancyManager.layout.fallback.xml
new file mode 100644
index 0000000..ea398cd
--- /dev/null
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/ApplicationTenancyManager.layout.fallback.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- 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. -->
+<bs3:grid
+ xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+ xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+ xmlns:cpt="http://isis.apache.org/applib/layout/component"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <bs3:row>
+ <bs3:col span="12" unreferencedActions="true">
+ <cpt:domainObject />
+ </bs3:col>
+ </bs3:row>
+ <bs3:row>
+ <bs3:col span="12">
+ <bs3:tabGroup unreferencedCollections="true">
+ <bs3:tab name="All Tenancies">
+ <bs3:row>
+ <bs3:col span="12" size="MD" />
+ </bs3:row>
+ </bs3:tab>
+ </bs3:tabGroup>
+ </bs3:col>
+ </bs3:row>
+ <bs3:row>
+ <bs3:col span="0">
+ <bs3:tabGroup>
+ <bs3:tab name="Identity">
+ <bs3:row>
+ <bs3:col span="12">
+ <cpt:fieldSet name="Identity" id="identity" />
+ </bs3:col>
+ </bs3:row>
+ </bs3:tab>
+ <bs3:tab name="Other">
+ <bs3:row>
+ <bs3:col span="12">
+ <cpt:fieldSet name="Other" id="other"
+ unreferencedProperties="true" />
+ </bs3:col>
+ </bs3:row>
+ </bs3:tab>
+ <bs3:tab name="Metadata">
+ <bs3:row>
+ <bs3:col span="12">
+ <cpt:fieldSet name="Metadata" id="metadata" />
+ </bs3:col>
+ </bs3:row>
+ </bs3:tab>
+ </bs3:tabGroup>
+ </bs3:col>
+ </bs3:row>
+</bs3:grid>
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/mixins/ApplicationTenancyManager_allTenancies.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/mixins/ApplicationTenancyManager_allTenancies.java
new file mode 100644
index 0000000..93f99e5
--- /dev/null
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/mixins/ApplicationTenancyManager_allTenancies.java
@@ -0,0 +1,46 @@
+/*
+ * 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.applib.tenancy.man.mixins;
+
+import java.util.Collection;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.MemberSupport;
+import org.apache.isis.extensions.secman.applib.tenancy.dom.ApplicationTenancy;
+import org.apache.isis.extensions.secman.applib.tenancy.dom.ApplicationTenancyRepository;
+import org.apache.isis.extensions.secman.applib.tenancy.man.ApplicationTenancyManager;
+
+import lombok.RequiredArgsConstructor;
+
+@org.apache.isis.applib.annotation.Collection
+@RequiredArgsConstructor
+public class ApplicationTenancyManager_allTenancies {
+
+ @SuppressWarnings("unused")
+ private final ApplicationTenancyManager target;
+
+ @Inject
+ private ApplicationTenancyRepository applicationTenancyRepository;
+
+ @MemberSupport public Collection<ApplicationTenancy> coll() {
+ return applicationTenancyRepository.allTenancies();
+ }
+
+}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/mixins/ApplicationTenancyManager_newTenancy.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/mixins/ApplicationTenancyManager_newTenancy.java
new file mode 100644
index 0000000..c5a23ff
--- /dev/null
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/man/mixins/ApplicationTenancyManager_newTenancy.java
@@ -0,0 +1,74 @@
+/*
+ * 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.applib.tenancy.man.mixins;
+
+import java.util.Collection;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Parameter;
+import org.apache.isis.applib.annotation.ParameterLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.extensions.secman.applib.tenancy.dom.ApplicationTenancy;
+import org.apache.isis.extensions.secman.applib.tenancy.dom.ApplicationTenancyRepository;
+import org.apache.isis.extensions.secman.applib.tenancy.man.ApplicationTenancyManager;
+import org.apache.isis.extensions.secman.applib.user.man.mixins.ApplicationUserManager_newLocalUser.DomainEvent;
+
+import lombok.RequiredArgsConstructor;
+
+
+@Action(
+ domainEvent = DomainEvent.class,
+ semantics = SemanticsOf.IDEMPOTENT
+)
+@ActionLayout(
+ associateWith = "allTenancies",
+ sequence = "1"
+)
+@RequiredArgsConstructor
+public class ApplicationTenancyManager_newTenancy {
+
+ private final ApplicationTenancyManager target;
+
+ @Inject
+ private ApplicationTenancyRepository applicationTenancyRepository;
+
+ @MemberSupport public ApplicationTenancyManager act(
+ @Parameter(maxLength = ApplicationTenancy.Name.MAX_LENGTH)
+ @ParameterLayout(named = "Name", typicalLength = ApplicationTenancy.Name.TYPICAL_LENGTH)
+ final String name,
+ @Parameter(maxLength = ApplicationTenancy.Path.MAX_LENGTH)
+ @ParameterLayout(named = "Path")
+ final String path,
+ @Parameter(optionality = Optionality.OPTIONAL)
+ @ParameterLayout(named = "Parent")
+ final ApplicationTenancy parent) {
+ applicationTenancyRepository.newTenancy(name, path, parent);
+ return target;
+ }
+
+ @MemberSupport public Collection<ApplicationTenancy> choicesParent() {
+ return applicationTenancyRepository.allTenancies();
+ }
+
+}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/menu/ApplicationTenancyMenu.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/menu/ApplicationTenancyMenu.java
index 9b68ce2..81bf932 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/menu/ApplicationTenancyMenu.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/menu/ApplicationTenancyMenu.java
@@ -35,9 +35,11 @@ import org.apache.isis.applib.annotation.Parameter;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.extensions.secman.applib.IsisModuleExtSecmanApplib;
import org.apache.isis.extensions.secman.applib.tenancy.dom.ApplicationTenancy;
import org.apache.isis.extensions.secman.applib.tenancy.dom.ApplicationTenancyRepository;
+import org.apache.isis.extensions.secman.applib.tenancy.man.ApplicationTenancyManager;
@DomainService(
nature = NatureOfService.VIEW,
@@ -55,6 +57,7 @@ public class ApplicationTenancyMenu {
public static abstract class ActionDomainEvent<T> extends IsisModuleExtSecmanApplib.ActionDomainEvent<T> {}
@Inject private ApplicationTenancyRepository applicationTenancyRepository;
+ @Inject private FactoryService factory;
@ObjectSupport
@@ -62,13 +65,33 @@ public class ApplicationTenancyMenu {
return "applicationTenancy";
}
+ // -- TENANCY MANAGER
+ @Action(
+ domainEvent = tenancyManager.ActionEvent.class,
+ semantics = SemanticsOf.IDEMPOTENT
+ )
+ @ActionLayout(
+ sequence = "100.30.1",
+ cssClassFa = "globe"
+ )
+ public class tenancyManager{
+
+ public class ActionEvent extends ActionDomainEvent<tenancyManager> { }
+
+ @MemberSupport public ApplicationTenancyManager act(){
+ return factory.viewModel(new ApplicationTenancyManager());
+ }
+
+ }
+
+ // -- FIND TENANCIES
@Action(
domainEvent = findTenancies.ActionEvent.class,
semantics = SemanticsOf.SAFE
)
- @ActionLayout(sequence = "100.30.1")
+ @ActionLayout(sequence = "100.30.2")
public class findTenancies{
public class ActionEvent extends ActionDomainEvent<findTenancies> {}
@@ -82,49 +105,4 @@ public class ApplicationTenancyMenu {
}
}
-
-
- @Action(
- domainEvent = newTenancy.ActionEvent.class,
- semantics = SemanticsOf.IDEMPOTENT
- )
- @ActionLayout(sequence = "100.30.3")
- public class newTenancy{
-
- public class ActionEvent extends ActionDomainEvent<newTenancy> {}
-
- @MemberSupport public ApplicationTenancy act(
- @Parameter(maxLength = ApplicationTenancy.Name.MAX_LENGTH)
- @ParameterLayout(named = "Name", typicalLength = ApplicationTenancy.Name.TYPICAL_LENGTH)
- final String name,
- @Parameter(maxLength = ApplicationTenancy.Path.MAX_LENGTH)
- @ParameterLayout(named = "Path")
- final String path,
- @Parameter(optionality = Optionality.OPTIONAL)
- @ParameterLayout(named = "Parent")
- final ApplicationTenancy parent) {
- return applicationTenancyRepository.newTenancy(name, path, parent);
- }
-
- //FIXME[ISIS-2703] when not provided, MM validation should fail, but yet does not
- @MemberSupport public Collection<ApplicationTenancy> choicesParent() {
- return applicationTenancyRepository.allTenancies();
- }
-
- }
-
-
- @Action(
- domainEvent = allTenancies.ActionEvent.class,
- semantics = SemanticsOf.SAFE)
- @ActionLayout(sequence = "100.30.4")
- public class allTenancies{
-
- public class ActionEvent extends ActionDomainEvent<allTenancies> {}
-
- @MemberSupport public Collection<? extends ApplicationTenancy> act() {
- return applicationTenancyRepository.allTenancies();
- }
- }
-
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/menu/ApplicationUserMenu.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/menu/ApplicationUserMenu.java
index b444dd9..c008fd4 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/menu/ApplicationUserMenu.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/menu/ApplicationUserMenu.java
@@ -65,25 +65,6 @@ public class ApplicationUserMenu {
return "applicationUser";
}
- // -- FIND USERS
-
- @Action(
- domainEvent = findUsers.ActionEvent.class,
- semantics = SemanticsOf.SAFE
- )
- @ActionLayout(sequence = "100.10.2")
- public class findUsers{
-
- public class ActionEvent
- extends ActionDomainEvent<findUsers> { }
-
- @MemberSupport public Collection<? extends ApplicationUser> act(
- final @ParameterLayout(named = "Search") String search) {
- return applicationUserRepository.find(search);
- }
-
- }
-
// -- USER MANAGER
@Action(
@@ -91,7 +72,7 @@ public class ApplicationUserMenu {
semantics = SemanticsOf.IDEMPOTENT
)
@ActionLayout(
- sequence = "100.10.3",
+ sequence = "100.10.1",
cssClassFa = "user-plus"
)
public class userManager{
@@ -104,4 +85,23 @@ public class ApplicationUserMenu {
}
+ // -- FIND USERS
+
+ @Action(
+ domainEvent = findUsers.ActionEvent.class,
+ semantics = SemanticsOf.SAFE
+ )
+ @ActionLayout(sequence = "100.10.2")
+ public class findUsers{
+
+ public class ActionEvent
+ extends ActionDomainEvent<findUsers> { }
+
+ @MemberSupport public Collection<? extends ApplicationUser> act(
+ final @ParameterLayout(named = "Search") String search) {
+ return applicationUserRepository.find(search);
+ }
+
+ }
+
}
diff --git a/extensions/security/secman/integration/src/main/resources/images/ApplicationTenancyManager.png b/extensions/security/secman/integration/src/main/resources/images/ApplicationTenancyManager.png
new file mode 100644
index 0000000..eda74bf
Binary files /dev/null and b/extensions/security/secman/integration/src/main/resources/images/ApplicationTenancyManager.png differ