ISIS-993: pretty much there on deriving and syncing the metamodel with the layout.xml info;
next step is to do the new Wicket views for the tabs themselves Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/499366fd Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/499366fd Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/499366fd Branch: refs/heads/ISIS-993 Commit: 499366fdc85478f82a746a6a9ad3815005c7d7d6 Parents: c93071b Author: Dan Haywood <d...@haywood-associates.co.uk> Authored: Thu Jan 7 02:19:42 2016 +0000 Committer: Dan Haywood <d...@haywood-associates.co.uk> Committed: Mon Jan 25 15:06:07 2016 +0000 ---------------------------------------------------------------------- .../apache/isis/applib/layout/v1_0/Action.java | 5 + .../isis/applib/layout/v1_0/Collection.java | 8 + .../apache/isis/applib/layout/v1_0/Column.java | 8 + .../isis/applib/layout/v1_0/DomainObject.java | 38 ++- .../isis/applib/layout/v1_0/Property.java | 7 + .../isis/applib/layout/v1_0/PropertyGroup.java | 7 + .../ActionPositionFacetForActionLayoutXml.java | 41 +++ .../BookmarkPolicyFacetForActionLayoutXml.java | 42 +++ .../CssClassFaFacetForActionLayoutXml.java | 45 ++++ .../layout/CssClassFacetForActionLayoutXml.java | 43 +++ .../DescribedAsFacetForActionLayoutXml.java | 43 +++ .../layout/HiddenFacetForActionLayoutXml.java | 52 ++++ .../layout/NamedFacetForActionLayoutXml.java | 45 ++++ ...tViewFacetForCollectionLayoutAnnotation.java | 41 --- ...ewFacetOnCollectionFromLayoutProperties.java | 46 ---- .../layout/CollectionLayoutFacetFactory.java | 2 - .../CssClassFacetForCollectionLayoutXml.java | 43 +++ ...tViewFacetForCollectionLayoutAnnotation.java | 43 +++ .../DefaultViewFacetForCollectionLayoutXml.java | 43 +++ ...ewFacetOnCollectionFromLayoutProperties.java | 48 ++++ .../DescribedAsFacetForCollectionLayoutXml.java | 43 +++ .../HiddenFacetForCollectionLayoutXml.java | 52 ++++ .../NamedFacetForCollectionLayoutXml.java | 48 ++++ .../PagedFacetForCollectionLayoutXml.java | 41 +++ .../SortedByFacetForCollectionLayoutXml.java | 52 ++++ .../order/annotprop/MemberOrderFacetXml.java | 35 +++ .../object/layoutxml/LayoutXmlFacetDefault.java | 270 +++++++++++++++++-- .../object/layoutxml/LayoutXmlFacetFactory.java | 4 +- .../CssClassFacetForPropertyLayoutXml.java | 43 +++ .../DescribedAsFacetForPropertyLayoutXml.java | 43 +++ .../HiddenFacetForPropertyLayoutXml.java | 52 ++++ .../LabelAtFacetForPropertyLayoutXml.java | 42 +++ .../MultiLineFacetForPropertyLayoutXml.java | 41 +++ .../NamedFacetForPropertyLayoutXml.java | 48 ++++ ...nderedAdjustedFacetForPropertyLayoutXml.java | 43 +++ .../TypicalLengthFacetForPropertyLayoutXml.java | 49 ++++ .../layoutxml/LayoutXmlFacetDefaultTest.java | 60 +++++ .../entity/tabbed/EntityTabbedPanel.html | 2 + .../entity/tabbed/EntityTabbedPanel.java | 13 +- .../dom/simple/SimpleObject.layout.xml | 3 +- 40 files changed, 1503 insertions(+), 131 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Action.java ---------------------------------------------------------------------- diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Action.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Action.java index d3ab3b3..05aa54f 100644 --- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Action.java +++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Action.java @@ -31,6 +31,11 @@ import javax.xml.bind.annotation.XmlType; ) public class Action { + public Action() { + } + public Action(final String id) { + setId(id); + } private String id; /** http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/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 6439807..4c48c2a 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 @@ -36,6 +36,14 @@ import com.google.common.collect.Lists; ) public class Collection implements ColumnContent, ActionHolder { + + public Collection() { + } + public Collection(final String id) { + setId(id); + } + + private String id; /** http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java ---------------------------------------------------------------------- diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java index e751c21..3ac724e 100644 --- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java +++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java @@ -35,6 +35,14 @@ import com.google.common.collect.Lists; ) public class Column { + + public Column() { + } + + public Column(final int span) { + setSpan(span); + } + private int span = 4; @XmlAttribute(required = true) http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/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 836a732..c1868fc 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 @@ -36,8 +36,7 @@ import org.apache.isis.applib.services.dto.Dto; @XmlRootElement @XmlType( - name="domain-object" - , propOrder = { + propOrder = { "actions" , "tabGroups" } @@ -75,12 +74,16 @@ public class DomainObject implements Dto, ActionHolder { 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); + void visit(PropertyGroup propertyGroup); + void visit(Property property); + void visit(@Nullable PropertyLayout propertyLayout, Property forProperty); + void visit(Collection collection); + void visit(@Nullable CollectionLayout collectionLayout, Collection forCollection); + void visit(Action action, ActionHolder holder); + void visit(@Nullable ActionLayout actionLayout, Action forAction); } public static class VisitorAdapter implements Visitor { @@ -93,15 +96,23 @@ public class DomainObject implements Dto, ActionHolder { @Override public void visit(final Column column) { } @Override + public void visit(PropertyGroup propertyGroup) {} + @Override public void visit(Property property) {} @Override + public void visit(@Nullable final PropertyLayout propertyLayout, final Property forProperty) { } + @Override public void visit(Collection collection) {} @Override - public void visit(Action action) {} + public void visit(@Nullable final CollectionLayout collectionLayout, final Collection forCollection) { } + @Override + public void visit(final Action action, final ActionHolder actionHolder) { } + @Override + public void visit(@Nullable final ActionLayout actionLayout, final Action forAction) { } } - public void traverse(final Visitor visitor) { + public void visit(final Visitor visitor) { visitor.visit(this); traverseActions(this, visitor); final List<TabGroup> tabGroups = getTabGroups(); @@ -118,20 +129,27 @@ public class DomainObject implements Dto, ActionHolder { } private void traverseColumn(final Column column, final Visitor visitor) { + if(column == null) { + return; + } visitor.visit(column); traversePropertyGroups(column, visitor); traverseCollections(column, visitor); } private void traversePropertyGroups(final Column column, final Visitor visitor) { + List<ColumnContent> content = column.getContent(); final Iterable<PropertyGroup> propertyGroups = Iterables.transform( - Iterables.filter(column.getContent(), is(PropertyGroup.class)), + Iterables.filter(content, is(PropertyGroup.class)), cast(PropertyGroup.class)); for (final PropertyGroup propertyGroup : propertyGroups) { + visitor.visit(propertyGroup); + traverseActions(propertyGroup, visitor); final List<Property> properties = propertyGroup.getProperties(); for (final Property property : properties) { visitor.visit(property); + visitor.visit(property.getLayout(), property); traverseActions(property, visitor); } } @@ -144,6 +162,7 @@ public class DomainObject implements Dto, ActionHolder { cast(Collection.class)); for (final Collection collection : collections) { visitor.visit(collection); + visitor.visit(collection.getLayout(), collection); traverseActions(collection, visitor); } } @@ -151,7 +170,8 @@ public class DomainObject implements Dto, ActionHolder { private void traverseActions(final ActionHolder actionHolder, final Visitor visitor) { final List<Action> actions = actionHolder.getActions(); for (final Action action : actions) { - visitor.visit(action); + visitor.visit(action, actionHolder); + visitor.visit(action.getLayout(), action); } } http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/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 9e8136b..d3ee9b2 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 @@ -36,6 +36,13 @@ import com.google.common.collect.Lists; ) public class Property implements ActionHolder { + public Property() { + } + + public Property(final String id) { + this.id = id; + } + private String id; /** http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/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 0b9b632..9d883fa 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 @@ -39,6 +39,13 @@ import org.apache.isis.applib.annotation.MemberOrder; ) public class PropertyGroup implements ColumnContent, ActionHolder { + public PropertyGroup() { + } + + public PropertyGroup(final String name) { + setName(name); + } + private String name; /** http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java new file mode 100644 index 0000000..c585b6b --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionPositionFacetForActionLayoutXml.java @@ -0,0 +1,41 @@ +/* + * 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.facets.actions.layout; + +import org.apache.isis.applib.layout.v1_0.ActionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet; +import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetAbstract; + +public class ActionPositionFacetForActionLayoutXml extends ActionPositionFacetAbstract { + + public static ActionPositionFacet create(ActionLayout actionLayout, FacetHolder holder) { + if(actionLayout == null) { + return null; + } + final org.apache.isis.applib.annotation.ActionLayout.Position position = actionLayout.getPosition(); + return position != null ? new ActionPositionFacetForActionLayoutXml(position, holder) : null; + } + + private ActionPositionFacetForActionLayoutXml(final org.apache.isis.applib.annotation.ActionLayout.Position position, final FacetHolder holder) { + super(position, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutXml.java new file mode 100644 index 0000000..f273e9a --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutXml.java @@ -0,0 +1,42 @@ +/* + * 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.facets.actions.layout; + +import org.apache.isis.applib.annotation.BookmarkPolicy; +import org.apache.isis.applib.layout.v1_0.ActionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet; +import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetAbstract; + +public class BookmarkPolicyFacetForActionLayoutXml extends BookmarkPolicyFacetAbstract { + + public static BookmarkPolicyFacet create(final ActionLayout actionLayout, final FacetHolder holder) { + if (actionLayout == null) { + return null; + } + final BookmarkPolicy bookmarkPolicy = actionLayout.getBookmarking(); + return bookmarkPolicy != null && bookmarkPolicy != BookmarkPolicy.NEVER ? new BookmarkPolicyFacetForActionLayoutXml(bookmarkPolicy, holder) : null; + } + + private BookmarkPolicyFacetForActionLayoutXml(final BookmarkPolicy bookmarkPolicy, final FacetHolder holder) { + super(bookmarkPolicy, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionLayoutXml.java new file mode 100644 index 0000000..285d705 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFaFacetForActionLayoutXml.java @@ -0,0 +1,45 @@ +/* + * 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.facets.actions.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.ActionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet; +import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacetAbstract; +import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition; + +public class CssClassFaFacetForActionLayoutXml extends CssClassFaFacetAbstract { + + public static CssClassFaFacet create(final ActionLayout actionLayout, final FacetHolder holder) { + if(actionLayout == null) { + return null; + } + final String cssClassFa = Strings.emptyToNull(actionLayout.getCssClassFa()); + CssClassFaPosition cssClassFaPosition = CssClassFaPosition.from(actionLayout.getCssClassFaPosition()); + return cssClassFa != null ? new CssClassFaFacetForActionLayoutXml(cssClassFa, cssClassFaPosition, holder) : null; + } + + private CssClassFaFacetForActionLayoutXml(final String value, final CssClassFaPosition position, final FacetHolder holder) { + super(value, position, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.java new file mode 100644 index 0000000..c242091 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/CssClassFacetForActionLayoutXml.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.facets.actions.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.ActionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet; +import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract; + +public class CssClassFacetForActionLayoutXml extends CssClassFacetAbstract { + + public static CssClassFacet create(ActionLayout actionLayout, FacetHolder holder) { + if(actionLayout == null) { + return null; + } + final String cssClass = Strings.emptyToNull(actionLayout.getCssClass()); + return cssClass != null ? new CssClassFacetForActionLayoutXml(cssClass, holder) : null; + } + + private CssClassFacetForActionLayoutXml(String value, FacetHolder holder) { + super(value, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/DescribedAsFacetForActionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/DescribedAsFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/DescribedAsFacetForActionLayoutXml.java new file mode 100644 index 0000000..493cd7f --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/DescribedAsFacetForActionLayoutXml.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.facets.actions.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.ActionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet; +import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacetAbstract; + +public class DescribedAsFacetForActionLayoutXml extends DescribedAsFacetAbstract { + + public static DescribedAsFacet create(ActionLayout actionLayout, FacetHolder holder) { + if(actionLayout == null) { + return null; + } + final String describedAs = Strings.emptyToNull(actionLayout.getDescribedAs()); + return describedAs != null ? new DescribedAsFacetForActionLayoutXml(describedAs, holder) : null; + } + + private DescribedAsFacetForActionLayoutXml(String value, FacetHolder holder) { + super(value, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java new file mode 100644 index 0000000..821083a --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java @@ -0,0 +1,52 @@ +/* + * 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.facets.actions.layout; + +import org.apache.isis.applib.annotation.When; +import org.apache.isis.applib.annotation.Where; +import org.apache.isis.applib.layout.v1_0.ActionLayout; +import org.apache.isis.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet; +import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract; + +public class HiddenFacetForActionLayoutXml extends HiddenFacetAbstract { + + public static HiddenFacet create(final ActionLayout actionLayout, final FacetHolder holder) { + if (actionLayout == null) { + return null; + } + final Where where = actionLayout.getHidden(); + return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForActionLayoutXml(where, holder) : null; + } + + private HiddenFacetForActionLayoutXml(final Where where, final FacetHolder holder) { + super(When.ALWAYS, where, holder); + } + + @Override + public String hiddenReason(final ObjectAdapter targetAdapter, final Where whereContext) { + if(!where().includes(whereContext)) { + return null; + } + return "Hidden on " + where().getFriendlyName(); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/NamedFacetForActionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/NamedFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/NamedFacetForActionLayoutXml.java new file mode 100644 index 0000000..a8917d6 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/NamedFacetForActionLayoutXml.java @@ -0,0 +1,45 @@ +/* + * 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.facets.actions.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.ActionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.all.named.NamedFacet; +import org.apache.isis.core.metamodel.facets.all.named.NamedFacetAbstract; + +public class NamedFacetForActionLayoutXml extends NamedFacetAbstract { + + public static NamedFacet create(final ActionLayout actionLayout, final FacetHolder holder) { + if(actionLayout == null) { + return null; + } + final String named = Strings.emptyToNull(actionLayout.getNamed()); + Boolean escaped = actionLayout.getNamedEscaped(); + return named != null ? new NamedFacetForActionLayoutXml(named, (escaped == null || escaped), holder) : null; + } + + private NamedFacetForActionLayoutXml(final String value, final boolean escaped, final FacetHolder holder) { + + super(value, escaped, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/defaultview/DefaultViewFacetForCollectionLayoutAnnotation.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/defaultview/DefaultViewFacetForCollectionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/defaultview/DefaultViewFacetForCollectionLayoutAnnotation.java deleted file mode 100644 index 437ab37..0000000 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/defaultview/DefaultViewFacetForCollectionLayoutAnnotation.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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.facets.collections.collection.defaultview; - -import com.google.common.base.Strings; - -import org.apache.isis.applib.annotation.CollectionLayout; -import org.apache.isis.core.metamodel.facetapi.FacetHolder; - -public class DefaultViewFacetForCollectionLayoutAnnotation extends DefaultViewFacetAbstract { - - private DefaultViewFacetForCollectionLayoutAnnotation(String value, FacetHolder holder) { - super(value, holder); - } - - public static DefaultViewFacet create(CollectionLayout collectionLayout, FacetHolder holder) { - if (collectionLayout == null) { - return null; - } - - final String defaultView = Strings.emptyToNull(collectionLayout.defaultView()); - return defaultView != null ? new DefaultViewFacetForCollectionLayoutAnnotation(defaultView, holder) : null; - } -} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/defaultview/DefaultViewFacetOnCollectionFromLayoutProperties.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/defaultview/DefaultViewFacetOnCollectionFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/defaultview/DefaultViewFacetOnCollectionFromLayoutProperties.java deleted file mode 100644 index 2926798..0000000 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/defaultview/DefaultViewFacetOnCollectionFromLayoutProperties.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.facets.collections.collection.defaultview; - -import java.util.Properties; - -import com.google.common.base.Strings; - -import org.apache.isis.core.metamodel.facetapi.FacetHolder; - -public class DefaultViewFacetOnCollectionFromLayoutProperties extends DefaultViewFacetAbstract { - - private DefaultViewFacetOnCollectionFromLayoutProperties(String defaultView, FacetHolder holder) { - super(defaultView, holder); - } - - public static DefaultViewFacet create(Properties properties, FacetHolder holder) { - final String defaultView = defaultView(properties); - return defaultView != null ? new DefaultViewFacetOnCollectionFromLayoutProperties(defaultView, holder) : null; - } - - public static String defaultView(Properties properties) { - if (properties == null) { - return null; - } - - return Strings.emptyToNull(properties.getProperty("defaultView")); - } -} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java index 7367664..2d7d8d2 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java @@ -31,8 +31,6 @@ import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet; import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.isis.core.metamodel.facets.all.named.NamedFacet; import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet; -import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacetForCollectionLayoutAnnotation; -import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacetOnCollectionFromLayoutProperties; import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet; import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.isis.core.metamodel.facets.members.render.RenderFacet; http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.java new file mode 100644 index 0000000..80f6132 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CssClassFacetForCollectionLayoutXml.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.facets.collections.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.CollectionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet; +import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract; + +public class CssClassFacetForCollectionLayoutXml extends CssClassFacetAbstract { + + public static CssClassFacet create(CollectionLayout collectionLayout, FacetHolder holder) { + if(collectionLayout == null) { + return null; + } + final String cssClass = Strings.emptyToNull(collectionLayout.getCssClass()); + return cssClass != null ? new CssClassFacetForCollectionLayoutXml(cssClass, holder) : null; + } + + private CssClassFacetForCollectionLayoutXml(String value, FacetHolder holder) { + super(value, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutAnnotation.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutAnnotation.java new file mode 100644 index 0000000..63c55d1 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutAnnotation.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.facets.collections.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.annotation.CollectionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet; +import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacetAbstract; + +public class DefaultViewFacetForCollectionLayoutAnnotation extends DefaultViewFacetAbstract { + + private DefaultViewFacetForCollectionLayoutAnnotation(String value, FacetHolder holder) { + super(value, holder); + } + + public static DefaultViewFacet create(CollectionLayout collectionLayout, FacetHolder holder) { + if (collectionLayout == null) { + return null; + } + + final String defaultView = Strings.emptyToNull(collectionLayout.defaultView()); + return defaultView != null ? new DefaultViewFacetForCollectionLayoutAnnotation(defaultView, holder) : null; + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.java new file mode 100644 index 0000000..b8d9056 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutXml.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.facets.collections.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.CollectionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet; +import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacetAbstract; + +public class DefaultViewFacetForCollectionLayoutXml extends DefaultViewFacetAbstract { + + private DefaultViewFacetForCollectionLayoutXml(String value, FacetHolder holder) { + super(value, holder); + } + + public static DefaultViewFacet create(CollectionLayout collectionLayout, FacetHolder holder) { + if (collectionLayout == null) { + return null; + } + + final String defaultView = Strings.emptyToNull(collectionLayout.getDefaultView()); + return defaultView != null ? new DefaultViewFacetForCollectionLayoutXml(defaultView, holder) : null; + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetOnCollectionFromLayoutProperties.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetOnCollectionFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetOnCollectionFromLayoutProperties.java new file mode 100644 index 0000000..288f190 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetOnCollectionFromLayoutProperties.java @@ -0,0 +1,48 @@ +/* + * 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.facets.collections.layout; + +import java.util.Properties; + +import com.google.common.base.Strings; + +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet; +import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacetAbstract; + +public class DefaultViewFacetOnCollectionFromLayoutProperties extends DefaultViewFacetAbstract { + + private DefaultViewFacetOnCollectionFromLayoutProperties(String defaultView, FacetHolder holder) { + super(defaultView, holder); + } + + public static DefaultViewFacet create(Properties properties, FacetHolder holder) { + final String defaultView = defaultView(properties); + return defaultView != null ? new DefaultViewFacetOnCollectionFromLayoutProperties(defaultView, holder) : null; + } + + public static String defaultView(Properties properties) { + if (properties == null) { + return null; + } + + return Strings.emptyToNull(properties.getProperty("defaultView")); + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DescribedAsFacetForCollectionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DescribedAsFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DescribedAsFacetForCollectionLayoutXml.java new file mode 100644 index 0000000..10241a1 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DescribedAsFacetForCollectionLayoutXml.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.facets.collections.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.CollectionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet; +import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacetAbstract; + +public class DescribedAsFacetForCollectionLayoutXml extends DescribedAsFacetAbstract { + + public static DescribedAsFacet create(CollectionLayout collectionLayout, FacetHolder holder) { + if(collectionLayout == null) { + return null; + } + final String describedAs = Strings.emptyToNull(collectionLayout.getDescribedAs()); + return describedAs != null ? new DescribedAsFacetForCollectionLayoutXml(describedAs, holder) : null; + } + + private DescribedAsFacetForCollectionLayoutXml(String value, FacetHolder holder) { + super(value, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java new file mode 100644 index 0000000..f362634 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/HiddenFacetForCollectionLayoutXml.java @@ -0,0 +1,52 @@ +/* + * 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.facets.collections.layout; + +import org.apache.isis.applib.annotation.When; +import org.apache.isis.applib.annotation.Where; +import org.apache.isis.applib.layout.v1_0.CollectionLayout; +import org.apache.isis.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet; +import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract; + +public class HiddenFacetForCollectionLayoutXml extends HiddenFacetAbstract { + + public static HiddenFacet create(final CollectionLayout collectionLayout, final FacetHolder holder) { + if (collectionLayout == null) { + return null; + } + final Where where = collectionLayout.getHidden(); + return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForCollectionLayoutXml(where, holder) : null; + } + + private HiddenFacetForCollectionLayoutXml(final Where where, final FacetHolder holder) { + super(When.ALWAYS, where, holder); + } + + @Override + public String hiddenReason(final ObjectAdapter targetAdapter, final Where whereContext) { + if(!where().includes(whereContext)) { + return null; + } + return "Hidden on " + where().getFriendlyName(); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/NamedFacetForCollectionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/NamedFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/NamedFacetForCollectionLayoutXml.java new file mode 100644 index 0000000..e9828d7 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/NamedFacetForCollectionLayoutXml.java @@ -0,0 +1,48 @@ +/* + * 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.facets.collections.layout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.CollectionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.all.named.NamedFacet; +import org.apache.isis.core.metamodel.facets.all.named.NamedFacetAbstract; + +public class NamedFacetForCollectionLayoutXml extends NamedFacetAbstract { + + public static NamedFacet create(CollectionLayout collectionLayout, FacetHolder holder) { + if(collectionLayout == null) { + return null; + } + final String named = Strings.emptyToNull(collectionLayout.getNamed()); + final Boolean escaped = collectionLayout.getNamedEscaped(); + return named != null ? new NamedFacetForCollectionLayoutXml(named, escaped == null || escaped, holder) : null; + } + + private NamedFacetForCollectionLayoutXml( + final String value, + final boolean escaped, + final FacetHolder holder) { + + super(value, escaped, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java new file mode 100644 index 0000000..f14abb1 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutXml.java @@ -0,0 +1,41 @@ +/* + * 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.facets.collections.layout; + +import org.apache.isis.applib.layout.v1_0.CollectionLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet; +import org.apache.isis.core.metamodel.facets.object.paged.PagedFacetAbstract; + +public class PagedFacetForCollectionLayoutXml extends PagedFacetAbstract { + + public static PagedFacet create(CollectionLayout collectionLayout, FacetHolder holder) { + if(collectionLayout == null) { + return null; + } + final Integer paged = collectionLayout.getPaged(); + return paged != null && paged != -1 ? new PagedFacetForCollectionLayoutXml(paged, holder) : null; + } + + private PagedFacetForCollectionLayoutXml(int paged, FacetHolder holder) { + super(paged, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java new file mode 100644 index 0000000..2030e45 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutXml.java @@ -0,0 +1,52 @@ +/* + * 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.facets.collections.layout; + +import java.util.Comparator; + +import org.apache.isis.applib.layout.v1_0.CollectionLayout; +import org.apache.isis.core.commons.lang.ClassUtil; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet; +import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacetAbstract; + +public class SortedByFacetForCollectionLayoutXml extends SortedByFacetAbstract { + + public static SortedByFacet create(CollectionLayout collectionLayout, FacetHolder holder) { + if(collectionLayout == null) { + return null; + } + final String sortedBy = collectionLayout.getSortedBy(); + if (sortedBy == null) { + return null; + } + final Class sortedByClass = ClassUtil.forName(sortedBy); + if(sortedByClass == Comparator.class) { + return null; + } + + return sortedByClass != null ? new SortedByFacetForCollectionLayoutXml(sortedByClass, holder) : null; + } + + private SortedByFacetForCollectionLayoutXml(Class<? extends Comparator<?>> sortedBy, FacetHolder holder) { + super(sortedBy, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/annotprop/MemberOrderFacetXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/annotprop/MemberOrderFacetXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/annotprop/MemberOrderFacetXml.java new file mode 100644 index 0000000..7830d32 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/annotprop/MemberOrderFacetXml.java @@ -0,0 +1,35 @@ +/* + * 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.facets.members.order.annotprop; + +import org.apache.isis.applib.services.i18n.TranslationService; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacetAbstract; + +public class MemberOrderFacetXml extends MemberOrderFacetAbstract { + + public MemberOrderFacetXml( + final String name, + final String sequence, + final TranslationService translationService, final FacetHolder holder) { + super(name, sequence, translationService, holder); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/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 bbd2281..e0b81d6 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 @@ -20,14 +20,52 @@ package org.apache.isis.core.metamodel.facets.object.layoutxml; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import org.apache.isis.applib.layout.v1_0.Action; +import org.apache.isis.applib.layout.v1_0.ActionHolder; +import org.apache.isis.applib.layout.v1_0.ActionLayout; import org.apache.isis.applib.layout.v1_0.Collection; +import org.apache.isis.applib.layout.v1_0.CollectionLayout; +import org.apache.isis.applib.layout.v1_0.Column; import org.apache.isis.applib.layout.v1_0.DomainObject; import org.apache.isis.applib.layout.v1_0.Property; +import org.apache.isis.applib.layout.v1_0.PropertyGroup; +import org.apache.isis.applib.layout.v1_0.PropertyLayout; +import org.apache.isis.applib.layout.v1_0.Tab; +import org.apache.isis.applib.layout.v1_0.TabGroup; +import org.apache.isis.applib.services.i18n.TranslationService; 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.core.metamodel.facetapi.FacetUtil; +import org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutXml; +import org.apache.isis.core.metamodel.facets.actions.layout.BookmarkPolicyFacetForActionLayoutXml; +import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFaFacetForActionLayoutXml; +import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFacetForActionLayoutXml; +import org.apache.isis.core.metamodel.facets.actions.layout.DescribedAsFacetForActionLayoutXml; +import org.apache.isis.core.metamodel.facets.actions.layout.HiddenFacetForActionLayoutXml; +import org.apache.isis.core.metamodel.facets.actions.layout.NamedFacetForActionLayoutXml; +import org.apache.isis.core.metamodel.facets.collections.layout.CssClassFacetForCollectionLayoutXml; +import org.apache.isis.core.metamodel.facets.collections.layout.DefaultViewFacetForCollectionLayoutXml; +import org.apache.isis.core.metamodel.facets.collections.layout.DescribedAsFacetForCollectionLayoutXml; +import org.apache.isis.core.metamodel.facets.collections.layout.HiddenFacetForCollectionLayoutXml; +import org.apache.isis.core.metamodel.facets.collections.layout.NamedFacetForCollectionLayoutXml; +import org.apache.isis.core.metamodel.facets.collections.layout.PagedFacetForCollectionLayoutXml; +import org.apache.isis.core.metamodel.facets.collections.layout.SortedByFacetForCollectionLayoutXml; +import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetXml; +import org.apache.isis.core.metamodel.facets.properties.propertylayout.CssClassFacetForPropertyLayoutXml; +import org.apache.isis.core.metamodel.facets.properties.propertylayout.DescribedAsFacetForPropertyLayoutXml; +import org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyLayoutXml; +import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyLayoutXml; +import org.apache.isis.core.metamodel.facets.properties.propertylayout.MultiLineFacetForPropertyLayoutXml; +import org.apache.isis.core.metamodel.facets.properties.propertylayout.NamedFacetForPropertyLayoutXml; +import org.apache.isis.core.metamodel.facets.properties.propertylayout.RenderedAdjustedFacetForPropertyLayoutXml; +import org.apache.isis.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyLayoutXml; 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; @@ -41,6 +79,7 @@ public class LayoutXmlFacetDefault implements LayoutXmlFacet { private final DomainObject metadata; + private final TranslationService translationService; public static Class<? extends Facet> type() { return LayoutXmlFacet.class; @@ -49,80 +88,255 @@ public class LayoutXmlFacetDefault public static LayoutXmlFacet create( final FacetHolder facetHolder, - final DomainObject domainObject) { + final DomainObject domainObject, + final TranslationService translationService) { if(domainObject == null) { return null; } - return new LayoutXmlFacetDefault(facetHolder, domainObject); + return new LayoutXmlFacetDefault(facetHolder, domainObject, translationService); } private LayoutXmlFacetDefault( final FacetHolder facetHolder, - final DomainObject metadata) { + final DomainObject metadata, + final TranslationService translationService) { super(LayoutXmlFacetDefault.type(), facetHolder, Derivation.NOT_DERIVED); this.metadata = metadata; + this.translationService = translationService; } - private boolean fleshedOut; + private boolean derivedAndSynced; public DomainObject getLayoutMetadata() { - return fleshedOut? metadata : fleshOut(metadata); + //return derivedAndSynced ? metadata : deriveAndSync(metadata); + return deriveAndSync(metadata); } - private DomainObject fleshOut(final DomainObject metadata) { + private DomainObject deriveAndSync(final DomainObject metadata) { synchronized (metadata) { - doFleshOut(metadata); - fleshedOut = true; + doDeriveAndSync(metadata); + derivedAndSynced = true; } return metadata; } - private void doFleshOut(final DomainObject metadata) { - ObjectSpecification objectSpec = (ObjectSpecification) getFacetHolder(); + private void doDeriveAndSync(final DomainObject metadata) { + + final ObjectSpecification objectSpec = (ObjectSpecification) getFacetHolder(); + final Map<String, OneToOneAssociation> oneToOneAssociationById = + ObjectMember.Util.mapById(getOneToOneAssociations(objectSpec)); + final Map<String, OneToManyAssociation> oneToManyAssociationById = + ObjectMember.Util.mapById(getOneToManyAssociations(objectSpec)); + final Map<String, ObjectAction> objectActionById = + ObjectMember.Util.mapById(objectSpec.getObjectActions(Contributed.INCLUDED)); - final List<OneToOneAssociation> oneToOneAssociations = getOneToOneAssociations(objectSpec); - final Map<String, OneToOneAssociation> oneToOneAssociationById = ObjectMember.Util.mapById(oneToOneAssociations); + derive(metadata, oneToOneAssociationById, oneToManyAssociationById, objectActionById); - final List<OneToManyAssociation> oneToManyAssociations = getOneToManyAssociations(objectSpec); - final Map<String, OneToManyAssociation> oneToManyAssociationById = ObjectMember.Util.mapById(oneToManyAssociations); + sync(metadata, oneToOneAssociationById, oneToManyAssociationById, objectActionById); + } - final List<ObjectAction> objectActions = objectSpec.getObjectActions(Contributed.INCLUDED); - final Map<String, ObjectAction> objectActionById = ObjectMember.Util.mapById(objectActions); + private void derive( + final DomainObject metadata, + final Map<String, OneToOneAssociation> oneToOneAssociationById, + final Map<String, OneToManyAssociation> oneToManyAssociationById, + final Map<String, ObjectAction> objectActionById) { + final List<String> propertyIds = Lists.newArrayList(); + final List<String> collectionIds = Lists.newArrayList(); + final List<String> actionIds = Lists.newArrayList(); + final AtomicReference<PropertyGroup> generalPropertyGroupRef = new AtomicReference<>(); + final AtomicReference<Column> firstColumnRef = new AtomicReference<>(); + final AtomicReference<TabGroup> lastTabGroupRef = new AtomicReference<>(); - metadata.traverse(new DomainObject.VisitorAdapter() { + metadata.visit(new DomainObject.VisitorAdapter() { @Override public void visit(final Property property) { - oneToOneAssociationById.remove(property.getId()); + propertyIds.add(property.getId()); } @Override public void visit(final Collection collection) { - oneToManyAssociationById.remove(collection.getId()); + collectionIds.add(collection.getId()); + } + @Override + public void visit(final Action action, final ActionHolder holder) { + actionIds.add(action.getId()); + } + @Override + public void visit(final Column column) { + firstColumnRef.compareAndSet(null, column); } @Override - public void visit(final Action action) { - objectActionById.remove(action.getId()); + public void visit(final PropertyGroup propertyGroup) { + if(propertyGroup.getName().equals("General")) { + generalPropertyGroupRef.compareAndSet(null, propertyGroup); + } + } + @Override + public void visit(final TabGroup tabGroup) { + lastTabGroupRef.set(tabGroup); } }); - if(!oneToOneAssociationById.isEmpty()) { + // any missing properties will be added to the (first) 'General' property group found + // if there is no 'General' property group then one will be added to the first Column of the first Tab. + final List<String> missingPropertyIds = Lists.newArrayList(oneToOneAssociationById.keySet()); + missingPropertyIds.removeAll(propertyIds); + if(!missingPropertyIds.isEmpty()) { + // ensure that there is a property group to use + boolean wasSet = generalPropertyGroupRef.compareAndSet(null, new PropertyGroup("General")); + final PropertyGroup generalPropertyGroup = generalPropertyGroupRef.get(); + if(wasSet) { + firstColumnRef.get().getContent().add(generalPropertyGroup); + } + Iterables.removeAll(propertyIds, oneToOneAssociationById.keySet()); + for (final String propertyId : missingPropertyIds) { + generalPropertyGroup.getProperties().add(new Property(propertyId)); + } } - if(!oneToManyAssociationById.isEmpty()) { + // any missing collections will be added as tabs to the last TabGroup. + // If there is only a single tab group then a new TabGroup will be added first + final List<String> missingCollectionIds = Lists.newArrayList(oneToManyAssociationById.keySet()); + missingCollectionIds.removeAll(collectionIds); + + if(!missingCollectionIds.isEmpty()) { + while(metadata.getTabGroups().size() < 2) { + final TabGroup tabGroup = new TabGroup(); + metadata.getTabGroups().add(tabGroup); + lastTabGroupRef.set(tabGroup); + } + final TabGroup lastTabGroup = lastTabGroupRef.get(); + for (final String collectionId : missingCollectionIds) { + final Tab tab = new Tab(); + lastTabGroup.getTabs().add(tab); + Column left = new Column(12); + tab.setLeft(left); + left.getContent().add(new Collection(collectionId)); + } } - if(!objectActionById.isEmpty()) { + // any missing actions will be added as domain object actions (in the header) + final List<String> missingActionIds = Lists.newArrayList(objectActionById.keySet()); + missingActionIds.removeAll(actionIds); + + if(!missingActionIds.isEmpty()) { + for (String actionId : missingActionIds) { + metadata.getActions().add(new Action(actionId)); + } } } + private void sync( + final DomainObject metadata, + final Map<String, OneToOneAssociation> oneToOneAssociationById, + final Map<String, OneToManyAssociation> oneToManyAssociationById, + final Map<String, ObjectAction> objectActionById) { + + metadata.visit(new DomainObject.VisitorAdapter() { + private int domainObjectSequence = 1; + private int propertyGroupSequence = 1; + private int propertySequence = 1; + private int collectionSequence = 1; + private Map<Action, ActionHolder> actionHolderByAction = Maps.newHashMap(); + @Override + public void visit(final Action action, final ActionHolder actionHolder) { + actionHolderByAction.put(action, actionHolder); + final ObjectAction objectAction = objectActionById.get(action.getId()); + final String memberOrderName; + final int memberOrderSequence; + if(actionHolder instanceof PropertyGroup) { + final PropertyGroup propertyGroup = (PropertyGroup) actionHolder; + final List<Property> properties = propertyGroup.getProperties(); + final Property property = properties.get(0); // any will do + memberOrderName = property.getId(); + memberOrderSequence = propertyGroupSequence++; + } else if(actionHolder instanceof Property) { + final Property property = (Property) actionHolder; + memberOrderName = property.getId(); + memberOrderSequence = propertySequence++; + } else if(actionHolder instanceof Collection) { + final Collection collection = (Collection) actionHolder; + memberOrderName = collection.getId(); + memberOrderSequence = collectionSequence++; + } else { + // DomainObject + memberOrderName = null; + memberOrderSequence = domainObjectSequence++; + } + FacetUtil.addFacet( + new MemberOrderFacetXml(memberOrderName, ""+memberOrderSequence, translationService, objectAction)); + } + @Override + public void visit(final ActionLayout actionLayout, final Action action) { + final ObjectAction objectAction = objectActionById.get(action.getId()); + final ActionHolder actionHolder = actionHolderByAction.get(action); + + final ActionLayout actionLayoutForPosition; + if(actionHolder instanceof PropertyGroup) { + // ensure that there is a non-null valid ActionLayout#position() + actionLayoutForPosition = actionLayout != null ? actionLayout : new ActionLayout(); + if( actionLayoutForPosition.getPosition() == null || + actionLayoutForPosition.getPosition() == org.apache.isis.applib.annotation.ActionLayout.Position.BELOW || + actionLayoutForPosition.getPosition() == org.apache.isis.applib.annotation.ActionLayout.Position.RIGHT) { + actionLayoutForPosition.setPosition(org.apache.isis.applib.annotation.ActionLayout.Position.PANEL); + } + } else if(actionHolder instanceof Property) { + // ensure that there is a non-null valid ActionLayout#position() + actionLayoutForPosition = actionLayout != null ? actionLayout : new ActionLayout(); + if( actionLayoutForPosition.getPosition() == null || + actionLayoutForPosition.getPosition() == org.apache.isis.applib.annotation.ActionLayout.Position.PANEL_DROPDOWN || + actionLayoutForPosition.getPosition() == org.apache.isis.applib.annotation.ActionLayout.Position.PANEL) { + actionLayoutForPosition.setPosition(org.apache.isis.applib.annotation.ActionLayout.Position.BELOW); + } + } else { + // doesn't do anything for DomainObject or Collection + actionLayoutForPosition = null; + } + FacetUtil.addFacet(ActionPositionFacetForActionLayoutXml.create(actionLayoutForPosition, objectAction)); + + FacetUtil.addFacet(BookmarkPolicyFacetForActionLayoutXml.create(actionLayout, objectAction)); + FacetUtil.addFacet(CssClassFacetForActionLayoutXml.create(actionLayout, objectAction)); + FacetUtil.addFacet(CssClassFaFacetForActionLayoutXml.create(actionLayout, objectAction)); + FacetUtil.addFacet(DescribedAsFacetForActionLayoutXml.create(actionLayout, objectAction)); + FacetUtil.addFacet(HiddenFacetForActionLayoutXml.create(actionLayout, objectAction)); + FacetUtil.addFacet(NamedFacetForActionLayoutXml.create(actionLayout, objectAction)); + } + @Override + public void visit(final PropertyLayout propertyLayout, final Property property) { + final OneToOneAssociation oneToOneAssociation = oneToOneAssociationById.get(property.getId()); + FacetUtil.addFacet(CssClassFacetForPropertyLayoutXml.create(propertyLayout, oneToOneAssociation)); + FacetUtil.addFacet(DescribedAsFacetForPropertyLayoutXml.create(propertyLayout, oneToOneAssociation)); + FacetUtil.addFacet(HiddenFacetForPropertyLayoutXml.create(propertyLayout, oneToOneAssociation)); + FacetUtil.addFacet(LabelAtFacetForPropertyLayoutXml.create(propertyLayout, oneToOneAssociation)); + FacetUtil.addFacet(MultiLineFacetForPropertyLayoutXml.create(propertyLayout, oneToOneAssociation)); + FacetUtil.addFacet(NamedFacetForPropertyLayoutXml.create(propertyLayout, oneToOneAssociation)); + FacetUtil.addFacet(RenderedAdjustedFacetForPropertyLayoutXml.create(propertyLayout, oneToOneAssociation)); + FacetUtil.addFacet(TypicalLengthFacetForPropertyLayoutXml.create(propertyLayout, oneToOneAssociation)); + } + @Override + public void visit(final CollectionLayout collectionLayout, final Collection collection) { + final OneToManyAssociation oneToManyAssociation = oneToManyAssociationById.get(collection.getId()); + FacetUtil.addFacet(CssClassFacetForCollectionLayoutXml.create(collectionLayout, oneToManyAssociation)); + FacetUtil.addFacet(DefaultViewFacetForCollectionLayoutXml.create(collectionLayout, oneToManyAssociation)); + FacetUtil.addFacet(DescribedAsFacetForCollectionLayoutXml.create(collectionLayout, oneToManyAssociation)); + FacetUtil.addFacet(HiddenFacetForCollectionLayoutXml.create(collectionLayout, oneToManyAssociation)); + FacetUtil.addFacet(NamedFacetForCollectionLayoutXml.create(collectionLayout, oneToManyAssociation)); + FacetUtil.addFacet(PagedFacetForCollectionLayoutXml.create(collectionLayout, oneToManyAssociation)); + FacetUtil.addFacet(SortedByFacetForCollectionLayoutXml.create(collectionLayout, oneToManyAssociation)); + } + }); + + } - private List getOneToOneAssociations(final ObjectSpecification objectSpec) { - return objectSpec + private List<OneToOneAssociation> getOneToOneAssociations(final ObjectSpecification objectSpec) { + List associations = objectSpec .getAssociations(Contributed.INCLUDED, ObjectAssociation.Filters.PROPERTIES); + return associations; } - private List getOneToManyAssociations(final ObjectSpecification objectSpec) { - return objectSpec + private List<OneToManyAssociation> getOneToManyAssociations(final ObjectSpecification objectSpec) { + List associations = objectSpec .getAssociations(Contributed.INCLUDED, ObjectAssociation.Filters.COLLECTIONS); + return associations; } } http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetFactory.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetFactory.java index 17d4063..606f34a 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetFactory.java @@ -24,6 +24,7 @@ import com.google.common.collect.Sets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.isis.applib.services.i18n.TranslationService; import org.apache.isis.applib.services.jaxb.JaxbService; import org.apache.isis.core.commons.lang.ClassExtensions; import org.apache.isis.core.metamodel.facetapi.FacetHolder; @@ -47,7 +48,8 @@ public class LayoutXmlFacetFactory extends FacetFactoryAbstract implements Servi final Class<?> cls = processClassContext.getCls(); final FacetHolder facetHolder = processClassContext.getFacetHolder(); - FacetUtil.addFacet(LayoutXmlFacetDefault.create(facetHolder, readMetadata(cls))); + final TranslationService translationService = servicesInjector.lookupService(TranslationService.class); + FacetUtil.addFacet(LayoutXmlFacetDefault.create(facetHolder, readMetadata(cls), translationService)); } private final Set<Class<?>> blacklisted = Sets.newConcurrentHashSet(); http://git-wip-us.apache.org/repos/asf/isis/blob/499366fd/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.java new file mode 100644 index 0000000..fb9bdb8 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/CssClassFacetForPropertyLayoutXml.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.facets.properties.propertylayout; + +import com.google.common.base.Strings; + +import org.apache.isis.applib.layout.v1_0.PropertyLayout; +import org.apache.isis.core.metamodel.facetapi.FacetHolder; +import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet; +import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract; + +public class CssClassFacetForPropertyLayoutXml extends CssClassFacetAbstract { + + public static CssClassFacet create(PropertyLayout propertyLayout, FacetHolder holder) { + if(propertyLayout == null) { + return null; + } + final String cssClass = Strings.emptyToNull(propertyLayout.getCssClass()); + return cssClass != null ? new CssClassFacetForPropertyLayoutXml(cssClass, holder) : null; + } + + private CssClassFacetForPropertyLayoutXml(String value, FacetHolder holder) { + super(value, holder); + } + +}