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 2015/11/13 18:57:20 UTC

[09/11] isis git commit: ISIS-1252: adding support for icons via UI event.

ISIS-1252: adding support for icons via UI event.


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

Branch: refs/heads/master
Commit: d556d519e83581224153395789aa550c1810812b
Parents: ffb62e9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Nov 13 13:53:42 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Nov 13 13:53:42 2015 +0000

----------------------------------------------------------------------
 .../isis/applib/DomainObjectContainer.java      |  11 ++
 .../DomainObjectLayoutFacetFactory.java         |   3 +
 ...nObjectLayoutAnnotationUsingIconUiEvent.java | 103 +++++++++++++++++++
 .../container/DomainObjectContainerDefault.java |  11 ++
 .../dflt/ProgrammingModelFacetsJava5.java       |   7 +-
 5 files changed, 131 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/d556d519/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java b/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
index d26c8b7..e97df0c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
@@ -48,6 +48,17 @@ public interface DomainObjectContainer {
 
     //endregion
 
+    //region > iconNameOf
+
+    /**
+     * Return the icon name of the object, as rendered in the UI by the
+     * Isis viewers.
+     */
+    @Programmatic
+    String iconNameOf(Object domainObject);
+
+    //endregion
+
     //region > resolve, objectChanged
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/d556d519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
index 088b7b3..7bb700e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
@@ -45,6 +45,9 @@ public class DomainObjectLayoutFacetFactory extends FacetFactoryAbstract impleme
         FacetUtil.addFacet(
                 TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.create(
                         domainObjectLayout, servicesInjector, facetHolder));
+        FacetUtil.addFacet(
+                IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.create(
+                        domainObjectLayout, servicesInjector, facetHolder));
 
         FacetUtil.addFacet(
                 CssClassFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));

http://git-wip-us.apache.org/repos/asf/isis/blob/d556d519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
new file mode 100644
index 0000000..ffe01b9
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
@@ -0,0 +1,103 @@
+/*
+ *  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.object.domainobjectlayout;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.NonRecoverableException;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.IconUiEvent;
+import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.icon.IconFacetAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent extends IconFacetAbstract {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.class);
+
+    public static Facet create(
+            final DomainObjectLayout domainObjectLayout,
+            final ServicesInjector servicesInjector,
+            final FacetHolder facetHolder) {
+        if(domainObjectLayout == null) {
+            return null;
+        }
+        final Class<? extends IconUiEvent<?>> iconUiEventClass = domainObjectLayout.iconUiEvent();
+
+        final TranslationService translationService = servicesInjector.lookupService(TranslationService.class);
+        final ObjectSpecification facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
+        final String translationContext = facetHolderAsSpec.getCorrespondingClass().getCanonicalName();
+        final EventBusService eventBusService = servicesInjector.lookupService(EventBusService.class);
+
+        return new IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent(
+                iconUiEventClass, translationService, translationContext, eventBusService, facetHolder);
+    }
+
+    private final Class<? extends IconUiEvent<?>> iconUiEventClass;
+    private final TranslationService translationService;
+    private final String translationContext;
+    private final EventBusService eventBusService;
+
+    public IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent(
+            final Class<? extends IconUiEvent<?>> iconUiEventClass,
+            final TranslationService translationService,
+            final String translationContext,
+            final EventBusService eventBusService,
+            final FacetHolder holder) {
+        super(holder);
+        this.iconUiEventClass = iconUiEventClass;
+        this.translationService = translationService;
+        this.translationContext = translationContext;
+        this.eventBusService = eventBusService;
+    }
+
+    @Override
+    public String iconName(final ObjectAdapter owningAdapter) {
+
+        final IconUiEvent<Object> iconUiEvent = newIconUiEvent(owningAdapter);
+
+        eventBusService.post(iconUiEvent);
+
+        final String iconName = iconUiEvent.getIconName();
+        return iconName; // could be null
+    }
+
+    private IconUiEvent<Object> newIconUiEvent(final ObjectAdapter owningAdapter) {
+        final Object domainObject = owningAdapter.getObject();
+        return newIconUiEvent(domainObject);
+    }
+
+    private IconUiEvent<Object> newIconUiEvent(final Object domainObject) {
+        try {
+            final IconUiEvent<Object> iconUiEvent = (IconUiEvent<Object>) iconUiEventClass.newInstance();
+            iconUiEvent.setSource(domainObject);
+            return iconUiEvent;
+        } catch (InstantiationException | IllegalAccessException ex) {
+            throw new NonRecoverableException(ex);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/d556d519/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
index ea6b4ff..2040475 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
@@ -105,6 +105,17 @@ public class DomainObjectContainerDefault
 
     //endregion
 
+    //region > iconNameOf
+
+    @Programmatic
+    @Override
+    public String iconNameOf(final Object domainObject) {
+        final ObjectAdapter objectAdapter = adapterManager.adapterFor(unwrapped(domainObject));
+        return objectAdapter.getSpecification().getIconName(objectAdapter);
+    }
+
+    //endregion
+
     //region > newXxxInstance, remove
 
     @Programmatic

http://git-wip-us.apache.org/repos/asf/isis/blob/d556d519/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 37b50d2..417297f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -295,10 +295,6 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(HideForContextFacetViaMethodFactory.class);
         addFactory(RenderFacetOrResolveFactory.class);
 
-        // objects
-        addFactory(IconFacetMethodFactory.class);
-        addFactory(CssClassFacetMethodFactory.class);
-
         addFactory(CreatedCallbackFacetFactory.class);
         addFactory(LoadCallbackFacetFactory.class);
         addFactory(PersistCallbackViaSaveMethodFacetFactory.class);
@@ -404,6 +400,9 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(TitleAnnotationFacetFactory.class);
         addFactory(TitleFacetViaMethodsFactory.class);
 
+        addFactory(IconFacetMethodFactory.class);
+        addFactory(CssClassFacetMethodFactory.class);
+
         addFactory(NamedFacetOnTypeAnnotationFactory.class);
         addFactory(NamedFacetOnMemberFactory.class);
         addFactory(NamedFacetOnParameterAnnotationFactory.class);