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 2014/05/11 19:42:00 UTC
[15/16] ISIS-550: refactored DomainObjectInvocationHandler and
ImperativeFacets
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/ClearDirtyObjectFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/ClearDirtyObjectFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/ClearDirtyObjectFacetViaMethod.java
index 3f97714..1e0172c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/ClearDirtyObjectFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/ClearDirtyObjectFacetViaMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.commons.lang.MethodExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.progmodel.facets.object.dirty.ClearDirtyObjectFacetAbstract;
public class ClearDirtyObjectFacetViaMethod extends ClearDirtyObjectFacetAbstract implements ImperativeFacet {
@@ -48,6 +49,11 @@ public class ClearDirtyObjectFacetViaMethod extends ClearDirtyObjectFacetAbstrac
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.LIFECYCLE;
+ }
+
+ @Override
public boolean impliesResolve() {
return false;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/IsDirtyObjectFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/IsDirtyObjectFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/IsDirtyObjectFacetViaMethod.java
index 355cfeb..c8c5e32 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/IsDirtyObjectFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/IsDirtyObjectFacetViaMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.commons.lang.MethodExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.progmodel.facets.object.dirty.IsDirtyObjectFacetAbstract;
public class IsDirtyObjectFacetViaMethod extends IsDirtyObjectFacetAbstract implements ImperativeFacet {
@@ -48,6 +49,11 @@ public class IsDirtyObjectFacetViaMethod extends IsDirtyObjectFacetAbstract impl
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.LIFECYCLE;
+ }
+
+ @Override
public boolean impliesResolve() {
return false;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/MarkDirtyObjectFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/MarkDirtyObjectFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/MarkDirtyObjectFacetViaMethod.java
index f1ee36e..21d24bd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/MarkDirtyObjectFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/dirty/method/MarkDirtyObjectFacetViaMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.commons.lang.MethodExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.progmodel.facets.object.dirty.MarkDirtyObjectFacetAbstract;
public class MarkDirtyObjectFacetViaMethod extends MarkDirtyObjectFacetAbstract implements ImperativeFacet {
@@ -44,6 +45,11 @@ public class MarkDirtyObjectFacetViaMethod extends MarkDirtyObjectFacetAbstract
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.LIFECYCLE;
+ }
+
+ @Override
public boolean impliesResolve() {
return false;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/disabled/method/DisabledObjectFacetViaDisabledMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/disabled/method/DisabledObjectFacetViaDisabledMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/disabled/method/DisabledObjectFacetViaDisabledMethod.java
index d11f3fc..224ae14 100755
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/disabled/method/DisabledObjectFacetViaDisabledMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/disabled/method/DisabledObjectFacetViaDisabledMethod.java
@@ -30,6 +30,7 @@ import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.progmodel.facets.object.disabled.DisabledObjectFacetAbstract;
public class DisabledObjectFacetViaDisabledMethod extends DisabledObjectFacetAbstract implements ImperativeFacet {
@@ -47,6 +48,11 @@ public class DisabledObjectFacetViaDisabledMethod extends DisabledObjectFacetAbs
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.CHECK_IF_DISABLED;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaTitleMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaTitleMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaTitleMethod.java
index ed535b1..f03dc5d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaTitleMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaTitleMethod.java
@@ -31,6 +31,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
public class TitleFacetViaTitleMethod extends TitleFacetAbstract implements ImperativeFacet {
@@ -53,6 +54,11 @@ public class TitleFacetViaTitleMethod extends TitleFacetAbstract implements Impe
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.UI_HINT;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaToStringMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaToStringMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaToStringMethod.java
index e73c281..3fb7bbd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaToStringMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetViaToStringMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.applib.profiles.Localization;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
public class TitleFacetViaToStringMethod extends TitleFacetAbstract implements ImperativeFacet {
@@ -48,6 +49,11 @@ public class TitleFacetViaToStringMethod extends TitleFacetAbstract implements I
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.UI_HINT;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/validate/method/ValidateObjectFacetViaValidateMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/validate/method/ValidateObjectFacetViaValidateMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/validate/method/ValidateObjectFacetViaValidateMethod.java
index 65d7dbf..1ddcda3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/validate/method/ValidateObjectFacetViaValidateMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/validate/method/ValidateObjectFacetViaValidateMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.progmodel.facets.object.validate.ValidateObjectFacetAbstract;
public class ValidateObjectFacetViaValidateMethod extends ValidateObjectFacetAbstract implements ImperativeFacet {
@@ -44,6 +45,11 @@ public class ValidateObjectFacetViaValidateMethod extends ValidateObjectFacetAbs
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.CHECK_IF_VALID;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/autocomplete/ActionParameterAutoCompleteFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/autocomplete/ActionParameterAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/autocomplete/ActionParameterAutoCompleteFacetViaMethod.java
index 2217227..34ad250 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/autocomplete/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/autocomplete/ActionParameterAutoCompleteFacetViaMethod.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.progmodel.facets.CollectionUtils;
@@ -56,6 +57,11 @@ public class ActionParameterAutoCompleteFacetViaMethod extends ActionParameterAu
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.CHOICES_OR_AUTOCOMPLETE;
+ }
+
+ @Override
public int getMinLength() {
return minLength;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
index 569a35b..628dca3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
@@ -60,6 +60,11 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.CHOICES_OR_AUTOCOMPLETE;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index 068c20f..3024ad4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.progmodel.facets.CollectionUtils;
@@ -55,6 +56,11 @@ public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoices
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.CHOICES_OR_AUTOCOMPLETE;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index 6832806..0f573eb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.progmodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaultsFacetAbstract implements ImperativeFacet {
@@ -51,6 +52,11 @@ public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaul
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.DEFAULTS;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
index 6b7002f..2fc316a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacetAbstract;
public class PropertyAccessorFacetViaAccessor extends PropertyOrCollectionAccessorFacetAbstract implements ImperativeFacet {
@@ -49,6 +50,11 @@ public class PropertyAccessorFacetViaAccessor extends PropertyOrCollectionAccess
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.ACCESSOR;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/autocomplete/PropertyAutoCompleteFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/autocomplete/PropertyAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/autocomplete/PropertyAutoCompleteFacetViaMethod.java
index 88116ed..b3ac280 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/autocomplete/PropertyAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/autocomplete/PropertyAutoCompleteFacetViaMethod.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.progmodel.facets.CollectionUtils;
@@ -62,6 +63,11 @@ public class PropertyAutoCompleteFacetViaMethod extends PropertyAutoCompleteFace
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.CHOICES_OR_AUTOCOMPLETE;
+ }
+
+ @Override
public int getMinLength() {
return minLength;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
index cb2b694..d752f3f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.progmodel.facets.CollectionUtils;
@@ -58,6 +59,11 @@ public class PropertyChoicesFacetViaMethod extends PropertyChoicesFacetAbstract
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.CHOICES_OR_AUTOCOMPLETE;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
index b5a1610..35a2294 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.progmodel.facets.properties.defaults.PropertyDefaultFacetAbstract;
@@ -56,6 +57,11 @@ public class PropertyDefaultFacetViaMethod extends PropertyDefaultFacetAbstract
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.DEFAULTS;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/Helper.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/Helper.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/Helper.java
new file mode 100644
index 0000000..de4cdac
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/Helper.java
@@ -0,0 +1,48 @@
+/*
+ * 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.progmodel.facets.properties.event;
+
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+class Helper {
+
+ private final ServicesInjector servicesInjector;
+
+ private EventBusService eventBusService;
+ private boolean searchedForEventBusService = false;
+
+ public Helper(final ServicesInjector servicesInjector) {
+ this.servicesInjector = servicesInjector;
+ }
+
+ void postEvent(final PropertyChangedEvent<?, ?> event) {
+ eventBusService.post(event);
+ }
+
+ EventBusService getEventBusService() {
+ if (!searchedForEventBusService) {
+ eventBusService = this.servicesInjector.lookupService(EventBusService.class);
+ }
+ searchedForEventBusService = true;
+ return eventBusService;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
index 89bd745..98eb385 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
@@ -26,17 +26,14 @@ import java.util.List;
import org.apache.isis.applib.annotation.PostsPropertyChangedEvent;
import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.adapter.ServicesProvider;
-import org.apache.isis.core.metamodel.adapter.ServicesProviderAware;
-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.facetapi.MetaModelValidatorRefiner;
import org.apache.isis.core.metamodel.facets.Annotations;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
-import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventFacet;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacet;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacet;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
@@ -60,38 +57,28 @@ public class PostsPropertyChangedEventAnnotationFacetFactory extends FacetFactor
@Override
public void process(final ProcessMethodContext processMethodContext) {
final Method method = processMethodContext.getMethod();
- FacetUtil.addFacet(create(method, processMethodContext.getFacetHolder()));
- }
-
- private PostsPropertyChangedEventFacet create(Method method, final FacetHolder holder) {
+ FacetedMethod holder = processMethodContext.getFacetHolder();
+
final PostsPropertyChangedEvent annotation = Annotations.getAnnotation(method, PostsPropertyChangedEvent.class);
if(annotation == null) {
- return null;
+ return;
}
final PropertyOrCollectionAccessorFacet getterFacet = holder.getFacet(PropertyOrCollectionAccessorFacet.class);
if(getterFacet == null) {
- return null;
+ return;
}
- final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class);
- final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class);
- if (clearFacet == null && setterFacet == null) {
- return null;
- }
-
- // REVIEW: I'm a bit uncertain about this; this facet is multi-valued, but the setUnderlying(...) stuff only
- // works for single valued types.
- // the wrapperFactory stuff looks for underlying to find the imperative method, I think this only works in this
- // case because (by accident rather than design) there is also the PropertyInitializationFacet wrapping the setter.
+ final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class);
if(setterFacet != null) {
- holder.removeFacet(setterFacet);
+ final Class<? extends PropertyChangedEvent<?, ?>> changedEventType = annotation.value();
+ FacetUtil.addFacet(new PostsPropertyChangedEventSetterFacetAnnotation(changedEventType, getterFacet, setterFacet, servicesInjector, holder));
}
+
+ final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class);
if(clearFacet != null) {
- holder.removeFacet(clearFacet);
+ final Class<? extends PropertyChangedEvent<?, ?>> changedEventType = annotation.value();
+ FacetUtil.addFacet(new PostsPropertyChangedEventClearFacetAnnotation(changedEventType, getterFacet, clearFacet, servicesInjector, holder));
}
-
- final Class<? extends PropertyChangedEvent<?, ?>> changedEventType = annotation.value();
- return new PostsPropertyChangedEventFacetAnnotation(changedEventType, getterFacet, setterFacet, clearFacet, servicesInjector, holder);
}
// //////////////////////////////////////
@@ -128,5 +115,4 @@ public class PostsPropertyChangedEventAnnotationFacetFactory extends FacetFactor
this.servicesInjector = servicesInjector;
}
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventClearFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventClearFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventClearFacetAnnotation.java
new file mode 100644
index 0000000..0dff445
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventClearFacetAnnotation.java
@@ -0,0 +1,118 @@
+/*
+ * 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.progmodel.facets.properties.event;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.FatalException;
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
+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.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventClearFacet;
+import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventClearFacetAbstract;
+import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class PostsPropertyChangedEventClearFacetAnnotation
+ extends PostsPropertyChangedEventClearFacetAbstract {
+
+ private final PropertyOrCollectionAccessorFacet getterFacet;
+ private final PropertyClearFacet clearFacet;
+ private final Helper helper;
+
+ public PostsPropertyChangedEventClearFacetAnnotation(
+ final Class<? extends PropertyChangedEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertyClearFacet clearFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(eventType, holder);
+ this.getterFacet = getterFacet;
+ this.clearFacet = clearFacet;
+ this.helper = new Helper(servicesInjector);
+ }
+
+ @Override
+ public void clearProperty(ObjectAdapter targetAdapter) {
+ if(clearFacet == null) {
+ return;
+ }
+
+ if(helper.getEventBusService() == null) {
+ clearFacet.clearProperty(targetAdapter);
+ return;
+ }
+
+ final Object oldValue = getterFacet.getProperty(targetAdapter);
+ clearFacet.clearProperty(targetAdapter);
+ final Object newValue = getterFacet.getProperty(targetAdapter);
+
+ postEventIfChanged(targetAdapter, getIdentified().getIdentifier(), oldValue, newValue);
+ }
+
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private void postEventIfChanged(
+ final ObjectAdapter targetAdapter,
+ final Identifier identifier,
+ final Object oldValue,
+ final Object newValue) {
+
+ if(Objects.equal(oldValue, newValue)) {
+ // do nothing.
+ return;
+ }
+ try {
+ final Class type = value();
+ final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
+ final PropertyChangedEvent<?, ?> event = Util.newEvent(type, source, identifier, oldValue, newValue);
+
+ helper.postEvent(event);
+ } catch (Exception e) {
+ throw new FatalException(e);
+ }
+ }
+
+ // //////////////////////////////////////
+ // MultiTypedFacet
+ // //////////////////////////////////////
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Class<? extends Facet>[] facetTypes() {
+ return Lists.newArrayList(
+ type(),
+ PostsPropertyChangedEventClearFacet.class
+ ).toArray(new Class[]{});
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends Facet> T getFacet(Class<T> facet) {
+ return (T) this;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
deleted file mode 100644
index db67de1..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * 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.progmodel.facets.properties.event;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.FatalException;
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ServicesProvider;
-import org.apache.isis.core.metamodel.adapter.util.AdapterUtils;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventFacet;
-import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventFacetAbstract;
-import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacet;
-import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-
-public class PostsPropertyChangedEventFacetAnnotation extends PostsPropertyChangedEventFacetAbstract {
-
- private final PropertyOrCollectionAccessorFacet getterFacet;
- private final PropertySetterFacet setterFacet;
- private final PropertyClearFacet clearFacet;
- private final ServicesInjector servicesInjector;
-
- private EventBusService eventBusService;
- private boolean searchedForEventBusService = false;
-
- public PostsPropertyChangedEventFacetAnnotation(
- final Class<? extends PropertyChangedEvent<?, ?>> eventType,
- final PropertyOrCollectionAccessorFacet getterFacet,
- final PropertySetterFacet setterFacet,
- final PropertyClearFacet clearFacet,
- final ServicesInjector servicesInjector,
- final FacetHolder holder) {
- super(eventType, holder);
- this.getterFacet = getterFacet;
- this.setterFacet = setterFacet;
- this.clearFacet = clearFacet;
- this.servicesInjector = servicesInjector;
- }
-
- @Override
- public void setProperty(ObjectAdapter targetAdapter, ObjectAdapter valueAdapter) {
- if(setterFacet == null) {
- return;
- }
- eventBusService = getEventBusService();
- if(eventBusService == null) {
- setterFacet.setProperty(targetAdapter, valueAdapter);
- return;
- }
-
- final Object oldValue = getterFacet.getProperty(targetAdapter);
- setterFacet.setProperty(targetAdapter, valueAdapter);
- final Object newValue = getterFacet.getProperty(targetAdapter);
- postEventIfChanged(targetAdapter, getIdentified().getIdentifier(), oldValue, newValue);
- }
-
- @Override
- public void clearProperty(ObjectAdapter targetAdapter) {
- if(clearFacet == null) {
- return;
- }
- eventBusService = getEventBusService();
- if(eventBusService == null) {
- clearFacet.clearProperty(targetAdapter);
- return;
- }
-
- final Object oldValue = getterFacet.getProperty(targetAdapter);
- clearFacet.clearProperty(targetAdapter);
- final Object newValue = getterFacet.getProperty(targetAdapter);
-
- postEventIfChanged(targetAdapter, getIdentified().getIdentifier(), oldValue, newValue);
- }
-
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private void postEventIfChanged(
- final ObjectAdapter targetAdapter,
- final Identifier identifier,
- final Object oldValue,
- final Object newValue) {
-
- if(Objects.equal(oldValue, newValue)) {
- // do nothing.
- return;
- }
- try {
- final Class type = value();
- final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
- final PropertyChangedEvent<?, ?> event = Util.newEvent(type, source, identifier, oldValue, newValue);
-
- eventBusService.post(event);
- } catch (Exception e) {
- throw new FatalException(e);
- }
- }
-
- private EventBusService getEventBusService() {
- if (!searchedForEventBusService) {
- eventBusService = this.servicesInjector.lookupService(EventBusService.class);
- }
- searchedForEventBusService = true;
- return eventBusService;
- }
-
- // //////////////////////////////////////
- // MultiTypedFacet
- // //////////////////////////////////////
-
- @SuppressWarnings("unchecked")
- @Override
- public Class<? extends Facet>[] facetTypes() {
- return Lists.newArrayList(
- PostsPropertyChangedEventFacet.class,
- PropertySetterFacet.class,
- PropertyClearFacet.class
- ).toArray(new Class[]{});
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public <T extends Facet> T getFacet(Class<T> facet) {
- return (T) this;
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventSetterFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventSetterFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventSetterFacetAnnotation.java
new file mode 100644
index 0000000..23647b2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventSetterFacetAnnotation.java
@@ -0,0 +1,117 @@
+/*
+ * 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.progmodel.facets.properties.event;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.FatalException;
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
+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.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventSetterFacet;
+import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventSetterFacetAbstract;
+import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class PostsPropertyChangedEventSetterFacetAnnotation
+ extends PostsPropertyChangedEventSetterFacetAbstract {
+
+ private final PropertyOrCollectionAccessorFacet getterFacet;
+ private final PropertySetterFacet setterFacet;
+
+ private final Helper helper;
+
+ public PostsPropertyChangedEventSetterFacetAnnotation(
+ final Class<? extends PropertyChangedEvent<?, ?>> eventType,
+ final PropertyOrCollectionAccessorFacet getterFacet,
+ final PropertySetterFacet setterFacet,
+ final ServicesInjector servicesInjector,
+ final FacetHolder holder) {
+ super(eventType, holder);
+ this.getterFacet = getterFacet;
+ this.setterFacet = setterFacet;
+ this.helper = new Helper(servicesInjector);
+ }
+
+ @Override
+ public void setProperty(ObjectAdapter targetAdapter, ObjectAdapter valueAdapter) {
+ if(setterFacet == null) {
+ return;
+ }
+ if(helper.getEventBusService() == null) {
+ setterFacet.setProperty(targetAdapter, valueAdapter);
+ return;
+ }
+
+ final Object oldValue = getterFacet.getProperty(targetAdapter);
+ setterFacet.setProperty(targetAdapter, valueAdapter);
+ final Object newValue = getterFacet.getProperty(targetAdapter);
+ postEventIfChanged(targetAdapter, getIdentified().getIdentifier(), oldValue, newValue);
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private void postEventIfChanged(
+ final ObjectAdapter targetAdapter,
+ final Identifier identifier,
+ final Object oldValue,
+ final Object newValue) {
+
+ if(Objects.equal(oldValue, newValue)) {
+ // do nothing.
+ return;
+ }
+ try {
+ final Class type = value();
+ final Object source = ObjectAdapter.Util.unwrap(targetAdapter);
+ final PropertyChangedEvent<?, ?> event = Util.newEvent(type, source, identifier, oldValue, newValue);
+
+ helper.postEvent(event);
+ } catch (Exception e) {
+ throw new FatalException(e);
+ }
+ }
+
+
+ // //////////////////////////////////////
+ // MultiTypedFacet
+ // //////////////////////////////////////
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Class<? extends Facet>[] facetTypes() {
+ return Lists.newArrayList(
+ type(),
+ PostsPropertyChangedEventSetterFacet.class
+ ).toArray(new Class[]{});
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends Facet> T getFacet(Class<T> facet) {
+ return (T) this;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java
index 1b2a84e..ec4bde6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaClearMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacetAbstract;
public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
@@ -48,6 +49,11 @@ public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.MODIFY_PROPERTY_SUPPORTING;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java
index 9cde05d..de6bf15 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyClearFacetViaSetterMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacetAbstract;
public class PropertyClearFacetViaSetterMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
@@ -48,6 +49,11 @@ public class PropertyClearFacetViaSetterMethod extends PropertyClearFacetAbstrac
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.MODIFY_PROPERTY;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyInitializationFacetViaSetterMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyInitializationFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyInitializationFacetViaSetterMethod.java
index 4b86ad8..9710320 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyInitializationFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertyInitializationFacetViaSetterMethod.java
@@ -47,6 +47,13 @@ public class PropertyInitializationFacetViaSetterMethod extends PropertyInitiali
}
@Override
+ public Intent getIntent(final Method method) {
+ // LIMITATION: we cannot distinguish between setXxx being called for a modify or for an initialization
+ // so we just assume its a setter.
+ return Intent.MODIFY_PROPERTY;
+ }
+
+ @Override
public boolean impliesResolve() {
return false;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java
index f37ee09..4d99e81 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaModifyMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacetAbstract;
public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstract implements ImperativeFacet {
@@ -48,6 +49,11 @@ public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstr
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.MODIFY_PROPERTY_SUPPORTING;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java
index 660d241..6688deb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetterFacetViaSetterMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacetAbstract;
public class PropertySetterFacetViaSetterMethod extends PropertySetterFacetAbstract implements ImperativeFacet {
@@ -48,6 +49,11 @@ public class PropertySetterFacetViaSetterMethod extends PropertySetterFacetAbstr
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.MODIFY_PROPERTY;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/PropertyValidateFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/PropertyValidateFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/PropertyValidateFacetViaMethod.java
index 0df3e71..1f9718a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/PropertyValidateFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/validate/PropertyValidateFacetViaMethod.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
public class PropertyValidateFacetViaMethod extends PropertyValidateFacetAbstract implements ImperativeFacet {
@@ -47,6 +48,11 @@ public class PropertyValidateFacetViaMethod extends PropertyValidateFacetAbstrac
}
@Override
+ public Intent getIntent(final Method method) {
+ return Intent.CHECK_IF_VALID;
+ }
+
+ @Override
public boolean impliesResolve() {
return true;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java
index feee4dd..459484e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ImperativeFacetUtilsTest.java
@@ -102,7 +102,7 @@ public class ImperativeFacetUtilsTest {
will(returnValue(Lists.newArrayList()));
}
});
- final ImperativeFacet.Flags flags = ImperativeFacet.Util.getImperativeFacetFlags(mockObjectMember, method);
+ final ImperativeFacet.Flags flags = ImperativeFacet.Util.getFlags(mockObjectMember, method);
assertThat(flags, is(not(nullValue())));
assertThat(flags.impliesResolve(), is(false));
assertThat(flags.impliesObjectChanged(), is(false));
@@ -117,7 +117,7 @@ public class ImperativeFacetUtilsTest {
will(returnValue(Lists.newArrayList((Facet) mockImperativeFacet)));
}
});
- final ImperativeFacet.Flags flags = ImperativeFacet.Util.getImperativeFacetFlags(mockObjectMember, method);
+ final ImperativeFacet.Flags flags = ImperativeFacet.Util.getFlags(mockObjectMember, method);
assertThat(flags, is(not(nullValue())));
// TODO: need more tests here, these don't go deep enough...
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet_UtilTest_newEvent.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet_UtilTest_newEvent.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet_UtilTest_newEvent.java
index 2f554fe..c67013d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet_UtilTest_newEvent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet_UtilTest_newEvent.java
@@ -24,7 +24,7 @@ import org.junit.Test;
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
-import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventFacetAbstract;
+import org.apache.isis.core.metamodel.facets.properties.event.PostsPropertyChangedEventSetterFacetAbstract;
public class PostsPropertyChangedEventFacet_UtilTest_newEvent {
@@ -46,7 +46,7 @@ public class PostsPropertyChangedEventFacet_UtilTest_newEvent {
LocalDate newValue = new LocalDate(2013,5,2);
final PropertyChangedEvent<Object, Object> ev =
- PostsPropertyChangedEventFacet.Util.newEvent(PropertyChangedEvent.Default.class, sdo, identifier, oldValue, newValue);
+ PostsPropertyChangedEventSetterFacet.Util.newEvent(PropertyChangedEvent.Default.class, sdo, identifier, oldValue, newValue);
assertThat(ev.getSource(), is((Object)sdo));
assertThat(ev.getIdentifier(), is(identifier));
assertThat(ev.getOldValue(), is((Object)oldValue));
@@ -63,7 +63,7 @@ public class PostsPropertyChangedEventFacet_UtilTest_newEvent {
LocalDate newValue = new LocalDate(2013,5,2);
final PropertyChangedEvent<SomeDomainObject, LocalDate> ev =
- PostsPropertyChangedEventFacet.Util.newEvent(SomeDatePropertyChangedEvent.class, sdo, identifier, oldValue, newValue);
+ PostsPropertyChangedEventSetterFacet.Util.newEvent(SomeDatePropertyChangedEvent.class, sdo, identifier, oldValue, newValue);
assertThat(ev.getSource(), is(sdo));
assertThat(ev.getIdentifier(), is(identifier));
assertThat(ev.getOldValue(), is(oldValue));
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
index f689a55..955fb7f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/eventbus/EventBusServiceDefault.java
@@ -25,7 +25,6 @@ import org.apache.isis.applib.services.eventbus.EventBusService;
import org.apache.isis.core.runtime.system.context.IsisContext;
public class EventBusServiceDefault extends EventBusService {
-
private final Set<Object> objectsToRegister = Sets.newHashSet();
@@ -52,12 +51,14 @@ public class EventBusServiceDefault extends EventBusService {
}
public void open() {
+ final Set<Object> objectsToRegister = this.objectsToRegister;
for (final Object object : objectsToRegister) {
getEventBus().register(object);
}
}
public void close() {
+ final Set<Object> objectsToRegister = this.objectsToRegister;
for (final Object object : objectsToRegister) {
getEventBus().unregister(object);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 0c2a6c8..9cdddb5 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -240,13 +240,7 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To
final List<Object> registeredServices = servicesInjector.getRegisteredServices();
- startRequestOnRequestScopedServices(registeredServices);
-
- createCommandIfConfigured();
-
createServiceAdapters(registeredServices);
-
- initOtherApplibServicesIfConfigured(registeredServices);
}
/**
@@ -274,67 +268,6 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To
}
}
- private void initOtherApplibServicesIfConfigured(final List<Object> registeredServices) {
-
- final EventBusServiceDefault ebsd = getServiceOrNull(EventBusServiceDefault.class);
- if(ebsd != null) {
- ebsd.open();
- }
-
- final Bulk.InteractionContext bic = getServiceOrNull(Bulk.InteractionContext.class);
- if(bic != null) {
- Bulk.InteractionContext.current.set(bic);
- }
-
- }
-
- private void startRequestOnRequestScopedServices(final List<Object> registeredServices) {
- for (final Object service : registeredServices) {
- if(service instanceof RequestScopedService) {
- ((RequestScopedService)service).__isis_startRequest();
- }
- }
- }
-
- private void createCommandIfConfigured() {
- final CommandContext commandContext = getServiceOrNull(CommandContext.class);
- if(commandContext == null) {
- return;
- }
- final CommandService commandService = getServiceOrNull(CommandService.class);
- final Command command =
- commandService != null
- ? commandService.create()
- : new CommandDefault();
- commandContext.setCommand(command);
-
- if(command.getTimestamp() == null) {
- command.setTimestamp(Clock.getTimeAsJavaSqlTimestamp());
- }
- if(command.getUser() == null) {
- command.setUser(getAuthenticationSession().getUserName());
- }
-
- // the remaining properties are set further down the call-stack, if an action is actually performed
- }
-
-
- /**
- * Called by IsisTransactionManager on start
- */
- public void startTransactionOnCommandIfConfigured(final UUID transactionId) {
- final CommandContext commandContext = getServiceOrNull(CommandContext.class);
- if(commandContext == null) {
- return;
- }
- final CommandService commandService = getServiceOrNull(CommandService.class);
- if(commandService == null) {
- return;
- }
- final Command command = commandContext.getCommand();
- commandService.startTransaction(command, transactionId);
- }
-
/**
* @return - the service, or <tt>null</tt> if no service registered of specified type.
@@ -382,20 +315,10 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To
// ignore
}
- endRequestOnRequestScopeServices();
-
setState(State.CLOSED);
}
- private void endRequestOnRequestScopeServices() {
- for (final Object service : servicesInjector.getRegisteredServices()) {
- if(service instanceof RequestScopedService) {
- ((RequestScopedService)service).__isis_endRequest();
- }
- }
- }
-
// ///////////////////////////////////////////////////////////////////////////
// State Management
// ///////////////////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
index 1ac5b64..a7a9d17 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
@@ -27,16 +27,22 @@ import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import java.util.List;
+import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.Bulk;
import org.apache.isis.applib.annotation.PublishedAction;
import org.apache.isis.applib.annotation.PublishedObject;
import org.apache.isis.applib.annotation.PublishedObject.ChangeKind;
+import org.apache.isis.applib.clock.Clock;
import org.apache.isis.applib.services.audit.AuditingService3;
+import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.applib.services.command.CommandDefault;
+import org.apache.isis.applib.services.command.spi.CommandService;
import org.apache.isis.applib.services.publish.EventPayload;
import org.apache.isis.applib.services.publish.EventPayloadForActionInvocation;
import org.apache.isis.applib.services.publish.EventPayloadForObjectChanged;
@@ -53,6 +59,8 @@ import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.PersistenceCommand;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.PublishingServiceWithDefaultPayloadFactories;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.TransactionalResource;
+import org.apache.isis.core.runtime.services.RequestScopedService;
+import org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.session.IsisSession;
@@ -262,7 +270,7 @@ public class IsisTransactionManager implements SessionScopedComponent {
// //////////////////////////////////////////////////////
- // start, flush, abort, end
+ // start
// //////////////////////////////////////////////////////
public synchronized void startTransaction() {
@@ -271,12 +279,18 @@ public class IsisTransactionManager implements SessionScopedComponent {
if (getTransaction() == null || getTransaction().getState().isComplete()) {
noneInProgress = true;
+ final List<Object> registeredServices = servicesInjector.getRegisteredServices();
+
+ startRequestOnRequestScopedServices(registeredServices);
+ createCommandIfConfigured();
+ initOtherApplibServicesIfConfigured(registeredServices);
+
IsisTransaction isisTransaction = createTransaction();
transactionLevel = 0;
transactionalResource.startTransaction();
-
- persistenceSession.startTransactionOnCommandIfConfigured(isisTransaction.getTransactionId());
+
+ startTransactionOnCommandIfConfigured(isisTransaction.getTransactionId());
}
transactionLevel++;
@@ -286,6 +300,88 @@ public class IsisTransactionManager implements SessionScopedComponent {
}
}
+
+ private void initOtherApplibServicesIfConfigured(final List<Object> registeredServices) {
+
+ final EventBusServiceDefault ebsd = getServiceOrNull(EventBusServiceDefault.class);
+ if(ebsd != null) {
+ ebsd.open();
+ }
+
+ final Bulk.InteractionContext bic = getServiceOrNull(Bulk.InteractionContext.class);
+ if(bic != null) {
+ Bulk.InteractionContext.current.set(bic);
+ }
+
+ }
+
+ private void startRequestOnRequestScopedServices(final List<Object> registeredServices) {
+ for (final Object service : registeredServices) {
+ if(service instanceof RequestScopedService) {
+ ((RequestScopedService)service).__isis_startRequest();
+ }
+ }
+ }
+
+ private void endRequestOnRequestScopeServices() {
+ for (final Object service : servicesInjector.getRegisteredServices()) {
+ if(service instanceof RequestScopedService) {
+ ((RequestScopedService)service).__isis_endRequest();
+ }
+ }
+ }
+
+ private void createCommandIfConfigured() {
+ final CommandContext commandContext = getServiceOrNull(CommandContext.class);
+ if(commandContext == null) {
+ return;
+ }
+ final CommandService commandService = getServiceOrNull(CommandService.class);
+ final Command command =
+ commandService != null
+ ? commandService.create()
+ : new CommandDefault();
+ commandContext.setCommand(command);
+
+ if(command.getTimestamp() == null) {
+ command.setTimestamp(Clock.getTimeAsJavaSqlTimestamp());
+ }
+ if(command.getUser() == null) {
+ command.setUser(getAuthenticationSession().getUserName());
+ }
+
+ // the remaining properties are set further down the call-stack, if an action is actually performed
+ }
+
+ /**
+ * Called by IsisTransactionManager on start
+ */
+ public void startTransactionOnCommandIfConfigured(final UUID transactionId) {
+ final CommandContext commandContext = getServiceOrNull(CommandContext.class);
+ if(commandContext == null) {
+ return;
+ }
+ final CommandService commandService = getServiceOrNull(CommandService.class);
+ if(commandService == null) {
+ return;
+ }
+ final Command command = commandContext.getCommand();
+ commandService.startTransaction(command, transactionId);
+ }
+
+
+ /**
+ * @return - the service, or <tt>null</tt> if no service registered of specified type.
+ */
+ public <T> T getServiceOrNull(Class<T> serviceType) {
+ return servicesInjector.lookupService(serviceType);
+ }
+
+
+
+ // //////////////////////////////////////////////////////
+ // flush
+ // //////////////////////////////////////////////////////
public synchronized boolean flushTransaction() {
@@ -300,6 +396,10 @@ public class IsisTransactionManager implements SessionScopedComponent {
return false;
}
+ // //////////////////////////////////////////////////////
+ // end, abort
+ // //////////////////////////////////////////////////////
+
/**
* Ends the transaction if nesting level is 0 (but will abort the transaction instead,
* even if nesting level is not 0, if an {@link IsisTransaction#getAbortCause() abort cause}
@@ -411,6 +511,8 @@ public class IsisTransactionManager implements SessionScopedComponent {
}
}
+
+ endRequestOnRequestScopeServices();
if(abortCause != null) {
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java
index 68eca35..baa6080 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/ObjectStoreTransactionManager_EndTransactionTest.java
@@ -110,14 +110,8 @@ public class ObjectStoreTransactionManager_EndTransactionTest {
public void endTransactionCommitsTransactionWhenLevelDecrementsDownToZero() throws Exception {
// setup
context.ignoring(mockObjectStore);
- context.checking(new Expectations() {
- {
- oneOf(mockPersistenceSession).startTransactionOnCommandIfConfigured(with(any(UUID.class)));
- }
- });
transactionManager.startTransaction();
-
context.checking(new Expectations() {
{
oneOf(mockPersistenceSession).objectChangedAllDirty();
@@ -150,7 +144,7 @@ public class ObjectStoreTransactionManager_EndTransactionTest {
context.checking(new Expectations() {
{
final Sequence transactionOrdering = context.sequence("transactionOrdering");
- one(mockObjectStore).startTransaction();
+ oneOf(mockObjectStore).startTransaction();
inSequence(transactionOrdering);
// flushed twice, once before publishing, once after
http://git-wip-us.apache.org/repos/asf/isis/blob/5f15fa74/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
index 01b03a0..aa7b320 100644
--- a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -54,6 +54,7 @@ import org.apache.isis.core.metamodel.consent.InteractionResult;
import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.facets.actions.choices.ActionChoicesFacet;
import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
@@ -105,7 +106,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
protected Method saveMethod;
/**
- * The <tt>underlying()</tt> method from {@link WrapperObject#wrapped()}.
+ * The <tt>wrapped()</tt> method from {@link WrapperObject#wrapped()}.
*/
protected Method wrappedMethod;
@@ -150,7 +151,6 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
}
-
final ObjectSpecification targetNoSpec = targetAdapter.getSpecification();
// save method, through the proxy
@@ -158,81 +158,65 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
return handleSaveMethod(getAuthenticationSession(), targetAdapter, targetNoSpec);
}
- if (isUnderlyingMethod(method)) {
+ if (isWrappedMethod(method)) {
return getDelegate();
}
final ObjectMember objectMember = locateAndCheckMember(method);
- final List<Facet> imperativeFacets = getImperativeFacets(objectMember, method);
final String memberName = objectMember.getName();
- if (instanceOf(imperativeFacets, DisableForContextFacetViaMethod.class, HideForContextFacetViaMethod.class)) {
+ final Intent intent = ImperativeFacet.Util.getIntent(objectMember, method);
+ if(intent == Intent.CHECK_IF_HIDDEN || intent == Intent.CHECK_IF_DISABLED) {
throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'", memberName));
}
final String methodName = method.getName();
- if (instanceOf(imperativeFacets, ActionDefaultsFacet.class, PropertyDefaultFacet.class, ActionChoicesFacet.class, ActionParameterChoicesFacet.class, PropertyChoicesFacet.class)) {
+ if (intent == Intent.DEFAULTS || intent == Intent.CHOICES_OR_AUTOCOMPLETE) {
return method.invoke(getDelegate(), args);
}
if (objectMember.isOneToOneAssociation()) {
- if (instanceOf(imperativeFacets, PropertyValidateFacetViaMethod.class, PropertySetterFacetViaModifyMethod.class, PropertyClearFacetViaClearMethod.class)) {
+ if (intent == Intent.CHECK_IF_VALID || intent == Intent.MODIFY_PROPERTY_SUPPORTING) {
throw new UnsupportedOperationException(String.format("Cannot invoke supporting method for '%s'; use only property accessor/mutator", memberName));
}
final OneToOneAssociation otoa = (OneToOneAssociation) objectMember;
- if (instanceOf(imperativeFacets, PropertyOrCollectionAccessorFacet.class)) {
+ if (intent == Intent.ACCESSOR) {
return handleGetterMethodOnProperty(args, targetAdapter, otoa, methodName);
}
- if (instanceOf(imperativeFacets, PropertySetterFacet.class, PropertyInitializationFacet.class)) {
+ if (intent == Intent.MODIFY_PROPERTY || intent == Intent.INITIALIZATION) {
return handleSetterMethodOnProperty(args, getAuthenticationSession(), targetAdapter, otoa, methodName);
}
}
if (objectMember.isOneToManyAssociation()) {
- if (instanceOf(imperativeFacets, CollectionValidateAddToFacetViaMethod.class, CollectionValidateRemoveFromFacetViaMethod.class)) {
+ if (intent == Intent.CHECK_IF_VALID) {
throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'; use only collection accessor/mutator", memberName));
}
-
final OneToManyAssociation otma = (OneToManyAssociation) objectMember;
- if (instanceOf(imperativeFacets, PropertyOrCollectionAccessorFacet.class)) {
+ if (intent == Intent.ACCESSOR) {
return handleGetterMethodOnCollection(method, args, targetAdapter, otma, memberName);
}
- if (instanceOf(imperativeFacets, CollectionAddToFacet.class)) {
+ if (intent == Intent.MODIFY_COLLECTION_ADD) {
return handleCollectionAddToMethod(args, targetAdapter, otma, methodName);
}
- if (instanceOf(imperativeFacets, CollectionRemoveFromFacet.class)) {
+ if (intent == Intent.MODIFY_COLLECTION_REMOVE) {
return handleCollectionRemoveFromMethod(args, targetAdapter, otma, methodName);
}
}
- // filter out
- if (instanceOf(imperativeFacets, PropertyOrCollectionAccessorFacet.class)) {
- throw new UnsupportedOperationException(String.format("Can only invoke accessor on properties or collections; '%s' represents %s", methodName, decode(objectMember)));
- }
- if (instanceOf(imperativeFacets, PropertySetterFacet.class)) {
- throw new UnsupportedOperationException(String.format("Can only invoke mutator on properties; '%s' represents %s", methodName, decode(objectMember)));
- }
- if (instanceOf(imperativeFacets, CollectionAddToFacet.class)) {
- throw new UnsupportedOperationException(String.format("Can only invoke 'adder' on collections; '%s' represents %s", methodName, decode(objectMember)));
- }
- if (instanceOf(imperativeFacets, CollectionRemoveFromFacet.class)) {
- throw new UnsupportedOperationException(String.format("Can only invoke 'remover' on collections; '%s' represents %s", methodName, decode(objectMember)));
- }
-
if (objectMember instanceof ObjectAction) {
// for all members, check visibility and usability
checkVisibility(getAuthenticationSession(), targetAdapter, objectMember);
-
- if (instanceOf(imperativeFacets, ActionValidationFacetViaMethod.class)) {
+ if (intent == Intent.CHECK_IF_VALID) {
throw new UnsupportedOperationException(String.format("Cannot invoke supporting method '%s'; use only the 'invoke' method", memberName));
}
@@ -289,8 +273,9 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
private static boolean instanceOf(final List<?> objects, final Class<?>... superTypes) {
for (final Class<?> superType : superTypes) {
+ // REVIEW: this is all a bit hacky...
for (Object obj : objects) {
- // handle the *WrapTransaction facets etc
+ // handle the *decorators
if(obj instanceof DecoratingFacet) {
DecoratingFacet<?> decoratingFacet = (DecoratingFacet<?>) obj;
obj = ((DecoratingFacet<?>) obj).getDecoratedFacet();
@@ -298,6 +283,14 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
if (superType.isAssignableFrom(obj.getClass())) {
return true;
}
+ if(obj instanceof Facet) {
+ Facet facet = (Facet) obj;
+ // handle any wrapping (eg PostPropertyChangedSetterEventFacet)
+ Facet underlyingFacet = facet.getUnderlyingFacet();
+ if(underlyingFacet != null && superType.isAssignableFrom(obj.getClass())) {
+ return true;
+ }
+ }
}
}
return false;
@@ -662,7 +655,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
return method.equals(saveMethod);
}
- protected boolean isUnderlyingMethod(final Method method) {
+ protected boolean isWrappedMethod(final Method method) {
return method.equals(wrappedMethod);
}