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 2016/01/06 22:21:28 UTC
isis git commit: ISIS-993: working on the fleshing out stuff (to
default missing layout metadata)
Repository: isis
Updated Branches:
refs/heads/ISIS-993 2988aef22 -> c10162856
ISIS-993: working on the fleshing out stuff (to default missing layout metadata)
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/c1016285
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/c1016285
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/c1016285
Branch: refs/heads/ISIS-993
Commit: c10162856c0f8cb87a5d7e09f2b3a4b5840fff9b
Parents: 2988aef
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jan 6 21:21:19 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Jan 6 21:21:19 2016 +0000
----------------------------------------------------------------------
.../isis/applib/layout/v1_0/ActionHolder.java | 25 +++++
.../isis/applib/layout/v1_0/Collection.java | 2 +-
.../isis/applib/layout/v1_0/DomainObject.java | 109 ++++++++++++++++++-
.../isis/applib/layout/v1_0/Property.java | 2 +-
.../isis/applib/layout/v1_0/PropertyGroup.java | 2 +-
.../object/layoutxml/LayoutXmlFacetDefault.java | 57 ++++++++--
.../metamodel/spec/feature/ObjectAction.java | 5 +-
.../metamodel/spec/feature/ObjectMember.java | 31 ++++++
8 files changed, 219 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/c1016285/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ActionHolder.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ActionHolder.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ActionHolder.java
new file mode 100644
index 0000000..bac4ebb
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ActionHolder.java
@@ -0,0 +1,25 @@
+/*
+ * 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.applib.layout.v1_0;
+
+import java.util.List;
+
+public interface ActionHolder {
+ List<Action> getActions();
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/c1016285/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java
index f7de5d8..6439807 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java
@@ -34,7 +34,7 @@ import com.google.common.collect.Lists;
, "layout"
}
)
-public class Collection implements ColumnContent {
+public class Collection implements ColumnContent, ActionHolder {
private String id;
http://git-wip-us.apache.org/repos/asf/isis/blob/c1016285/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
index 052eb22..836a732 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
@@ -21,11 +21,15 @@ package org.apache.isis.applib.layout.v1_0;
import java.util.ArrayList;
import java.util.List;
+import javax.annotation.Nullable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.isis.applib.services.dto.Dto;
@@ -38,7 +42,7 @@ import org.apache.isis.applib.services.dto.Dto;
, "tabGroups"
}
)
-public class DomainObject implements Dto {
+public class DomainObject implements Dto, ActionHolder {
private List<Action> actions = Lists.newArrayList();
@@ -67,4 +71,107 @@ public class DomainObject implements Dto {
public void setTabGroups(List<TabGroup> tabGroups) {
this.tabGroups = tabGroups;
}
+
+
+ public interface Visitor {
+ void visit(DomainObject domainObject);
+ void visit(Property property);
+ void visit(Collection collection);
+ void visit(Action action);
+ void visit(TabGroup tabGroup);
+ void visit(Tab tab);
+ void visit(Column column);
+ }
+
+ public static class VisitorAdapter implements Visitor {
+ @Override
+ public void visit(final DomainObject domainObject) { }
+ @Override
+ public void visit(final TabGroup tabGroup) { }
+ @Override
+ public void visit(final Tab tab) { }
+ @Override
+ public void visit(final Column column) { }
+ @Override
+ public void visit(Property property) {}
+ @Override
+ public void visit(Collection collection) {}
+ @Override
+ public void visit(Action action) {}
+ }
+
+
+ public void traverse(final Visitor visitor) {
+ visitor.visit(this);
+ traverseActions(this, visitor);
+ final List<TabGroup> tabGroups = getTabGroups();
+ for (final TabGroup tabGroup : tabGroups) {
+ visitor.visit(tabGroup);
+ final List<Tab> tabs = tabGroup.getTabs();
+ for (final Tab tab : tabs) {
+ visitor.visit(tab);
+ traverseColumn(tab.getLeft(), visitor);
+ traverseColumn(tab.getMiddle(), visitor);
+ traverseColumn(tab.getRight(), visitor);
+ }
+ }
+ }
+
+ private void traverseColumn(final Column column, final Visitor visitor) {
+ visitor.visit(column);
+ traversePropertyGroups(column, visitor);
+ traverseCollections(column, visitor);
+ }
+
+ private void traversePropertyGroups(final Column column, final Visitor visitor) {
+ final Iterable<PropertyGroup> propertyGroups =
+ Iterables.transform(
+ Iterables.filter(column.getContent(), is(PropertyGroup.class)),
+ cast(PropertyGroup.class));
+ for (final PropertyGroup propertyGroup : propertyGroups) {
+ final List<Property> properties = propertyGroup.getProperties();
+ for (final Property property : properties) {
+ visitor.visit(property);
+ traverseActions(property, visitor);
+ }
+ }
+ }
+
+ private void traverseCollections(final Column column, final Visitor visitor) {
+ final Iterable<Collection> collections =
+ Iterables.transform(
+ Iterables.filter(column.getContent(), is(Collection.class)),
+ cast(Collection.class));
+ for (final Collection collection : collections) {
+ visitor.visit(collection);
+ traverseActions(collection, visitor);
+ }
+ }
+
+ private void traverseActions(final ActionHolder actionHolder, final Visitor visitor) {
+ final List<Action> actions = actionHolder.getActions();
+ for (final Action action : actions) {
+ visitor.visit(action);
+ }
+ }
+
+ private <F, T extends F> CastFunction<F, T> cast(final Class<T> cls) {
+ return new CastFunction<>();
+ }
+
+ private <F,T> Predicate<F> is(final Class<T> cls) {
+ return new Predicate<F>() {
+ @Override public boolean apply(@Nullable final F from) {
+ return cls.isAssignableFrom(from.getClass());
+ }
+ };
+ }
+
+ private static class CastFunction<F, T extends F> implements Function<F, T> {
+ @Override
+ public final T apply(final F from) {
+ return (T) from;
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/c1016285/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java
index ad29288..9e8136b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java
@@ -34,7 +34,7 @@ import com.google.common.collect.Lists;
, "layout"
}
)
-public class Property {
+public class Property implements ActionHolder {
private String id;
http://git-wip-us.apache.org/repos/asf/isis/blob/c1016285/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java
index 4aeebba..0b9b632 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java
@@ -37,7 +37,7 @@ import org.apache.isis.applib.annotation.MemberOrder;
, "properties"
}
)
-public class PropertyGroup implements ColumnContent {
+public class PropertyGroup implements ColumnContent, ActionHolder {
private String name;
http://git-wip-us.apache.org/repos/asf/isis/blob/c1016285/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java
index f515ccc..bbd2281 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java
@@ -18,16 +18,22 @@
*/
package org.apache.isis.core.metamodel.facets.object.layoutxml;
-
import java.util.List;
+import java.util.Map;
+import org.apache.isis.applib.layout.v1_0.Action;
+import org.apache.isis.applib.layout.v1_0.Collection;
+import org.apache.isis.applib.layout.v1_0.DomainObject;
+import org.apache.isis.applib.layout.v1_0.Property;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.applib.layout.v1_0.DomainObject;
-import org.apache.isis.applib.layout.v1_0.TabGroup;
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;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
public class LayoutXmlFacetDefault
@@ -74,12 +80,49 @@ public class LayoutXmlFacetDefault
private void doFleshOut(final DomainObject metadata) {
ObjectSpecification objectSpec = (ObjectSpecification) getFacetHolder();
- List<OneToOneAssociation> properties = getProperties(objectSpec);
- List<TabGroup> tabses = metadata.getTabGroups();
+
+ final List<OneToOneAssociation> oneToOneAssociations = getOneToOneAssociations(objectSpec);
+ final Map<String, OneToOneAssociation> oneToOneAssociationById = ObjectMember.Util.mapById(oneToOneAssociations);
+
+ final List<OneToManyAssociation> oneToManyAssociations = getOneToManyAssociations(objectSpec);
+ final Map<String, OneToManyAssociation> oneToManyAssociationById = ObjectMember.Util.mapById(oneToManyAssociations);
+
+ final List<ObjectAction> objectActions = objectSpec.getObjectActions(Contributed.INCLUDED);
+ final Map<String, ObjectAction> objectActionById = ObjectMember.Util.mapById(objectActions);
+
+ metadata.traverse(new DomainObject.VisitorAdapter() {
+ @Override
+ public void visit(final Property property) {
+ oneToOneAssociationById.remove(property.getId());
+ }
+ @Override
+ public void visit(final Collection collection) {
+ oneToManyAssociationById.remove(collection.getId());
+ }
+ @Override
+ public void visit(final Action action) {
+ objectActionById.remove(action.getId());
+ }
+ });
+
+ if(!oneToOneAssociationById.isEmpty()) {
+
+ }
+ if(!oneToManyAssociationById.isEmpty()) {
+
+ }
+ if(!objectActionById.isEmpty()) {
+
+ }
}
- private List getProperties(final ObjectSpecification objectSpec) {
+
+ private List getOneToOneAssociations(final ObjectSpecification objectSpec) {
+ return objectSpec
+ .getAssociations(Contributed.INCLUDED, ObjectAssociation.Filters.PROPERTIES);
+ }
+ private List getOneToManyAssociations(final ObjectSpecification objectSpec) {
return objectSpec
- .getAssociations(Contributed.INCLUDED, OneToOneAssociation.Filters.PROPERTIES);
+ .getAssociations(Contributed.INCLUDED, ObjectAssociation.Filters.COLLECTIONS);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/c1016285/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index 65f0115..a09c077 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -19,7 +19,6 @@ package org.apache.isis.core.metamodel.spec.feature;
import java.util.List;
-import com.google.common.base.Functions;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
@@ -452,9 +451,9 @@ public interface ObjectAction extends ObjectMember {
final List<ObjectAssociation> associations = adapterSpec.getAssociations(Contributed.INCLUDED);
final List<String> associationNames = Lists.transform(associations,
- Functions.compose(StringFunctions.toLowerCase(), ObjectAssociation.Functions.toName()));
+ com.google.common.base.Functions.compose(StringFunctions.toLowerCase(), ObjectAssociation.Functions.toName()));
final List<String> associationIds = Lists.transform(associations,
- Functions.compose(StringFunctions.toLowerCase(), ObjectAssociation.Functions.toId()));
+ com.google.common.base.Functions.compose(StringFunctions.toLowerCase(), ObjectAssociation.Functions.toId()));
return new Filter<ObjectAction>() {
http://git-wip-us.apache.org/repos/asf/isis/blob/c1016285/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
index 277c734..9d8fa15 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
@@ -19,6 +19,14 @@
package org.apache.isis.core.metamodel.spec.feature;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Maps;
+
import org.apache.isis.applib.annotation.When;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -154,4 +162,27 @@ public interface ObjectMember extends ObjectFeature {
}
}
+
+ class Functions {
+
+ private Functions(){}
+ public static Function<ObjectMember, String> getId() {
+ return new Function<ObjectMember, String>() {
+ @Nullable @Override public String apply(@Nullable final ObjectMember oneToOneAssociation) {
+ return oneToOneAssociation.getId();
+ }
+ };
+ }
+
+ }
+
+ class Util {
+
+ private Util(){}
+
+ public static <T extends ObjectMember> HashMap<String, T> mapById(final List<T> members) {
+ return Maps.newHashMap(Maps.uniqueIndex(members, ObjectMember.Functions.getId()));
+ }
+ }
+
}