From commits-return-29379-archive-asf-public=cust-asf.ponee.io@isis.apache.org Fri Mar 27 14:01:18 2020 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id 1FDE9180637 for ; Fri, 27 Mar 2020 15:01:18 +0100 (CET) Received: (qmail 90490 invoked by uid 500); 27 Mar 2020 14:01:17 -0000 Mailing-List: contact commits-help@isis.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@isis.apache.org Delivered-To: mailing list commits@isis.apache.org Received: (qmail 90481 invoked by uid 99); 27 Mar 2020 14:01:17 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Mar 2020 14:01:17 +0000 Received: by gitbox.apache.org (ASF Mail Server at gitbox.apache.org, from userid 33) id 659E1819F7; Fri, 27 Mar 2020 14:01:17 +0000 (UTC) Date: Fri, 27 Mar 2020 14:01:17 +0000 To: "commits@isis.apache.org" Subject: [isis] branch master updated: ISIS-2333: adds Object_inspectMetamodel MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Message-ID: <158531767727.23921.6789587014973024879@gitbox.apache.org> From: ahuber@apache.org X-Git-Host: gitbox.apache.org X-Git-Repo: isis X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 84e12e2d917aaabe8c98aa83a7a5d755c04e2a69 X-Git-Newrev: 7758ccc5c7a80c15d98e00ea47c91dcafeb243ad X-Git-Rev: 7758ccc5c7a80c15d98e00ea47c91dcafeb243ad X-Git-NotificationType: ref_changed_plus_diff X-Git-Multimail-Version: 1.5.dev Auto-Submitted: auto-generated 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 7758ccc ISIS-2333: adds Object_inspectMetamodel 7758ccc is described below commit 7758ccc5c7a80c15d98e00ea47c91dcafeb243ad Author: Andi Huber AuthorDate: Fri Mar 27 15:01:06 2020 +0100 ISIS-2333: adds Object_inspectMetamodel --- .../org/apache/isis/applib/IsisModuleApplib.java | 5 +- ...elXml.java => Object_downloadMetamodelXml.java} | 6 +- .../core/metamodel/IsisModuleCoreMetamodel.java | 3 + .../inspect/IsisModuleCoreMetamodelInspection.java | 46 +++++++++++ .../metamodel/inspect/Object_inspectMetamodel.java | 63 ++++++-------- .../core/metamodel/inspect/model/ActionNode.java | 86 ++++++++++++++++++++ .../core/metamodel/inspect/model/ActionNode.svg | 87 ++++++++++++++++++++ .../metamodel/inspect/model/CollectionNode.java | 76 +++++++++++++++++ .../metamodel/inspect/model/CollectionNode.svg | 87 ++++++++++++++++++++ .../metamodel/inspect/model/FacetAttrNode.java | 74 +++++++++++++++++ .../core/metamodel/inspect/model/FacetAttrNode.svg | 87 ++++++++++++++++++++ .../core/metamodel/inspect/model/FacetNode.java | 77 ++++++++++++++++++ .../core/metamodel/inspect/model/FacetNode.svg | 87 ++++++++++++++++++++ .../isis/core/metamodel/inspect/model/MMNode.java | 49 +++++++++++ .../metamodel/inspect/model/MMNodeFactory.java | 83 +++++++++++++++++++ .../metamodel/inspect/model/MMTreeAdapter.java | 43 ++++++++++ .../metamodel/inspect/model/ParameterNode.java | 75 +++++++++++++++++ .../core/metamodel/inspect/model/ParameterNode.svg | 87 ++++++++++++++++++++ .../core/metamodel/inspect/model/PropertyNode.java | 75 +++++++++++++++++ .../core/metamodel/inspect/model/PropertyNode.svg | 87 ++++++++++++++++++++ .../core/metamodel/inspect/model/TypeNode.java | 95 ++++++++++++++++++++++ .../isis/core/metamodel/inspect/model/TypeNode.svg | 87 ++++++++++++++++++++ 22 files changed, 1423 insertions(+), 42 deletions(-) diff --git a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java index 819b1ea..61dc1cb 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java +++ b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java @@ -26,7 +26,7 @@ import org.apache.isis.applib.mixins.dto.Dto_downloadXsd; import org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml; import org.apache.isis.applib.mixins.layout.Object_openRestApi; import org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel; -import org.apache.isis.applib.mixins.metamodel.Object_downloadMetaModelXml; +import org.apache.isis.applib.mixins.metamodel.Object_downloadMetamodelXml; import org.apache.isis.applib.mixins.metamodel.Object_objectIdentifier; import org.apache.isis.applib.mixins.metamodel.Object_objectType; import org.apache.isis.applib.services.audit.AuditerServiceLogging; @@ -42,7 +42,6 @@ import org.apache.isis.applib.services.jaxb.JaxbServiceDefault; import org.apache.isis.applib.services.layout.LayoutServiceMenu; import org.apache.isis.applib.services.metamodel.MetaModelServiceMenu; import org.apache.isis.applib.services.publish.PublisherServiceLogging; -import org.apache.isis.applib.services.scratchpad.Scratchpad; import org.apache.isis.applib.services.session.SessionLoggingServiceLogging; import org.apache.isis.applib.services.wrapper.control.AsyncControlService; import org.apache.isis.schema.IsisModuleSchema; @@ -58,7 +57,7 @@ import org.apache.isis.schema.IsisModuleSchema; Dto_downloadXml.class, Dto_downloadXsd.class, Object_downloadLayoutXml.class, - Object_downloadMetaModelXml.class, + Object_downloadMetamodelXml.class, Object_objectIdentifier.class, Object_objectType.class, Object_openRestApi.class, 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 similarity index 95% copy from api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetaModelXml.java copy to api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetamodelXml.java index 1cbb51b..0129e8e 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 @@ -39,7 +39,7 @@ import lombok.RequiredArgsConstructor; import lombok.val; @Action( - domainEvent = Object_downloadMetaModelXml.ActionDomainEvent.class, + domainEvent = Object_downloadMetamodelXml.ActionDomainEvent.class, semantics = SemanticsOf.SAFE, restrictTo = RestrictTo.PROTOTYPING ) @@ -48,12 +48,12 @@ import lombok.val; position = ActionLayout.Position.PANEL_DROPDOWN ) @RequiredArgsConstructor -public class Object_downloadMetaModelXml { +public class Object_downloadMetamodelXml { private final Object holder; public static class ActionDomainEvent - extends org.apache.isis.applib.IsisModuleApplib.ActionDomainEvent {} + extends org.apache.isis.applib.IsisModuleApplib.ActionDomainEvent {} @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.2") public Object act( diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java index 11f39bd..3b34bde 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java @@ -24,6 +24,7 @@ import org.springframework.context.annotation.Import; import org.apache.isis.applib.IsisModuleApplib; import org.apache.isis.core.config.IsisModuleCoreConfig; import org.apache.isis.core.metamodel.context.MetaModelContexts; +import org.apache.isis.core.metamodel.inspect.IsisModuleCoreMetamodelInspection; import org.apache.isis.core.metamodel.objectmanager.ObjectManagerDefault; import org.apache.isis.core.metamodel.progmodel.ProgrammingModelInitFilterDefault; import org.apache.isis.core.metamodel.services.ServiceInjectorDefault; @@ -63,6 +64,7 @@ import org.apache.isis.core.security.IsisModuleCoreSecurity; // @Configuration's MetaModelContexts.class, + IsisModuleCoreMetamodelInspection.class, MetamodelEventSupport_Spring.class, // @Component's @@ -97,6 +99,7 @@ import org.apache.isis.core.security.IsisModuleCoreSecurity; // @Repository's ApplicationFeatureRepositoryDefault.class, + }) public class IsisModuleCoreMetamodel { diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/IsisModuleCoreMetamodelInspection.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/IsisModuleCoreMetamodelInspection.java new file mode 100644 index 0000000..9276340 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/IsisModuleCoreMetamodelInspection.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.core.metamodel.inspect; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +import org.apache.isis.core.metamodel.inspect.model.ActionNode; +import org.apache.isis.core.metamodel.inspect.model.CollectionNode; +import org.apache.isis.core.metamodel.inspect.model.FacetAttrNode; +import org.apache.isis.core.metamodel.inspect.model.FacetNode; +import org.apache.isis.core.metamodel.inspect.model.ParameterNode; +import org.apache.isis.core.metamodel.inspect.model.PropertyNode; +import org.apache.isis.core.metamodel.inspect.model.TypeNode; + +@Configuration +@Import({ + Object_inspectMetamodel.class, + ActionNode.class, + CollectionNode.class, + FacetAttrNode.class, + FacetNode.class, + ParameterNode.class, + PropertyNode.class, + TypeNode.class, + +}) +public class IsisModuleCoreMetamodelInspection { + +} diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetaModelXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java similarity index 60% rename from api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetaModelXml.java rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java index 1cbb51b..629ee29 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetaModelXml.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/Object_inspectMetamodel.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.isis.applib.mixins.metamodel; +package org.apache.isis.core.metamodel.inspect; import java.util.Objects; @@ -24,45 +24,41 @@ import javax.inject.Inject; import org.apache.isis.applib.annotation.Action; import org.apache.isis.applib.annotation.ActionLayout; +import org.apache.isis.applib.annotation.Contributed; import org.apache.isis.applib.annotation.MemberOrder; -import org.apache.isis.applib.annotation.ParameterLayout; 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.mixins.MixinConstants; -import org.apache.isis.applib.services.jaxb.JaxbService; import org.apache.isis.applib.services.metamodel.MetaModelService; -import org.apache.isis.applib.services.metamodel.MetaModelServiceMenu; -import org.apache.isis.applib.value.Clob; -import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType; +import org.apache.isis.core.commons.internal.exceptions._Exceptions; +import org.apache.isis.core.metamodel.inspect.model.MMNodeFactory; +import org.apache.isis.core.metamodel.inspect.model.MMTreeAdapter; import lombok.RequiredArgsConstructor; import lombok.val; @Action( - domainEvent = Object_downloadMetaModelXml.ActionDomainEvent.class, + domainEvent = Object_inspectMetamodel.ActionDomainEvent.class, semantics = SemanticsOf.SAFE, restrictTo = RestrictTo.PROTOTYPING ) @ActionLayout( - cssClassFa = "fa-download", - position = ActionLayout.Position.PANEL_DROPDOWN + cssClassFa = "fa-sitemap", + position = ActionLayout.Position.PANEL_DROPDOWN, + contributed = Contributed.AS_ACTION ) @RequiredArgsConstructor -public class Object_downloadMetaModelXml { +public class Object_inspectMetamodel { private final Object holder; public static class ActionDomainEvent - extends org.apache.isis.applib.IsisModuleApplib.ActionDomainEvent {} + extends org.apache.isis.applib.IsisModuleApplib.ActionDomainEvent {} - @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.2") - public Object act( - - // PARAM 0 - @ParameterLayout( - named = MixinConstants.FILENAME_PROPERTY_NAME, - describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION) - final String fileName) { + @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.2.1") + public Object act() { val pkg = holder.getClass().getPackage().getName(); @@ -78,26 +74,21 @@ public class Object_downloadMetaModelXml { val className = holder.getClass().getName(); - val domainClassDtos = metamodelDto.getDomainClassDto(); - domainClassDtos.removeIf(classDto->!Objects.equals(classDto.getId(), className)); - - val xmlString = jaxbService.toXml(metamodelDto); - - return Clob.of(fileName, CommonMimeType.XML, xmlString); - } - - // -- PARAM 0 - - public String default0Act() { - return holder.getClass().getSimpleName(); + val domainClassDto = metamodelDto.getDomainClassDto() + .stream() + .filter(classDto->Objects.equals(classDto.getId(), className)) + .findFirst() + .orElseThrow(_Exceptions::noSuchElement); + + val root = MMNodeFactory.type(domainClassDto, null); + val tree = TreeNode.lazy(root, MMTreeAdapter.class); + tree.expand(TreePath.of(0)); // expand the root node + return tree; } // -- DEPENDENCIES - @Inject MetaModelService metaModelService; - @Inject JaxbService jaxbService; - @Inject MetaModelServiceMenu metaModelServiceMenu; - - + @Inject private MetaModelService metaModelService; + //@Inject private SpecificationLoader specificationLoader; } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java new file mode 100644 index 0000000..114765a --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java @@ -0,0 +1,86 @@ +/* + * 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.core.metamodel.inspect.model; + +import java.util.stream.Stream; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Nature; +import org.apache.isis.applib.annotation.Property; +import org.apache.isis.applib.annotation.Where; +import org.apache.isis.schema.metamodel.v2.Action; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.ActionNode") +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +@ToString +public class ActionNode extends MMNode { + + @Property(hidden = Where.EVERYWHERE) + @Getter @Setter private Action action; + + @Override + public String title() { + return String.format("%s(...) : %s", action.getId(), typeToString(action.getReturnType())); + } + + @Override + public String iconName() { + return ""; + } + + // -- TREE NODE STUFF + + @Getter @Setter @XmlTransient + private TypeNode parentNode; + + @Override + public int getChildNodeCount() { + return action.getFacets().getFacet().size() + + action.getParams().getParam().size(); + } + + @Override + public Stream streamChildNodes() { + + return Stream.concat( + + action.getFacets().getFacet() + .stream() + .map(facet->MMNodeFactory.facet(facet, this)), + + action.getParams().getParam() + .stream() + .map(param->MMNodeFactory.param(param, this)) + + ); + + } + +} + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.svg b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.svg new file mode 100644 index 0000000..5c75692 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + act + + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java new file mode 100644 index 0000000..81e990d --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java @@ -0,0 +1,76 @@ +/* + * 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.core.metamodel.inspect.model; + +import java.util.stream.Stream; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Nature; +import org.apache.isis.applib.annotation.Property; +import org.apache.isis.applib.annotation.Where; +import org.apache.isis.schema.metamodel.v2.Collection; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.CollectionNode") +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +@ToString +public class CollectionNode extends MMNode { + + @Property(hidden = Where.EVERYWHERE) + @Getter @Setter private Collection collection; + + @Override + public String title() { + return String.format("%s : %s", collection.getId(), typeToString(collection.getType())); + } + + @Override + public String iconName() { + return ""; + } + + // -- TREE NODE STUFF + + @Getter @Setter @XmlTransient + private TypeNode parentNode; + + @Override + public int getChildNodeCount() { + return collection.getFacets().getFacet().size(); + } + + @Override + public Stream streamChildNodes() { + return collection.getFacets().getFacet() + .stream() + .map(facet->MMNodeFactory.facet(facet, this)); + } + + +} + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.svg b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.svg new file mode 100644 index 0000000..760b538 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + coll + + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java new file mode 100644 index 0000000..85c62d1 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.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.core.metamodel.inspect.model; + +import java.util.stream.Stream; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Nature; +import org.apache.isis.applib.annotation.Property; +import org.apache.isis.applib.annotation.Where; +import org.apache.isis.schema.metamodel.v2.FacetAttr; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.FacetAttrNode") +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +@ToString +public class FacetAttrNode extends MMNode { + + @Property(hidden = Where.EVERYWHERE) + @Getter @Setter private FacetAttr facetAttr; + + @Override + public String title() { + return String.format("%s: %s", facetAttr.getName(), facetAttr.getValue()); + } + + @Override + public String iconName() { + return ""; + } + + // -- TREE NODE STUFF + + @Getter @Setter @XmlTransient + private FacetNode parentNode; + + @Override + public int getChildNodeCount() { + return 0; + } + + @Override + public Stream streamChildNodes() { + return Stream.empty(); + } + + +} + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.svg b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.svg new file mode 100644 index 0000000..cf04655 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + attr + + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java new file mode 100644 index 0000000..0a7d31f --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.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.core.metamodel.inspect.model; + +import java.util.stream.Stream; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Nature; +import org.apache.isis.applib.annotation.Property; +import org.apache.isis.applib.annotation.Where; +import org.apache.isis.schema.metamodel.v2.Facet; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.FacetNode") +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +@ToString +public class FacetNode extends MMNode { + + @Property(hidden = Where.EVERYWHERE) + @Getter @Setter private Facet facet; + + @Override + public String title() { + return facet.getFqcn() + .replace("org.apache.isis.core.metamodel.facets.", "»") + .replace("org.apache.isis.core.metamodel.", "»"); + } + + @Override + public String iconName() { + return ""; + } + + // -- TREE NODE STUFF + + @Getter @Setter @XmlTransient + private MMNode parentNode; + + @Override + public int getChildNodeCount() { + return facet.getAttr().size(); + } + + @Override + public Stream streamChildNodes() { + return facet.getAttr().stream() + .map(facetAttr->MMNodeFactory.facetAttr(facetAttr, this)); + } + + +} + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.svg b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.svg new file mode 100644 index 0000000..11437ea --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + facet + + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java new file mode 100644 index 0000000..5fd9d9a --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java @@ -0,0 +1,49 @@ +/* + * 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.core.metamodel.inspect.model; + +import java.util.stream.Stream; + +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.isis.applib.annotation.Navigable; +import org.apache.isis.applib.annotation.PropertyLayout; +import org.apache.isis.applib.annotation.Where; + +@XmlTransient +public abstract class MMNode { + + @PropertyLayout(navigable=Navigable.PARENT, hidden=Where.EVERYWHERE) + public abstract MMNode getParentNode(); + + public abstract int getChildNodeCount(); + + public abstract Stream streamChildNodes(); + + public abstract String title(); + + public abstract String iconName(); + + protected String typeToString(Object type) { + return type!=null + ? ""+type + : "void"; + } + +} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNodeFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNodeFactory.java new file mode 100644 index 0000000..92c271a --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNodeFactory.java @@ -0,0 +1,83 @@ +/* + * 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.core.metamodel.inspect.model; + +import org.apache.isis.schema.metamodel.v2.Action; +import org.apache.isis.schema.metamodel.v2.Collection; +import org.apache.isis.schema.metamodel.v2.DomainClassDto; +import org.apache.isis.schema.metamodel.v2.Facet; +import org.apache.isis.schema.metamodel.v2.FacetAttr; +import org.apache.isis.schema.metamodel.v2.Param; +import org.apache.isis.schema.metamodel.v2.Property; + +import lombok.val; + +public class MMNodeFactory { + + public static MMNode type(DomainClassDto domainClassDto, MMNode parentNode) { + val node = new TypeNode(); + node.setDomainClassDto(domainClassDto); + node.setParentNode(parentNode); + return node; + } + + public static MMNode facet(Facet facet, MMNode parentNode) { + val node = new FacetNode(); + node.setFacet(facet); + node.setParentNode(parentNode); + return node; + } + + public static MMNode facetAttr(FacetAttr facetAttr, FacetNode parentNode) { + val node = new FacetAttrNode(); + node.setFacetAttr(facetAttr); + node.setParentNode(parentNode); + return node; + } + + public static MMNode action(Action action, TypeNode parentNode) { + val node = new ActionNode(); + node.setAction(action); + node.setParentNode(parentNode); + return node; + } + + public static MMNode property(Property property, TypeNode parentNode) { + val node = new PropertyNode(); + node.setProperty(property); + node.setParentNode(parentNode); + return node; + } + + public static MMNode collection(Collection collection, TypeNode parentNode) { + val node = new CollectionNode(); + node.setCollection(collection); + node.setParentNode(parentNode); + return node; + } + + public static MMNode param(Param param, ActionNode parentNode) { + val node = new ParameterNode(); + node.setParameter(param); + node.setParentNode(parentNode); + return node; + } + + +} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMTreeAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMTreeAdapter.java new file mode 100644 index 0000000..8922c29 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMTreeAdapter.java @@ -0,0 +1,43 @@ +/* + * 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.core.metamodel.inspect.model; + +import java.util.Optional; +import java.util.stream.Stream; + +import org.apache.isis.applib.graph.tree.TreeAdapter; + +public class MMTreeAdapter implements TreeAdapter { + + @Override + public Optional parentOf(MMNode node) { + return Optional.ofNullable(node.getParentNode()); + } + + @Override + public int childCountOf(MMNode node) { + return node.getChildNodeCount(); + } + + @Override + public Stream childrenOf(MMNode node) { + return node.streamChildNodes(); + } + +} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java new file mode 100644 index 0000000..d771f0f --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java @@ -0,0 +1,75 @@ +/* + * 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.core.metamodel.inspect.model; + +import java.util.stream.Stream; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Nature; +import org.apache.isis.applib.annotation.Property; +import org.apache.isis.applib.annotation.Where; +import org.apache.isis.schema.metamodel.v2.Param; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.ParameterNode") +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +@ToString +public class ParameterNode extends MMNode { + + @Property(hidden = Where.EVERYWHERE) + @Getter @Setter private Param parameter; + + @Override + public String title() { + return String.format("%s : %s", parameter.getId(), typeToString(parameter.getType())); + } + + @Override + public String iconName() { + return ""; + } + + // -- TREE NODE STUFF + + @Getter @Setter @XmlTransient + private ActionNode parentNode; + + @Override + public int getChildNodeCount() { + return parameter.getFacets().getFacet().size(); + } + + @Override + public Stream streamChildNodes() { + return parameter.getFacets().getFacet() + .stream() + .map(facet->MMNodeFactory.facet(facet, this)); + } + +} + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.svg b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.svg new file mode 100644 index 0000000..9af8b42 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + prm + + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java new file mode 100644 index 0000000..afbcd1e --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java @@ -0,0 +1,75 @@ +/* + * 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.core.metamodel.inspect.model; + +import java.util.stream.Stream; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Nature; +import org.apache.isis.applib.annotation.Property; +import org.apache.isis.applib.annotation.Where; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.PropertyNode") +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +@ToString +public class PropertyNode extends MMNode { + + @Property(hidden = Where.EVERYWHERE) + @Getter @Setter private org.apache.isis.schema.metamodel.v2.Property property; + + @Override + public String title() { + return String.format("%s : %s", property.getId(), typeToString(property.getType())); + } + + @Override + public String iconName() { + return ""; + } + + // -- TREE NODE STUFF + + @Getter @Setter @XmlTransient + private TypeNode parentNode; + + @Override + public int getChildNodeCount() { + return property.getFacets().getFacet().size(); + } + + @Override + public Stream streamChildNodes() { + return property.getFacets().getFacet() + .stream() + .map(facet->MMNodeFactory.facet(facet, this)); + } + + +} + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.svg b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.svg new file mode 100644 index 0000000..8a8334d --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + prop + + diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java new file mode 100644 index 0000000..55f0fc7 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java @@ -0,0 +1,95 @@ +/* + * 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.core.metamodel.inspect.model; + +import java.util.stream.Stream; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Nature; +import org.apache.isis.applib.annotation.Property; +import org.apache.isis.applib.annotation.Where; +import org.apache.isis.core.commons.internal.collections._Streams; +import org.apache.isis.schema.metamodel.v2.DomainClassDto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@DomainObject(nature=Nature.VIEW_MODEL, objectType = "isis.metamodel.DomainClassNode") +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +@ToString +public class TypeNode extends MMNode { + + @Property(hidden = Where.EVERYWHERE) + @Getter @Setter private DomainClassDto domainClassDto; + + @Override + public String title() { + return domainClassDto.getId(); + } + + @Override + public String iconName() { + return ""; + } + + + // -- TREE NODE STUFF + + @Getter @Setter @XmlTransient + private MMNode parentNode; + + @Override + public int getChildNodeCount() { + return domainClassDto.getFacets().getFacet().size() + + domainClassDto.getActions().getAct().size() + + domainClassDto.getProperties().getProp().size() + + domainClassDto.getCollections().getColl().size() + ; + } + + @Override + public Stream streamChildNodes() { + return _Streams.concat( + + domainClassDto.getFacets().getFacet() + .stream() + .map(facet->MMNodeFactory.facet(facet, this)), + + domainClassDto.getActions().getAct() + .stream() + .map(action->MMNodeFactory.action(action, this)), + + domainClassDto.getProperties().getProp() + .stream() + .map(prop->MMNodeFactory.property(prop, this)), + + domainClassDto.getCollections().getColl() + .stream() + .map(coll->MMNodeFactory.collection(coll, this))); + + } + +} diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.svg b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.svg new file mode 100644 index 0000000..88f4293 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + type + +