You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by mg...@apache.org on 2015/01/05 21:49:16 UTC
isis git commit: ISIS-1000 Add a new Facet for
DomainObject#cssClass() method
Repository: isis
Updated Branches:
refs/heads/ISIS-1000-CssClassFacetMethod [created] c5c03a952
ISIS-1000 Add a new Facet for DomainObject#cssClass() method
For now the css class is used only for data table rows
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/c5c03a95
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/c5c03a95
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/c5c03a95
Branch: refs/heads/ISIS-1000-CssClassFacetMethod
Commit: c5c03a952432f375f6c808d249096129650d80dc
Parents: c53d299
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Mon Jan 5 22:48:09 2015 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Mon Jan 5 22:48:09 2015 +0200
----------------------------------------------------------------------
.../wicket/model/models/ModelAbstract.java | 4 +-
.../ajaxtable/IsisAjaxFallbackDataTable.java | 21 ++++++--
.../cssclass/method/CssClassFacetMethod.java | 50 +++++++++++++++++++
.../method/CssClassFacetMethodFactory.java | 52 ++++++++++++++++++++
.../metamodel/spec/ObjectSpecification.java | 9 ++++
.../specimpl/ObjectSpecificationAbstract.java | 11 +++++
.../dflt/ProgrammingModelFacetsJava5.java | 2 +
.../testspec/ObjectSpecificationStub.java | 5 ++
8 files changed, 148 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/c5c03a95/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
index 00c4512..ce17a7c 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
@@ -19,7 +19,6 @@
package org.apache.isis.viewer.wicket.model.models;
-import java.util.List;
import java.util.Map;
import com.google.common.collect.Maps;
import org.apache.wicket.Component;
@@ -27,7 +26,6 @@ import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.util.string.PrependingStringBuffer;
import org.apache.wicket.util.string.Strings;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -128,4 +126,4 @@ public abstract class ModelAbstract<T> extends LoadableDetachableModel<T> implem
return getPersistenceSession().getAdapterManager();
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/c5c03a95/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
index 84eabb0..509eb6a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
@@ -28,12 +28,14 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.data.table.NoRecordsToolbar;
+import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.repeater.IItemFactory;
import org.apache.wicket.markup.repeater.IItemReuseStrategy;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.OddEvenItem;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.lang.Generics;
+import org.apache.wicket.util.string.Strings;
import org.apache.isis.viewer.wicket.model.hints.IsisUiHintEvent;
import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
import org.apache.isis.viewer.wicket.model.hints.UiHintPathSignificant;
@@ -66,7 +68,7 @@ public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S> implements
}
private void buildGui() {
- headersToolbar = new IsisAjaxFallbackHeadersToolbar<S>(this, this.dataProvider);
+ headersToolbar = new IsisAjaxFallbackHeadersToolbar<>(this, this.dataProvider);
addTopToolbar(headersToolbar);
addBottomToolbar(new IsisAjaxNavigationToolbar(this));
addBottomToolbar(new NoRecordsToolbar(this));
@@ -75,7 +77,20 @@ public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S> implements
@Override
protected Item<T> newRowItem(final String id, final int index, final IModel<T> model)
{
- return new OddEvenItem<T>(id, index, model);
+ return new OddEvenItem<T>(id, index, model) {
+ @Override
+ protected void onComponentTag(ComponentTag tag) {
+ super.onComponentTag(tag);
+
+ if (model instanceof EntityModel) {
+ EntityModel entityModel = (EntityModel) model;
+ String cssClass = entityModel.getTypeOfSpecification().getCssClass(entityModel.getObject());
+ if (!Strings.isEmpty(cssClass)) {
+ tag.append("class", cssClass, " ");
+ }
+ }
+ }
+ };
}
static class PreserveModelReuseStrategy implements IItemReuseStrategy {
@@ -193,4 +208,4 @@ public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S> implements
return UiHintContainer.Util.hintContainerOf(this, EntityModel.class);
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/c5c03a95/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethod.java
new file mode 100644
index 0000000..67899df
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethod.java
@@ -0,0 +1,50 @@
+/*
+ * 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.cssclass.method;
+
+import java.lang.reflect.Method;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+
+public class CssClassFacetMethod extends CssClassFacetAbstract {
+
+ private final Method method;
+
+ public CssClassFacetMethod(final Method method, final FacetHolder holder) {
+ super(null, holder);
+ this.method = method;
+ }
+
+ @Override
+ public String value() {
+ throw new UnsupportedOperationException("This method shouldn't be called. Call #value(ObjectAdapter) instead.");
+ }
+
+// @Override
+ public String value(final ObjectAdapter owningAdapter) {
+ try {
+ return (String) ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
+ } catch (final RuntimeException ex) {
+ return null;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/c5c03a95/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java
new file mode 100644
index 0000000..b34bd30
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.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.object.cssclass.method;
+
+import java.lang.reflect.Method;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.MethodFinderUtils;
+import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+
+public class CssClassFacetMethodFactory extends MethodPrefixBasedFacetFactoryAbstract {
+
+ private static final String CSS_CLASS_PREFIX = "cssClass";
+
+ private static final String[] PREFIXES = { CSS_CLASS_PREFIX, };
+
+ public CssClassFacetMethodFactory() {
+ super(FeatureType.OBJECTS_ONLY, OrphanValidation.VALIDATE, PREFIXES);
+ }
+
+ @Override
+ public void process(final ProcessClassContext processClassContext) {
+ final Class<?> cls = processClassContext.getCls();
+ final FacetHolder facetHolder = processClassContext.getFacetHolder();
+
+ final Method method = MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, CSS_CLASS_PREFIX, String.class, NO_PARAMETERS_TYPES);
+ if (method == null) {
+ return;
+ }
+ processClassContext.removeMethod(method);
+ FacetUtil.addFacet(new CssClassFacetMethod(method, facetHolder));
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/c5c03a95/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index cc3f63e..051f430 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -199,6 +199,15 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
*/
String getIconName(ObjectAdapter object);
+ /**
+ * Returns the CSS class name to use for the specified object.
+ *
+ * <p>
+ * Corresponds to the {@link org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet#value()} value}
+ * returned by the {@link org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet}.
+ */
+ String getCssClass(ObjectAdapter object);
+
boolean isAbstract();
// //////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/c5c03a95/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index f582bf8..1e317e8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -55,6 +55,7 @@ import org.apache.isis.core.metamodel.facets.all.help.HelpFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.object.cssclass.method.CssClassFacetMethod;
import org.apache.isis.core.metamodel.facets.object.parented.ParentedFacet;
import org.apache.isis.core.metamodel.facets.object.dirty.ClearDirtyObjectFacet;
import org.apache.isis.core.metamodel.facets.object.dirty.IsDirtyObjectFacet;
@@ -157,6 +158,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
private TitleFacet titleFacet;
private IconFacet iconFacet;
+ private CssClassFacetMethod cssClassFacetMethod;
private IntrospectionState introspected = IntrospectionState.NOT_INTROSPECTED;
@@ -360,6 +362,10 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
titleFacet = getFacet(TitleFacet.class);
iconFacet = getFacet(IconFacet.class);
+ CssClassFacet cssClassFacet = getFacet(CssClassFacet.class);
+ if (cssClassFacet instanceof CssClassFacetMethod) {
+ cssClassFacetMethod = (CssClassFacetMethod) cssClassFacet;
+ }
this.persistability = determinePersistability();
}
@@ -414,6 +420,11 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return iconFacet == null ? null : iconFacet.iconName(reference);
}
+ @Override
+ public String getCssClass(final ObjectAdapter reference) {
+ return cssClassFacetMethod == null ? null : cssClassFacetMethod.value(reference);
+ }
+
// //////////////////////////////////////////////////////////////////////
// Specification
// //////////////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/c5c03a95/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 6027aeb..febdc24 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
@@ -87,6 +87,7 @@ import org.apache.isis.core.metamodel.facets.object.choices.boundedannot.Choices
import org.apache.isis.core.metamodel.facets.object.choices.boundedmarkerifc.ChoicesFacetFromBoundedMarkerInterfaceFactory;
import org.apache.isis.core.metamodel.facets.object.choices.enums.EnumFacetUsingValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.object.cssclass.annotation.CssClassFacetOnTypeAnnotationFactory;
+import org.apache.isis.core.metamodel.facets.object.cssclass.method.CssClassFacetMethodFactory;
import org.apache.isis.core.metamodel.facets.object.cssclassfa.annotation.annotation.CssClassFaFacetOnTypeAnnotationFactory;
import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
import org.apache.isis.core.metamodel.facets.object.describedas.annotation.DescribedAsFacetOnTypeAnnotationFactory;
@@ -319,6 +320,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
// objects
addFactory(ObjectFacetSpecIdAnnotationFactory.class);
addFactory(IconFacetMethodFactory.class);
+ addFactory(CssClassFacetMethodFactory.class);
addFactory(CreatedCallbackFacetFactory.class);
addFactory(LoadCallbackFacetFactory.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/c5c03a95/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 38f7b58..d2d4816 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -210,6 +210,11 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
}
@Override
+ public String getCssClass(final ObjectAdapter reference) {
+ return null;
+ }
+
+ @Override
public ObjectAction getObjectAction(final ActionType type, final String name, final List<ObjectSpecification> parameters) {
if (action != null && action.getId().equals(name)) {
return action;