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 2018/10/09 09:27:11 UTC
[isis] 01/03: ISIS-2003: adds further config options
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-2003
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 68d36bf9d6c4c039be330503ebc5758d07d81d76
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 9 00:32:41 2018 +0100
ISIS-2003: adds further config options
---
.../services/metamodel/MetaModelService6.java | 30 ++++++--
.../services/metamodel/MetaModelExporter.java | 90 +++++++++++++---------
2 files changed, 74 insertions(+), 46 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService6.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService6.java
index e5f61a7..319954e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService6.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService6.java
@@ -18,6 +18,11 @@
*/
package org.apache.isis.applib.services.metamodel;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.schema.metamodel.v1.MetamodelDto;
@@ -29,16 +34,17 @@ public interface MetaModelService6 extends MetaModelService5 {
private static final int IGNORE_INTERFACES = 2;
private static final int IGNORE_ABSTRACT_CLASSES = 4;
private static final int IGNORE_BUILT_IN_VALUE_TYPES = 8;
+ private static final int IGNORE_MIXINS = 16;
private final int mask;
- private final String packagePrefix;
+ private final List<String> packagePrefixes;
public Config() {
- this(0, null);
+ this(0, Collections.<String>emptyList());
}
- private Config(final int mask, final String packagePrefix) {
+ private Config(final int mask, final List<String> packagePrefixes) {
this.mask = mask;
- this.packagePrefix = packagePrefix;
+ this.packagePrefixes = Collections.unmodifiableList(packagePrefixes);
}
private Config(final int mask) {
this(mask, null);
@@ -58,13 +64,18 @@ public interface MetaModelService6 extends MetaModelService5 {
public Config withIgnoreBuiltInValueTypes() {
return newConfigWith(IGNORE_BUILT_IN_VALUE_TYPES);
}
+ public Config withIgnoreMixins() {
+ return newConfigWith(IGNORE_MIXINS);
+ }
private Config newConfigWith(final int x) {
- return new Config(mask | x, packagePrefix);
+ return new Config(mask | x, packagePrefixes);
}
public Config withPackagePrefix(final String packagePrefix) {
- return new Config(mask, packagePrefix);
+ final List<String> prefixes = Lists.newArrayList(packagePrefix);
+ prefixes.add(packagePrefix);
+ return new Config(mask, prefixes);
}
public boolean isIgnoreNoop() {
@@ -81,9 +92,12 @@ public interface MetaModelService6 extends MetaModelService5 {
public boolean isIgnoreBuiltInValueTypes() {
return hasFlag(IGNORE_BUILT_IN_VALUE_TYPES);
}
+ public boolean isIgnoreMixins() {
+ return hasFlag(IGNORE_MIXINS);
+ }
- public String getPackagePrefix() {
- return packagePrefix;
+ public List<String> getPackagePrefixes() {
+ return packagePrefixes;
}
private boolean hasFlag(final int x) {
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 109ef20..06c51f2 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
@@ -34,6 +34,7 @@ import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.PublishedAction;
import org.apache.isis.applib.annotation.PublishedObject;
import org.apache.isis.applib.services.command.CommandDtoProcessor;
@@ -41,6 +42,7 @@ import org.apache.isis.applib.services.metamodel.MetaModelService6;
import org.apache.isis.applib.spec.Specification;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -91,8 +93,10 @@ class MetaModelExporter {
// these are added into a map for lookups in phase 2
Map<ObjectSpecification, DomainClass> domainClassByObjectSpec = Maps.newHashMap();
for (final ObjectSpecification specification : specificationLookup.allSpecifications()) {
- if(config.getPackagePrefix() != null &&
- !specification.getCorrespondingClass().getCanonicalName().startsWith(config.getPackagePrefix())) {
+ if(notInPackagePrefixes(specification, config)) {
+ continue;
+ }
+ if(config.isIgnoreMixins() && specification.isMixin()) {
continue;
}
if(config.isIgnoreInterfaces() && specification.getCorrespondingClass().isInterface()) {
@@ -112,7 +116,7 @@ class MetaModelExporter {
// phase 2: now flesh out the domain class types, passing the map for lookups of the domainClassTypes that
// correspond to each object members types.
for (final ObjectSpecification specification : Lists.newArrayList(domainClassByObjectSpec.keySet())) {
- addMembersTo(specification, domainClassByObjectSpec, config);
+ addFacetsAndMembersTo(specification, domainClassByObjectSpec, config);
}
// phase 3: now copy all domain classes into the metamodel
@@ -125,6 +129,23 @@ class MetaModelExporter {
return metamodelDto;
}
+ private boolean notInPackagePrefixes(
+ final ObjectSpecification specification, final MetaModelService6.Config config) {
+ return !inPackagePrefixes(specification, config);
+ }
+
+ private boolean inPackagePrefixes(
+ final ObjectSpecification specification,
+ final MetaModelService6.Config config) {
+ final String canonicalName = specification.getCorrespondingClass().getCanonicalName();
+ for (final String s : config.getPackagePrefixes()) {
+ if(canonicalName.startsWith(s)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private DomainClass asXsdType(
final ObjectSpecification specification,
final MetaModelService6.Config config) {
@@ -132,61 +153,47 @@ class MetaModelExporter {
final DomainClass domainClass = new DomainClass();
domainClass.setId(specification.getFullIdentifier());
- domainClass.setFacets(new org.apache.isis.schema.metamodel.v1.FacetHolder.Facets());
- if (!isValueType(specification)) {
- if(!isEnum(specification)) {
- domainClass.setActions(new DomainClass.Actions());
- }
- if(specification.isService()) {
- domainClass.setService(true);
- } else {
- domainClass.setProperties(new DomainClass.Properties());
- domainClass.setCollections(new DomainClass.Collections());
- }
+ if(specification.isService()) {
+ domainClass.setService(true);
}
return domainClass;
}
- private void addMembersTo(
+ private void addFacetsAndMembersTo(
final ObjectSpecification specification,
final Map<ObjectSpecification, DomainClass> domainClassByObjectSpec,
final MetaModelService6.Config config) {
final DomainClass domainClass = lookupDomainClass(specification, domainClassByObjectSpec, config);
+ if(domainClass.getFacets() == null) {
+ domainClass.setFacets(new org.apache.isis.schema.metamodel.v1.FacetHolder.Facets());
+ }
addFacets(specification, domainClass.getFacets(), config);
- if(!isValueType(specification)) {
- if(!isEnum(specification)) {
+ if(specification.isValueOrIsParented() || isEnum(specification)) {
+ return;
+ }
+
+ if (specification.isService()) {
+ if(!hasNatureOfServiceOfDomain(specification)) {
addActions(specification, domainClassByObjectSpec, config);
}
- if(! specification.isService()) {
- addProperties(specification, domainClassByObjectSpec, config);
- addCollections(specification, domainClassByObjectSpec, config);
- }
+ } else {
+ addProperties(specification, domainClassByObjectSpec, config);
+ addCollections(specification, domainClassByObjectSpec, config);
+ addActions(specification, domainClassByObjectSpec, config);
}
-
}
private boolean isEnum(final ObjectSpecification specification) {
return specification.getCorrespondingClass().isEnum();
}
- private void addMembers(
- final ObjectSpecification specification,
- final Map<ObjectSpecification, DomainClass> domainClassByObjectSpec,
- final MetaModelService6.Config config) {
-
- if(specification.isValueOrIsParented()) {
- return;
- }
-
- if(! specification.isService()) {
- addProperties(specification, domainClassByObjectSpec, config);
- addCollections(specification, domainClassByObjectSpec, config);
- }
- addActions(specification, domainClassByObjectSpec, config);
+ private boolean hasNatureOfServiceOfDomain(final ObjectSpecification specification) {
+ final DomainServiceFacet domainServiceFacet = specification.getFacet(DomainServiceFacet.class);
+ return domainServiceFacet != null && domainServiceFacet.getNatureOfService() == NatureOfService.DOMAIN;
}
private void addProperties(
@@ -197,6 +204,9 @@ class MetaModelExporter {
final List<ObjectAssociation> oneToOneAssociations =
specification.getAssociations(Contributed.INCLUDED, ObjectAssociation.Filters.PROPERTIES);
+ if(domainClass.getProperties() == null) {
+ domainClass.setProperties(new DomainClass.Properties());
+ }
final List<Property> properties = domainClass.getProperties().getProp();
for (final ObjectAssociation association : oneToOneAssociations) {
final OneToOneAssociation otoa = (OneToOneAssociation) association;
@@ -212,6 +222,9 @@ class MetaModelExporter {
final DomainClass domainClass = lookupDomainClass(specification, domainClassByObjectSpec, config);
final List<ObjectAssociation> oneToManyAssociations =
specification.getAssociations(Contributed.INCLUDED, ObjectAssociation.Filters.COLLECTIONS);
+ if(domainClass.getCollections() == null) {
+ domainClass.setCollections(new DomainClass.Collections());
+ }
final List<Collection> collections = domainClass.getCollections().getColl();
for (final ObjectAssociation association : oneToManyAssociations) {
final OneToManyAssociation otma = (OneToManyAssociation) association;
@@ -227,6 +240,9 @@ class MetaModelExporter {
final DomainClass domainClass = lookupDomainClass(specification, domainClassByObjectSpec, config);
final List<ObjectAction> objectActions =
specification.getObjectActions(Contributed.INCLUDED);
+ if(domainClass.getActions() == null) {
+ domainClass.setActions(new DomainClass.Actions());
+ }
final List<Action> actions = domainClass.getActions().getAct();
for (final ObjectAction action : objectActions) {
actions.add(asXsdType(action, domainClassByObjectSpec, config));
@@ -296,8 +312,6 @@ class MetaModelExporter {
if(value == null) {
final DomainClass domainClass = asXsdType(specification, config);
domainClassByObjectSpec.put(specification, domainClass);
- addFacets(specification, domainClass.getFacets(), config);
- addMembers(specification, domainClassByObjectSpec, config);
value = domainClass;
}
return value;