You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/06/02 05:37:55 UTC
[isis] 02/02: ISIS-2712: metamodel XML downloads now filter on
namespace rather than package
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-2712
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 159448d661bbbb3a0068ec56dbe39f3de5fd044b
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 2 06:36:24 2021 +0100
ISIS-2712: metamodel XML downloads now filter on namespace rather than package
---
.../metamodel/Object_downloadMetamodelXml.java | 15 ++++++++---
.../isis/applib/services/metamodel/Config.java | 30 +++++++++-------------
.../applib/services/metamodel/DomainMember.java | 1 +
.../services/metamodel/MetaModelService.java | 2 +-
.../services/metamodel/MetaModelServiceMenu.java | 18 ++++++-------
.../metamodel/MetaModelService_Config_Test.java | 18 ++++++-------
.../metamodel/inspect/Object_inspectMetamodel.java | 17 +++++++++---
.../services/metamodel/DomainMemberDefault.java | 5 ++++
.../services/metamodel/MetaModelExporter.java | 27 ++++++++++---------
.../metamodel/MetaModelServiceDefault.java | 3 +--
10 files changed, 76 insertions(+), 60 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
index 1d6da64..e556dc3 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java
@@ -19,6 +19,7 @@
package org.apache.isis.applib.mixins.metamodel;
import java.util.Objects;
+import java.util.Optional;
import javax.inject.Inject;
@@ -29,9 +30,11 @@ import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.Publishing;
import org.apache.isis.applib.annotation.RestrictTo;
import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.id.LogicalType;
import org.apache.isis.applib.mixins.dto.DtoMixinConstants;
import org.apache.isis.applib.mixins.layout.LayoutMixinConstants;
import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.applib.services.message.MessageService;
import org.apache.isis.applib.services.metamodel.Config;
import org.apache.isis.applib.services.metamodel.MetaModelService;
import org.apache.isis.applib.services.metamodel.MetaModelServiceMenu;
@@ -75,7 +78,13 @@ public class Object_downloadMetamodelXml {
describedAs = DtoMixinConstants.FILENAME_PROPERTY_DESCRIPTION)
final String fileName) {
- val pkg = holder.getClass().getPackage().getName();
+
+ final Optional<LogicalType> logicalTypeIfAny = metaModelService.lookupLogicalTypeByClass(holder.getClass());
+ if(!logicalTypeIfAny.isPresent()) {
+ messageService.warnUser("Unknown class, unable to export");
+ return null;
+ }
+ final String namespace = logicalTypeIfAny.get().getNamespace();
val config =
new Config()
@@ -83,7 +92,7 @@ public class Object_downloadMetamodelXml {
.withIgnoreAbstractClasses()
.withIgnoreInterfaces()
.withIgnoreBuiltInValueTypes()
- .withPackagePrefix(pkg);
+ .withNamespacePrefix(namespace);
val metamodelDto = metaModelService.exportMetaModel(config);
@@ -108,8 +117,8 @@ public class Object_downloadMetamodelXml {
@Inject MetaModelService metaModelService;
+ @Inject MessageService messageService;
@Inject JaxbService jaxbService;
- @Inject MetaModelServiceMenu metaModelServiceMenu;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/Config.java b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/Config.java
index b6e7c0c..75528c0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/Config.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/Config.java
@@ -44,19 +44,19 @@ public class Config {
private final int mask;
- private final Set<String> packagePrefixes = _Sets.newHashSet();
+ private final Set<String> namespacePrefixes = _Sets.newHashSet();
public Config() {
this(0, Collections.emptyList());
}
- private Config(final int mask, final Collection<String> packagePrefixes) {
+ private Config(final int mask, final Collection<String> namespacePrefixes) {
this.mask = mask;
- this.packagePrefixes.addAll(packagePrefixes);
+ this.namespacePrefixes.addAll(namespacePrefixes);
}
- public Set<String> getPackagePrefixes() {
- return Collections.unmodifiableSet(packagePrefixes);
+ public Set<String> getNamespacePrefixes() {
+ return Collections.unmodifiableSet(namespacePrefixes);
}
public Config withIgnoreNoop() {
@@ -80,28 +80,22 @@ public class Config {
}
private Config newConfigWith(final int x) {
- return new Config(mask | x, packagePrefixes);
+ return new Config(mask | x, namespacePrefixes);
}
- public Config withPackagePrefixAny() {
- val newPrefixes = _Sets.<String>newHashSet();
- newPrefixes.add(WILDCARD);
- return new Config(mask, newPrefixes);
- }
-
- public boolean isPackagePrefixAny() {
- return packagePrefixes.contains(WILDCARD);
+ public boolean isNamespacePrefixAny() {
+ return namespacePrefixes.contains(WILDCARD);
}
/**
* Returns a new {@code Config} with given {@code packagePrefix} added to the set of
* this {@code Config}'s packagePrefixes.
*
- * @param packagePrefix - prefix to be added
+ * @param namespacePrefix - prefix to be added
*/
- public Config withPackagePrefix(final String packagePrefix) {
- val newPrefixes = _Sets.newHashSet(this.packagePrefixes);
- newPrefixes.add(packagePrefix);
+ public Config withNamespacePrefix(final String namespacePrefix) {
+ val newPrefixes = _Sets.newHashSet(this.namespacePrefixes);
+ newPrefixes.add(namespacePrefix);
return new Config(mask, newPrefixes);
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/DomainMember.java b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/DomainMember.java
index 2738114..bd1c938 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/DomainMember.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/DomainMember.java
@@ -27,6 +27,7 @@ public interface DomainMember extends Comparable<DomainMember> {
String getClassType();
String getLogicalTypeName();
+ String getNamespace();
String getClassName();
String getPackageName();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
index 1cf783b..bf60e83 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
@@ -128,7 +128,7 @@ public interface MetaModelService {
* <p>
* The {@link Config} parameter can be used to restrict/filter the
* export to some subset of the metamodel; in particular to specific
- * {@link Config#getPackagePrefixes() package prefixes}.
+ * {@link Config#getNamespacePrefixes() namespace prefixes}.
* </p>
*
* @param config - restricts/filters to a subsets of the metamodel.
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
index 63e81e7..3c8b597 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
@@ -122,8 +122,8 @@ public class MetaModelServiceMenu {
@ParameterLayout(named = ".xml file name")
final String fileName,
@ParameterLayout(named = "Packages",
- describedAs="Subset of the complete meta model, only including packages starting with given prefix.")
- final List<String> packages,
+ describedAs="Subset of the complete meta model, only including namespaces starting with given prefix")
+ final List<String> namespaces,
@ParameterLayout(named = "Ignore Interfaces")
@Parameter(optionality=Optionality.MANDATORY)
final boolean ignoreInterfaces
@@ -135,8 +135,8 @@ public class MetaModelServiceMenu {
.withIgnoreAbstractClasses()
.withIgnoreInterfaces()
.withIgnoreBuiltInValueTypes();
- for (final String pkg : packages) {
- config = config.withPackagePrefix(pkg);
+ for (final String namespace : namespaces) {
+ config = config.withNamespacePrefix(namespace);
}
if(ignoreInterfaces) {
config = config.withIgnoreInterfaces();
@@ -166,20 +166,20 @@ public class MetaModelServiceMenu {
public List<String> choices1DownloadMetaModelXml() {
final DomainModel domainModel = metaModelService.getDomainModel();
final List<DomainMember> export = domainModel.getDomainMembers();
- final SortedSet<String> packages = _Sets.newTreeSet();
+ final SortedSet<String> namespaces = _Sets.newTreeSet();
for (final DomainMember domainMember : export) {
- final String packageName = domainMember.getPackageName();
- final String[] split = packageName.split("[.]");
+ final String namespace = domainMember.getNamespace();
+ final String[] split = namespace.split("[.]");
final StringBuilder buf = new StringBuilder();
for (final String part : split) {
if(buf.length() > 0) {
buf.append(".");
}
buf.append(part);
- packages.add(buf.toString());
+ namespaces.add(buf.toString());
}
}
- return new ArrayList<>(packages);
+ return new ArrayList<>(namespaces);
}
public boolean default2DownloadMetaModelXml() {
diff --git a/api/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java b/api/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
index 9719004..956f203 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
@@ -47,29 +47,29 @@ public class MetaModelService_Config_Test {
}
@Test
- public void packages_prefixes() throws Exception {
+ public void namespace_prefixes() throws Exception {
// when
Config config = new Config();
// then
- assertThat(config.getPackagePrefixes(), is(emptyCollectionOf(String.class)));
+ assertThat(config.getNamespacePrefixes(), is(emptyCollectionOf(String.class)));
// and when
- Config config2 = config.withPackagePrefix("org.foo");
+ Config config2 = config.withNamespacePrefix("org.foo");
// then
assertNotSame(config, config2);
- assertThat(config2.getPackagePrefixes().size(), is(equalTo(1)));
- assertThat(config2.getPackagePrefixes().iterator().next(), is(equalTo("org.foo")));
+ assertThat(config2.getNamespacePrefixes().size(), is(equalTo(1)));
+ assertThat(config2.getNamespacePrefixes().iterator().next(), is(equalTo("org.foo")));
// and when
- Config config3 = config2.withPackagePrefix("org.bar");
+ Config config3 = config2.withNamespacePrefix("org.bar");
// then
assertNotSame(config, config3);
assertNotSame(config2, config3);
- assertThat(config3.getPackagePrefixes().size(), is(equalTo(2)));
- assertTrue(config3.getPackagePrefixes().contains("org.foo"));
- assertTrue(config3.getPackagePrefixes().contains("org.bar"));
+ assertThat(config3.getNamespacePrefixes().size(), is(equalTo(2)));
+ assertTrue(config3.getNamespacePrefixes().contains("org.foo"));
+ assertTrue(config3.getNamespacePrefixes().contains("org.bar"));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
index d060481..e8bf35f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.inspect;
import java.util.Objects;
+import java.util.Optional;
import javax.inject.Inject;
@@ -29,7 +30,10 @@ import org.apache.isis.applib.annotation.RestrictTo;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.graph.tree.TreeNode;
import org.apache.isis.applib.graph.tree.TreePath;
+import org.apache.isis.applib.id.LogicalType;
import org.apache.isis.applib.mixins.layout.LayoutMixinConstants;
+import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.applib.services.message.MessageService;
import org.apache.isis.applib.services.metamodel.Config;
import org.apache.isis.applib.services.metamodel.MetaModelService;
import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -55,8 +59,6 @@ import lombok.val;
@RequiredArgsConstructor
public class Object_inspectMetamodel {
- @Inject private MetaModelService metaModelService;
- //@Inject private SpecificationLoader specificationLoader;
private final Object holder;
@@ -65,7 +67,12 @@ public class Object_inspectMetamodel {
public Object act() {
- val pkg = holder.getClass().getPackage().getName();
+ final Optional<LogicalType> logicalTypeIfAny = metaModelService.lookupLogicalTypeByClass(holder.getClass());
+ if(!logicalTypeIfAny.isPresent()) {
+ messageService.warnUser("Unknown class, unable to export");
+ return null;
+ }
+ final String namespace = logicalTypeIfAny.get().getNamespace();
val config =
new Config()
@@ -73,7 +80,7 @@ public class Object_inspectMetamodel {
.withIgnoreAbstractClasses()
.withIgnoreInterfaces()
.withIgnoreBuiltInValueTypes()
- .withPackagePrefix(pkg);
+ .withNamespacePrefix(namespace);
val metamodelDto = metaModelService.exportMetaModel(config);
@@ -99,5 +106,7 @@ public class Object_inspectMetamodel {
return tree;
}
+ @Inject private MetaModelService metaModelService;
+ @Inject MessageService messageService;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/DomainMemberDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/DomainMemberDefault.java
index 03dc543..aa07dea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/DomainMemberDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/DomainMemberDefault.java
@@ -114,6 +114,11 @@ public class DomainMemberDefault implements DomainMember {
return spec.getLogicalTypeName();
}
+ @Override
+ public String getNamespace() {
+ return spec.getLogicalType().getNamespace();
+ }
+
@XmlElement @Override
public String getClassName() {
final String fullIdentifier = spec.getFullIdentifier();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
index 7521da4..b10e475 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
@@ -82,7 +82,7 @@ class MetaModelExporter {
// these are added into a map for lookups in phase 2
final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec = _Maps.newHashMap();
for (final ObjectSpecification specification : specificationLookup.snapshotSpecifications()) {
- DomainClassDto domainClassType = asXsdType(specification, config);
+ DomainClassDto domainClassType = asXsdType(specification);
domainClassByObjectSpec.put(specification, domainClassType);
}
@@ -135,7 +135,7 @@ class MetaModelExporter {
}
private boolean shouldIgnore(final Config config, final ObjectSpecification specification) {
- return notInPackagePrefixes(specification, config) ||
+ return notInNamespacePrefixes(specification, config) ||
config.isIgnoreMixins() && specification.isMixin() ||
config.isIgnoreInterfaces() && specification.getCorrespondingClass().isInterface() ||
config.isIgnoreAbstractClasses() && Modifier.isAbstract(specification.getCorrespondingClass().getModifiers()) ||
@@ -148,27 +148,27 @@ class MetaModelExporter {
return x;
}
- private boolean notInPackagePrefixes(
+ private boolean notInNamespacePrefixes(
final ObjectSpecification specification, final Config config) {
- return !inPackagePrefixes(specification, config);
+ return !inNamespacePrefixes(specification, config);
}
- private boolean inPackagePrefixes(
+ private boolean inNamespacePrefixes(
final ObjectSpecification specification,
final Config config) {
- val prefixes = config.getPackagePrefixes();
- if(prefixes.isEmpty()) {
+ val namespacePrefixes = config.getNamespacePrefixes();
+ if(namespacePrefixes.isEmpty()) {
return false; // export none
}
- if(config.isPackagePrefixAny()) {
+ if(config.isNamespacePrefixAny()) {
return true; // export all
}
- val canonicalName = specification.getCorrespondingClass().getCanonicalName();
- for (val prefix : prefixes) {
- if(canonicalName.startsWith(prefix)) {
+ val logicalTypeName = specification.getLogicalTypeName();
+ for (val prefix : namespacePrefixes) {
+ if(logicalTypeName.startsWith(prefix)) {
return true;
}
}
@@ -176,8 +176,7 @@ class MetaModelExporter {
}
private DomainClassDto asXsdType(
- final ObjectSpecification specification,
- final Config config) {
+ final ObjectSpecification specification) {
final DomainClassDto domainClass = new DomainClassDto();
@@ -334,7 +333,7 @@ class MetaModelExporter {
final Config config) {
DomainClassDto value = domainClassByObjectSpec.get(specification);
if(value == null) {
- final DomainClassDto domainClass = asXsdType(specification, config);
+ final DomainClassDto domainClass = asXsdType(specification);
domainClassByObjectSpec.put(specification, domainClass);
value = domainClass;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 34a20c6..401cb6a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -87,7 +87,6 @@ public class MetaModelServiceDefault implements MetaModelService {
specificationLoader.reloadSpecification(domainType);
}
- // //////////////////////////////////////
@@ -143,7 +142,7 @@ public class MetaModelServiceDefault implements MetaModelService {
return className.startsWith("java") || className.startsWith("org.joda");
}
- // //////////////////////////////////////
+
@Override
public BeanSort sortOf(