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/01/07 00:26:22 UTC
[44/47] isis git commit: ISIS-1000: generalizing CssClassFacet to
accept an (optional) ObjectAdapter
ISIS-1000: generalizing CssClassFacet to accept an (optional) ObjectAdapter
This allows the same facet to be used for the object-level cssClass() (corresponding to CssClassFacetMethod) as well as the member-level @XxxLayout(cssClass=...) annotations. It also opens up the possibility of member-level CSS being dynamic (per object instance) in the future.
Also, updated todoapp to demonstrate the feature (completed items are rendered in tables with a line-through and lightgrey).
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/21065af2
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/21065af2
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/21065af2
Branch: refs/heads/ISIS-985
Commit: 21065af2853d8d76c81086ef777314b4d104d1ee
Parents: 1db029f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jan 5 23:33:14 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Jan 6 20:15:33 2015 +0000
----------------------------------------------------------------------
.../entityactions/AdditionalLinksPanel.java | 5 ++---
.../entityactions/EntityActionLinkFactory.java | 14 ++++++------
.../actionmenu/serviceactions/CssMenuItem.java | 18 +--------------
.../ServiceActionLinkFactory.java | 2 +-
.../collection/bulk/BulkActionsLinkFactory.java | 2 +-
.../ajaxtable/IsisAjaxFallbackDataTable.java | 12 +++++-----
.../collections/EntityCollectionsPanel.java | 4 +++-
.../entity/combined/EntityCombinedPanel.java | 7 ++++--
.../components/scalars/ScalarPanelAbstract.java | 5 ++++-
.../linkandlabel/ActionLinkFactoryAbstract.java | 8 +++++--
.../viewer/wicket/ui/util/CssClassAppender.java | 18 +++++++++++++--
.../facets/members/cssclass/CssClassFacet.java | 12 +++++-----
.../members/cssclass/CssClassFacetAbstract.java | 19 +++++++++++-----
.../cssclass/method/CssClassFacetMethod.java | 23 ++++++++++++--------
.../json/LayoutMetadataReaderFromJson.java | 4 ++--
.../metamodel/spec/ObjectSpecification.java | 11 +---------
.../metamodel/spec/feature/ObjectAction.java | 14 +++++-------
.../specimpl/ObjectSpecificationAbstract.java | 16 +++-----------
...ClassAnnotationOnMemberFacetFactoryTest.java | 2 +-
...ssClassFacetOnTypeAnnotationFactoryTest.java | 2 +-
.../testspec/ObjectSpecificationStub.java | 7 +-----
.../dom/src/main/java/dom/todo/ToDoItem.java | 3 +++
.../webapp/src/main/webapp/css/application.css | 7 ++++++
23 files changed, 111 insertions(+), 104 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
index 5724453..3fd13d6 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
@@ -118,9 +118,8 @@ public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> {
link.add(new CssClassAppender(linkAndLabel.getActionIdentifier()));
final String cssClass = linkAndLabel.getCssClass();
- if(cssClass != null) {
- link.add(new CssClassAppender(cssClass));
- }
+ CssClassAppender.appendCssClassTo(link, cssClass);
+
viewTitleLabel.add(new CssClassAppender(StringExtensions.asLowerDashed(linkAndLabel.getLabel())));
link.addOrReplace(viewTitleLabel);
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
index 654cf02..67ebf38 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
@@ -51,31 +51,31 @@ public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
final ObjectAction action,
final String linkId) {
- final ObjectAdapter adapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
+ final ObjectAdapter objectAdapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
- final Boolean persistent = adapter.representsPersistent();
+ final Boolean persistent = objectAdapter.representsPersistent();
if (!persistent) {
- throw new IllegalArgumentException("Object '" + adapter.titleString(null) + "' is not persistent.");
+ throw new IllegalArgumentException("Object '" + objectAdapter.titleString(null) + "' is not persistent.");
}
// check visibility and whether enabled
final AuthenticationSession session = getAuthenticationSession();
- final Consent visibility = action.isVisible(session, adapter, Where.OBJECT_FORMS);
+ final Consent visibility = action.isVisible(session, objectAdapter, Where.OBJECT_FORMS);
if (visibility.isVetoed()) {
return null;
}
- final AbstractLink link = newLink(linkId, adapter, action);
+ final AbstractLink link = newLink(linkId, objectAdapter, action);
- final Consent usability = action.isUsable(session, adapter, Where.OBJECT_FORMS);
+ final Consent usability = action.isUsable(session, objectAdapter, Where.OBJECT_FORMS);
final String disabledReasonIfAny = usability.getReason();
if(disabledReasonIfAny != null) {
link.setEnabled(false);
}
- return newLinkAndLabel(action, link, disabledReasonIfAny);
+ return newLinkAndLabel(objectAdapter, action, link, disabledReasonIfAny);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
index b06bc95..8e9a6ae 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
@@ -39,8 +39,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
-import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
-import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -114,25 +112,11 @@ class CssMenuItem implements Serializable {
return this;
}
- public Builder withFacet(CssClassFacet facet) {
- if(facet != null) {
- withCssClass(facet.value());
- }
- return this;
- }
-
public Builder withCssClass(String cssClass) {
cssMenuItem.setCssClass(cssClass);
return this;
}
- public Builder withFacet(CssClassFaFacet facet) {
- if(facet != null) {
- withCssClassFa(facet.value());
- }
- return this;
- }
-
public Builder withCssClassFa(String cssClassFa) {
cssMenuItem.setCssClassFa(cssClassFa);
return this;
@@ -346,7 +330,7 @@ class CssMenuItem implements Serializable {
.prototyping(ObjectAction.Utils.isExplorationOrPrototype(objectAction))
.separator(separator)
.withActionIdentifier(ObjectAction.Utils.actionIdentifierFor(objectAction))
- .withCssClass(ObjectAction.Utils.cssClassFor(objectAction))
+ .withCssClass(ObjectAction.Utils.cssClassFor(objectAction, adapter))
.withCssClassFa(ObjectAction.Utils.cssClassFaFor(objectAction))
.withCssClassFaPosition(ObjectAction.Utils.cssClassFaPositionFor(objectAction));
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
index d9b3b6d..2aa97ba 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
@@ -42,7 +42,7 @@ class ServiceActionLinkFactory extends ActionLinkFactoryAbstract {
final AbstractLink link = newLink(linkId, objectAdapter, action);
- return newLinkAndLabel(action, link, null);
+ return newLinkAndLabel(objectAdapter, action, link, null);
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
index 1ccbd22..14ba904 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
@@ -202,7 +202,7 @@ public final class BulkActionsLinkFactory implements ActionLinkFactory {
final boolean explorationOrPrototype = ObjectAction.Utils.isExplorationOrPrototype(objectAction);
final String actionIdentifier = ObjectAction.Utils.actionIdentifierFor(objectAction);
final String description = ObjectAction.Utils.descriptionOf(objectAction);
- final String cssClass = ObjectAction.Utils.cssClassFor(objectAction);
+ final String cssClass = ObjectAction.Utils.cssClassFor(objectAction, null);
final String cssClassFa = ObjectAction.Utils.cssClassFaFor(objectAction);
final ActionLayout.CssClassFaPosition cssClassFaPosition = ObjectAction.Utils.cssClassFaPositionFor(objectAction);
final ActionLayout.Position position = ObjectAction.Utils.actionLayoutPositionOf(objectAction);
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/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 509eb6a..57580bd 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
@@ -35,11 +35,13 @@ 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.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
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;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S> implements UiHintPathSignificant {
@@ -84,10 +86,10 @@ public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S> implements
if (model instanceof EntityModel) {
EntityModel entityModel = (EntityModel) model;
- String cssClass = entityModel.getTypeOfSpecification().getCssClass(entityModel.getObject());
- if (!Strings.isEmpty(cssClass)) {
- tag.append("class", cssClass, " ");
- }
+ final ObjectAdapter objectAdapter = entityModel.getObject();
+ final ObjectSpecification typeOfSpecification = entityModel.getTypeOfSpecification();
+ String cssClass = typeOfSpecification.getCssClass(objectAdapter);
+ CssClassAppender.appendCssClassTo(tag, cssClass);
}
}
};
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
index 7d35b91..5b50367 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
@@ -109,7 +109,9 @@ public class EntityCollectionsPanel extends PanelAbstract<EntityModel> {
final CssClassFacet facet = association.getFacet(CssClassFacet.class);
if(facet != null) {
- collectionRvContainer.add(new CssClassAppender(facet.value()));
+ final ObjectAdapter objectAdapter = entityModel.getObject();
+ final String cssClass = facet.cssClass(objectAdapter);
+ CssClassAppender.appendCssClassTo(collectionRvContainer, cssClass);
}
final WebMarkupContainer fieldset = new WebMarkupContainer(ID_COLLECTION_GROUP);
collectionRvContainer.add(fieldset);
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
index 26fe7bc..ee26581 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
@@ -19,6 +19,7 @@
package org.apache.isis.viewer.wicket.ui.components.entity.combined;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.ui.ComponentType;
@@ -43,9 +44,11 @@ public class EntityCombinedPanel extends PanelAbstract<EntityModel> {
private void buildGui() {
final EntityModel model = getModel();
- final CssClassFacet facet = model.getObject().getSpecification().getFacet(CssClassFacet.class);
+ final ObjectAdapter objectAdapter = model.getObject();
+ final CssClassFacet facet = objectAdapter.getSpecification().getFacet(CssClassFacet.class);
if(facet != null) {
- this.add(new CssClassAppender(facet.value()));
+ final String cssClass = facet.cssClass(objectAdapter);
+ CssClassAppender.appendCssClassTo(this, cssClass);
}
addOrReplace(ComponentType.ENTITY_SUMMARY, model);
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 3299c06..420fa1a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -36,6 +36,7 @@ import org.apache.wicket.model.Model;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.isis.core.metamodel.facets.propparam.layout.LabelAtFacet;
import org.apache.isis.core.runtime.system.DeploymentType;
@@ -273,7 +274,9 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
ScalarModel model = getModel();
final CssClassFacet facet = model.getFacet(CssClassFacet.class);
if(facet != null) {
- CssClassAppender.appendCssClassTo(this, facet.value());
+ final ObjectAdapter parentAdapter = model.getParentObjectAdapterMemento().getObjectAdapter(AdapterManager.ConcurrencyChecking.NO_CHECK);
+ final String cssClass = facet.cssClass(parentAdapter);
+ CssClassAppender.appendCssClassTo(this, cssClass);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index e400a06..b0e37c3 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -202,7 +202,11 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
action.getReturnType().getCorrespondingClass() == org.apache.isis.applib.value.Clob.class);
}
- protected LinkAndLabel newLinkAndLabel(final ObjectAction objectAction, final AbstractLink link, final String disabledReasonIfAny) {
+ protected LinkAndLabel newLinkAndLabel(
+ final ObjectAdapter objectAdapter,
+ final ObjectAction objectAction,
+ final AbstractLink link,
+ final String disabledReasonIfAny) {
final String label = ObjectAction.Utils.nameFor(objectAction);
final boolean blobOrClob = ObjectAction.Utils.returnsBlobOrClob(objectAction);
@@ -210,7 +214,7 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
final String actionIdentifier = ObjectAction.Utils.actionIdentifierFor(objectAction);
final String description = ObjectAction.Utils.descriptionOf(objectAction);
final ActionLayout.Position position = ObjectAction.Utils.actionLayoutPositionOf(objectAction);
- final String cssClass = ObjectAction.Utils.cssClassFor(objectAction);
+ final String cssClass = ObjectAction.Utils.cssClassFor(objectAction, objectAdapter);
final String cssClassFa = ObjectAction.Utils.cssClassFaFor(objectAction);
final ActionLayout.CssClassFaPosition cssClassFaPosition = ObjectAction.Utils.cssClassFaPositionFor(objectAction);
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java
index 28aeadc..884bd26 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java
@@ -19,8 +19,10 @@
package org.apache.isis.viewer.wicket.ui.util;
+import com.google.common.base.Strings;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
@@ -41,12 +43,24 @@ public class CssClassAppender extends AttributeAppender {
}
/**
- * Adds CSS class to container (providing that the class is non-null.
+ * Adds CSS class to tag (providing that the class is non-null and non-empty).
+ */
+ public static void appendCssClassTo(
+ final ComponentTag tag,
+ final String cssClass) {
+ if(Strings.isNullOrEmpty(cssClass)) {
+ return;
+ }
+ tag.append("class", cssClass, " ");
+ }
+
+ /**
+ * Adds CSS class to container (providing that the class is non-null and non-empty).
*/
public static void appendCssClassTo(
final MarkupContainer markupContainer,
final String cssClass) {
- if(cssClass == null) {
+ if(Strings.isNullOrEmpty(cssClass)) {
return;
}
markupContainer.add(new CssClassAppender(cssClass));
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java
index b2d9ce3..e69854b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacet.java
@@ -19,14 +19,14 @@
package org.apache.isis.core.metamodel.facets.members.cssclass;
-import org.apache.isis.core.metamodel.facets.SingleStringValueFacet;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
/**
* The css class of a class, a property, collection, or an action.
- *
- * <p>
- * In the standard Apache Isis Programming Model, corresponds to annotating the
- * member with <tt>@CssClass</tt>.
*/
-public interface CssClassFacet extends SingleStringValueFacet {
+public interface CssClassFacet extends Facet {
+
+ public String cssClass(final ObjectAdapter objectAdapter);
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
index 76dd19e..7ae7821 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
@@ -19,17 +19,26 @@
package org.apache.isis.core.metamodel.facets.members.cssclass;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
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.facets.SingleStringValueFacetAbstract;
-public class CssClassFacetAbstract extends SingleStringValueFacetAbstract implements CssClassFacet {
+public abstract class CssClassFacetAbstract extends FacetAbstract implements CssClassFacet {
+
+ public static Class<? extends Facet> type() {
+ return CssClassFacet.class;
+ }
+
+ private final String value;
public CssClassFacetAbstract(final String value, final FacetHolder holder) {
- super(type(), holder, value);
+ super(type(), holder, Derivation.NOT_DERIVED);
+ this.value = value;
}
- public static Class<? extends Facet> type() {
- return CssClassFacet.class;
+ @Override
+ public String cssClass(final ObjectAdapter objectAdapter) {
+ return value;
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/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
index 67899df..2f0cd35 100644
--- 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
@@ -21,25 +21,30 @@ 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.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
-public class CssClassFacetMethod extends CssClassFacetAbstract {
+public class CssClassFacetMethod extends FacetAbstract implements CssClassFacet {
+
+ public static Class<? extends Facet> type() {
+ return CssClassFacet.class;
+ }
private final Method method;
+
public CssClassFacetMethod(final Method method, final FacetHolder holder) {
- super(null, holder);
+ super(type(), holder, Derivation.NOT_DERIVED);
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) {
+ public String cssClass(final ObjectAdapter owningAdapter) {
+ if(owningAdapter == null) {
+ return "";
+ }
try {
return (String) ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
} catch (final RuntimeException ex) {
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
index 0fbe337..7c6f327 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
@@ -473,7 +473,7 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
CssClassFacet cssClassFacet = action.getFacet(CssClassFacet.class);
if(cssClassFacet != null && !cssClassFacet.isNoop()) {
CssClassFacetRepr cssClassFacetRepr = new CssClassFacetRepr();
- cssClassFacetRepr.value = cssClassFacet.value();
+ cssClassFacetRepr.value = cssClassFacet.cssClass(null);
actionRepr.cssClass = cssClassFacetRepr;
}
DescribedAsFacet describedAsFacet = action.getFacet(DescribedAsFacet.class);
@@ -508,7 +508,7 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
CssClassFacet cssClassFacet = assoc.getFacet(CssClassFacet.class);
if(cssClassFacet != null && !cssClassFacet.isNoop()) {
CssClassFacetRepr cssClassFacetRepr = new CssClassFacetRepr();
- cssClassFacetRepr.value = cssClassFacet.value();
+ cssClassFacetRepr.value = cssClassFacet.cssClass(null);
memberRepr.cssClass = cssClassFacetRepr;
}
DescribedAsFacet describedAsFacet = assoc.getFacet(DescribedAsFacet.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/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 051f430..5c47558 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
@@ -37,7 +37,6 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
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.parented.ParentedFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
@@ -162,14 +161,6 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
String getHelp();
/**
- * Returns a css class name of the specification.
- *
- * <p>
- * Corresponds to the {@link org.apache.isis.applib.annotation.CssClass#value()) value} of {@link CssClassFacet};
- */
- String getCssClass();
-
- /**
* Returns the title string for the specified object.
*
* <p>
@@ -203,7 +194,7 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
* 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}
+ * Corresponds to the {@link org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet#cssClass(org.apache.isis.core.metamodel.adapter.ObjectAdapter)} value}
* returned by the {@link org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet}.
*/
String getCssClass(ObjectAdapter object);
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index ad7bc2a..3ec0bdf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -40,7 +40,6 @@ import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetFilters;
-import org.apache.isis.core.metamodel.facets.SingleStringValueFacet;
import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
@@ -257,7 +256,8 @@ public interface ObjectAction extends ObjectMember {
}
public static String cssClassFaFor(final ObjectAction action) {
- return facetValueIfAnyFor(action, CssClassFaFacet.class);
+ final CssClassFaFacet cssClassFaFacet = action.getFacet(CssClassFaFacet.class);
+ return cssClassFaFacet != null ? cssClassFaFacet.value() : null;
}
public static ActionLayout.CssClassFaPosition cssClassFaPositionFor(final ObjectAction action) {
@@ -265,13 +265,9 @@ public interface ObjectAction extends ObjectMember {
return facet != null ? facet.getPosition() : ActionLayout.CssClassFaPosition.LEFT;
}
- public static String cssClassFor(final ObjectAction action) {
- return facetValueIfAnyFor(action, CssClassFacet.class);
- }
-
- private static String facetValueIfAnyFor(ObjectAction action, Class<? extends SingleStringValueFacet> facetType) {
- final SingleStringValueFacet singleStringValueFacet = action.getFacet(facetType);
- return singleStringValueFacet != null ? singleStringValueFacet.value() : null;
+ public static String cssClassFor(final ObjectAction action, final ObjectAdapter objectAdapter) {
+ final CssClassFacet cssClassFacet = action.getFacet(CssClassFacet.class);
+ return cssClassFacet != null ? cssClassFacet.cssClass(objectAdapter) : null;
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/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 1e317e8..a216496 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,7 +55,6 @@ 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;
@@ -158,7 +157,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
private TitleFacet titleFacet;
private IconFacet iconFacet;
- private CssClassFacetMethod cssClassFacetMethod;
+ private CssClassFacet cssClassFacet;
private IntrospectionState introspected = IntrospectionState.NOT_INTROSPECTED;
@@ -362,10 +361,7 @@ 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;
- }
+ cssClassFacet = getFacet(CssClassFacet.class);
this.persistability = determinePersistability();
}
@@ -422,7 +418,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
@Override
public String getCssClass(final ObjectAdapter reference) {
- return cssClassFacetMethod == null ? null : cssClassFacetMethod.value(reference);
+ return cssClassFacet == null ? null : cssClassFacet.cssClass(reference);
}
// //////////////////////////////////////////////////////////////////////
@@ -522,12 +518,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
@Override
- public String getCssClass() {
- final CssClassFacet cssClassFacet = getFacet(CssClassFacet.class);
- return cssClassFacet == null ? null : cssClassFacet.value();
- }
-
- @Override
public Persistability persistability() {
return persistability;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java
index a0ebfbe..96b0f79 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassAnnotationOnMemberFacetFactoryTest.java
@@ -54,6 +54,6 @@ public class CssClassAnnotationOnMemberFacetFactoryTest extends AbstractFacetFac
assertThat(facet, is(not(nullValue())));
assertThat(facet instanceof CssClassFacetAbstract, is(true));
final CssClassFacetAbstract cssClassFacetAbstract = (CssClassFacetAbstract) facet;
- assertThat(cssClassFacetAbstract.value(), equalTo("user"));
+ assertThat(cssClassFacetAbstract.cssClass(null), equalTo("user"));
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclass/CssClassFacetOnTypeAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclass/CssClassFacetOnTypeAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclass/CssClassFacetOnTypeAnnotationFactoryTest.java
index f667d13..8bd39a1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclass/CssClassFacetOnTypeAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/cssclass/CssClassFacetOnTypeAnnotationFactoryTest.java
@@ -55,6 +55,6 @@ public class CssClassFacetOnTypeAnnotationFactoryTest extends AbstractFacetFacto
assertThat(facet, is(not(nullValue())));
assertThat(facet, is(instanceOf(CssClassFacetAbstract.class)));
final CssClassFacetAbstract cssClassFacetAbstract = (CssClassFacetAbstract) facet;
- assertThat(cssClassFacetAbstract.value(), equalTo("testClass"));
+ assertThat(cssClassFacetAbstract.cssClass(null), equalTo("testClass"));
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/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 d2d4816..1f8a791 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
@@ -265,17 +265,12 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
}
@Override
- public String getCssClass() {
- return null;
- }
-
- @Override
public String getTitle(final ObjectAdapter targetAdapter, final Localization localization) {
return getTitle(null, targetAdapter, localization);
}
@Override
- public String getTitle(ObjectAdapter contextAdapterIfAny, ObjectAdapter targetAdapter, Localization localization) {
+ public String getTitle(final ObjectAdapter contextAdapterIfAny, ObjectAdapter targetAdapter, final Localization localization) {
return title;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java
index 7d7ab90..5fd005e 100644
--- a/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/application/todoapp/dom/src/main/java/dom/todo/ToDoItem.java
@@ -151,6 +151,9 @@ public class ToDoItem implements Categorized, Comparable<ToDoItem> {
public String iconName() {
return !isComplete() ? "todo" : "done";
}
+
+ public String cssClass() { return iconName(); }
+
//endregion
//region > description (property)
http://git-wip-us.apache.org/repos/asf/isis/blob/21065af2/example/application/todoapp/webapp/src/main/webapp/css/application.css
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/webapp/css/application.css b/example/application/todoapp/webapp/src/main/webapp/css/application.css
index 400c158..51d9500 100644
--- a/example/application/todoapp/webapp/src/main/webapp/css/application.css
+++ b/example/application/todoapp/webapp/src/main/webapp/css/application.css
@@ -22,3 +22,10 @@
color: red;
}
+tr.todo {
+}
+
+tr.done {
+ text-decoration: line-through;
+ color: #d3d3d3;
+}