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/03/03 11:38:24 UTC

[1/2] isis git commit: ISIS-993: only include entities and view models' layouts in zip file from MetadataMenu#downloadLayouts (XML)

Repository: isis
Updated Branches:
  refs/heads/ISIS-993 bf1288c28 -> 7628fc9d3


ISIS-993: only include entities and view models' layouts in zip file from MetadataMenu#downloadLayouts (XML)


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/2c629125
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/2c629125
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/2c629125

Branch: refs/heads/ISIS-993
Commit: 2c62912527240861e2d26bbfac470f06dde70111
Parents: bf1288c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 2 18:12:20 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 2 18:12:20 2016 +0000

----------------------------------------------------------------------
 .../services/metamodel/MetadataMenu.java         | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/2c629125/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
index 2872f1e..bcec6c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
@@ -27,9 +27,11 @@ import java.util.zip.ZipOutputStream;
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
 import javax.inject.Inject;
+import javax.xml.bind.Marshaller;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableMap;
 
 import org.apache.isis.applib.FatalException;
 import org.apache.isis.applib.IsisApplibModule;
@@ -46,9 +48,11 @@ import org.apache.isis.applib.layout.component.Grid;
 import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.services.layout.GridService;
 import org.apache.isis.applib.value.Blob;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpiAware;
