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);