+import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
 
 @DomainService(
         nature = NatureOfService.VIEW_MENU_ONLY
@@ -99,9 +103,8 @@ public class MetadataMenu implements SpecificationLoaderSpiAware {
                     @Override
                     public boolean apply(final ObjectSpecification input) {
                         return  !input.isAbstract() &&
-                                !input.isService() &&
-                                !input.isValue() &&
-                                !input.isParentedOrFreeCollection();
+                                (input.containsDoOpFacet(JdoPersistenceCapableFacet.class) ||
+                                 input.containsDoOpFacet(ViewModelFacet.class));
                     }});
         try {
             final ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -112,7 +115,11 @@ public class MetadataMenu implements SpecificationLoaderSpiAware {
                 final Grid grid = gridService.toGrid(domainClass, style);
                 if(grid != null) {
                     zos.putNextEntry(new ZipEntry(zipEntryNameFor(objectSpec)));
-                    String xml = jaxbService.toXml(grid);
+                    final String xml = jaxbService.toXml(grid,
+                            ImmutableMap.<String,Object>of(
+                                    Marshaller.JAXB_SCHEMA_LOCATION,
+                                    gridService.tnsAndSchemaLocation(grid)
+                            ));
                     writer.write(xml);
                     writer.flush();
                     zos.closeEntry();
@@ -126,6 +133,10 @@ public class MetadataMenu implements SpecificationLoaderSpiAware {
         }
     }
 
+    public GridService.Style default0DownloadLayouts() {
+        return GridService.Style.NORMALIZED;
+    }
+
     private static String zipEntryNameFor(final ObjectSpecification objectSpec) {
         final String fqn = objectSpec.getFullIdentifier();
         return fqn.replace(".", File.separator)+".layout.xml";


[2/2] isis git commit: ISIS-993: ensure columns in tables are rendered in correct order (require eagerly obtaining grid); also when rendering, ignore any invalid properties/collections/actions.

Posted by da...@apache.org.
ISIS-993: ensure columns in tables are rendered in correct order (require eagerly obtaining grid); also when rendering, ignore any invalid properties/collections/actions.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/7628fc9d
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/7628fc9d
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/7628fc9d

Branch: refs/heads/ISIS-993
Commit: 7628fc9d309c8a58ca9f9bbe1e29fa5c5cc044e6
Parents: 2c62912
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Mar 3 10:38:07 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Mar 3 10:38:07 2016 +0000

----------------------------------------------------------------------
 .../metamodel/spec/feature/ObjectMember.java    | 13 ++++++++++-
 .../CollectionContentsAsAjaxTablePanel.java     | 23 +++++++++++++++++---
 .../entity/fieldset/PropertyGroup.java          | 11 ++++++++--
 .../ui/components/layout/bs3/col/Col.java       | 14 +++++++++++-
 .../wicket/ui/pages/entity/EntityPage.java      | 21 +++---------------
 5 files changed, 57 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/7628fc9d/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 147cc61..b099991 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
@@ -26,6 +26,7 @@ import java.util.List;
 import javax.annotation.Nullable;
 
 import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 
 import org.apache.isis.applib.annotation.When;
@@ -184,7 +185,17 @@ public interface ObjectMember extends ObjectFeature {
         private Util(){}
 
         public static <T extends ObjectMember> HashMap<String, T> mapById(final List<T> members) {
-            return Maps.newHashMap(Maps.uniqueIndex(members, ObjectMember.Functions.getId()));
+
+            // fails if there are multiple members with the same id...
+            //            return Maps.newHashMap(Maps.uniqueIndex(members, ObjectMember.Functions.getId()));
+
+            final HashMap<String, T> memberById = Maps.newHashMap();
+            for (T member : members) {
+                final String id = Functions.getId().apply(member);
+                // if there are multiple members with same id, just disregard
+                memberById.put(id, member);
+            }
+            return memberById;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7628fc9d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index 11bef5c..836fe87 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -34,11 +34,13 @@ import org.apache.wicket.model.Model;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.filter.Filters;
+import org.apache.isis.applib.layout.component.Grid;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 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.object.grid.GridFacet;
 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.ObjectAssociation;
@@ -142,15 +144,30 @@ public class CollectionContentsAsAjaxTablePanel
 
 
 
-    private void addTitleColumn(final List<IColumn<ObjectAdapter,String>> columns, ObjectAdapterMemento parentAdapterMementoIfAny, int maxTitleParented, int maxTitleStandalone) {
-        int maxTitleLength = getModel().isParented()? maxTitleParented: maxTitleStandalone;
+    private void addTitleColumn(
+            final List<IColumn<ObjectAdapter,String>> columns,
+            final ObjectAdapterMemento parentAdapterMementoIfAny,
+            final int maxTitleParented,
+            final int maxTitleStandalone) {
+        final int maxTitleLength = getModel().isParented()? maxTitleParented: maxTitleStandalone;
         columns.add(new ObjectAdapterTitleColumn(parentAdapterMementoIfAny, maxTitleLength));
     }
 
     private void addPropertyColumnsIfRequired(final List<IColumn<ObjectAdapter,String>> columns) {
         final ObjectSpecification typeOfSpec = getModel().getTypeOfSpecification();
 
-        final Where whereContext = 
+        // same code also appears in EntityPage.
+        // we need to do this here otherwise any tables will render the columns in the wrong order until at least
+        // one object of that type has been rendered via EntityPage.
+        final GridFacet gridFacet = typeOfSpec.getFacet(GridFacet.class);
+        if(gridFacet != null) {
+            // the facet should always exist, in fact
+            // just enough to ask for the metadata.
+            // This will cause the current ObjectSpec to be updated as a side effect.
+            final Grid unused = gridFacet.getGrid();
+        }
+
+        final Where whereContext =
                 getModel().isParented()
                     ? Where.PARENTED_TABLES
                     : Where.STANDALONE_TABLES;

http://git-wip-us.apache.org/repos/asf/isis/blob/7628fc9d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
index a1810bf..e77dfab 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
@@ -97,9 +97,16 @@ public class PropertyGroup extends PanelAbstract<EntityModel> implements HasDyna
         div.add(propertyRv);
 
         final ImmutableList<ObjectAssociation> visibleAssociations = FluentIterable.from(properties)
+                .filter(new Predicate<PropertyLayoutData>() {
+                    @Override
+                    public boolean apply(final PropertyLayoutData propertyLayoutData) {
+                        return propertyLayoutData.getMetadataError() == null;
+                    }
+                })
                 .transform(new Function<PropertyLayoutData, ObjectAssociation>() {
-                    @Override public ObjectAssociation apply(final PropertyLayoutData propertyLayoutData) {
-                        return adapter.getSpecification().getAssociation(propertyLayoutData.getId());
+                    @Override
+                    public ObjectAssociation apply(final PropertyLayoutData propertyLayoutData) {
+                        return  adapter.getSpecification().getAssociation(propertyLayoutData.getId());
                     }
                 })
                 .filter(new Predicate<ObjectAssociation>() {

http://git-wip-us.apache.org/repos/asf/isis/blob/7628fc9d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
index 132218f..53c8cae 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
@@ -131,6 +131,11 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
         final List<ActionLayoutData> actionLayoutDatas = bs3Col.getActions();
         final List<ObjectAction> visibleActions =
             FluentIterable.from(actionLayoutDatas)
+                    .filter(new Predicate<ActionLayoutData>() {
+                        @Override public boolean apply(final ActionLayoutData actionLayoutData) {
+                            return actionLayoutData.getMetadataError() == null;
+                        }
+                    })
                     .transform(new Function<ActionLayoutData, ObjectAction>() {
                         @Nullable @Override public ObjectAction apply(@Nullable final ActionLayoutData actionLayoutData) {
                             return getModel().getTypeOfSpecification().getObjectAction(actionLayoutData.getId());
@@ -252,7 +257,14 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
 
 
         // collections
-        final List<CollectionLayoutData> collections = bs3Col.getCollections();
+        final List<CollectionLayoutData> collections =
+                FluentIterable.from(bs3Col.getCollections()).filter(
+                    new Predicate<CollectionLayoutData>() {
+                        @Override
+                        public boolean apply(final CollectionLayoutData collectionLayoutData) {
+                            return collectionLayoutData.getMetadataError() == null;
+                        }
+                    }).toList();
         if(!collections.isEmpty()) {
             final RepeatingViewWithDynamicallyVisibleContent collectionRv =
                     new RepeatingViewWithDynamicallyVisibleContent(ID_COLLECTIONS);

http://git-wip-us.apache.org/repos/asf/isis/blob/7628fc9d/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index f1d05e1..5c5a507 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -36,6 +36,7 @@ import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -130,29 +131,13 @@ public class EntityPage extends PageAbstract {
             throw new ObjectMember.AuthorizationException();
         }
 
-
-
-
-        //
-        // invalidate the cache so that can do dynamic reloading of layout metadata etc.
-        //
-        final GridFacet facet = entityModel.getTypeOfSpecification()
-                .getFacet(GridFacet.class);
+        final ObjectSpecification objectSpec = entityModel.getTypeOfSpecification();
+        final GridFacet facet = objectSpec.getFacet(GridFacet.class);
         if(facet != null) {
             // the facet should always exist, in fact
             // just enough to ask for the metadata.
             // This will cause the current ObjectSpec to be updated as a side effect.
-
-            // if none, then fallback to invalidating entire cache
-            // (this is the original LayoutMetadataFromJson behaviour)
-
-//            if(!getDeploymentType().isProduction()) {
-//                getSpecificationLoader().invalidateCacheFor(objectAdapter.getObject());
-//            }
-
-            // as a side-effect, this will update facets
             final Grid unused = facet.getGrid();
-
         }