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 2016/05/13 18:13:45 UTC
[03/50] [abbrv] isis git commit: ISIS-1370: getting build to pass
(moving PublishingServiceInternalDefault to package where it will be picked
up as a domain service).
ISIS-1370: getting build to pass (moving PublishingServiceInternalDefault to package where it will be picked up as a domain service).
Also removing unused code in DomainObjectInvocationHandler.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/9d8847fc
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/9d8847fc
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/9d8847fc
Branch: refs/heads/master
Commit: 9d8847fc3838c84c14d3c847798b974b11e2e0e0
Parents: eee234c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun May 1 09:16:18 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sun May 1 09:16:18 2016 +0100
----------------------------------------------------------------------
.../PublishingServiceInternalDefault.java | 313 -------------------
.../PublishingServiceInternalDefault.java | 313 +++++++++++++++++++
.../system/transaction/IsisTransaction.java | 3 +-
.../handlers/DomainObjectInvocationHandler.java | 8 -
4 files changed, 314 insertions(+), 323 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/9d8847fc/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceInternalDefault.java
deleted file mode 100644
index 756d228..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceInternalDefault.java
+++ /dev/null
@@ -1,313 +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.runtime.persistence.objectstore.transaction;
-
-import java.sql.Timestamp;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.inject.Inject;
-
-import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
-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.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.clock.ClockService;
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.applib.services.publish.EventMetadata;
-import org.apache.isis.applib.services.publish.EventPayload;
-import org.apache.isis.applib.services.publish.EventType;
-import org.apache.isis.applib.services.publish.ObjectStringifier;
-import org.apache.isis.applib.services.publish.PublishingService;
-import org.apache.isis.applib.services.user.UserService;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
-import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
-import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
-import org.apache.isis.core.metamodel.services.publishing.PublishingServiceInternal;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-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.transaction.IsisTransactionManager;
-
-/**
- * Wrapper around {@link PublishingService}. Is a no-op if there is no injected service.
- */
-@DomainService(nature = NatureOfService.DOMAIN)
-public class PublishingServiceInternalDefault implements PublishingServiceInternal {
-
- private final static Function<ObjectAdapter, ObjectAdapter> NOT_DESTROYED_ELSE_EMPTY = new Function<ObjectAdapter, ObjectAdapter>() {
- public ObjectAdapter apply(ObjectAdapter adapter) {
- if(adapter == null) {
- return null;
- }
- if (!adapter.isDestroyed()) {
- return adapter;
- }
- // objectstores such as JDO prevent the underlying pojo from being touched once it has been deleted.
- // we therefore replace that pojo with an 'empty' one.
-
- Object replacementObject = getPersistenceSession().instantiateAndInjectServices(adapter.getSpecification());
- getPersistenceSession().remapRecreatedPojo(adapter, replacementObject);
- return adapter;
- }
- protected PersistenceSession getPersistenceSession() {
- return IsisContext.getPersistenceSession();
- }
-
- };
-
- @Programmatic
- public static EventType eventTypeFor(ChangeKind changeKind) {
- if(changeKind == ChangeKind.UPDATE) {
- return EventType.OBJECT_UPDATED;
- }
- if(changeKind == ChangeKind.CREATE) {
- return EventType.OBJECT_CREATED;
- }
- if(changeKind == ChangeKind.DELETE) {
- return EventType.OBJECT_DELETED;
- }
- throw new IllegalArgumentException("unknown ChangeKind '" + changeKind + "'");
- }
-
- @Override @Programmatic
- public boolean canPublish() {
- return publishingServiceIfAny != null;
- }
-
- @Override @Programmatic
- public void publishObjects(final Map<ObjectAdapter, ChangeKind> changeKindByEnlistedAdapter) {
-
- if(!canPublish()) {
- return;
- }
-
- final String currentUser = userService.getUser().getName();
- final Timestamp timestamp = clockService.nowAsJavaSqlTimestamp();
- final ObjectStringifier stringifier = objectStringifier();
-
- // take a copy of enlisted adapters ... the JDO implementation of the PublishingService
- // creates further entities which would be enlisted; taking copy of the keys avoids ConcurrentModificationException
- final List<ObjectAdapter> enlistedAdapters =
- Lists.newArrayList(changeKindByEnlistedAdapter.keySet());
-
- for (final ObjectAdapter enlistedAdapter : enlistedAdapters) {
- final ChangeKind changeKind = changeKindByEnlistedAdapter.get(enlistedAdapter);
-
- publishObject(enlistedAdapter, changeKind, currentUser, timestamp, stringifier);
- }
- }
-
- private void publishObject(
- final ObjectAdapter enlistedAdapter,
- final ChangeKind changeKind,
- final String currentUser,
- final Timestamp timestamp,
- final ObjectStringifier stringifier) {
-
- final PublishedObjectFacet publishedObjectFacet =
- enlistedAdapter.getSpecification().getFacet(PublishedObjectFacet.class);
- if(publishedObjectFacet == null) {
- return;
- }
- final PublishedObject.PayloadFactory payloadFactory = publishedObjectFacet.value();
-
- final RootOid enlistedAdapterOid = (RootOid) enlistedAdapter.getOid();
- final String enlistedAdapterClass = CommandUtil.targetClassNameFor(enlistedAdapter);
- final Bookmark enlistedTarget = enlistedAdapterOid.asBookmark();
-
- final EventMetadata metadata = newEventMetadata(
- currentUser, timestamp, changeKind, enlistedAdapterClass, enlistedTarget);
-
- final Object pojo = ObjectAdapter.Util.unwrap(undeletedElseEmpty(enlistedAdapter));
- final EventPayload payload = payloadFactory.payloadFor(pojo, changeKind);
-
- payload.withStringifier(stringifier);
- publishingServiceIfAny.publish(metadata, payload);
- }
-
- public void publishAction(
- final ObjectAction objectAction,
- final IdentifiedHolder identifiedHolder,
- final ObjectAdapter targetAdapter,
- final List<ObjectAdapter> parameterAdapters,
- final ObjectAdapter resultAdapter) {
- if(!canPublish()) {
- return;
- }
-
- final String currentUser = userService.getUser().getName();
- final Timestamp timestamp = clockService.nowAsJavaSqlTimestamp();
-
- final PublishedActionFacet publishedActionFacet =
- identifiedHolder.getFacet(PublishedActionFacet.class);
- if(publishedActionFacet == null) {
- return;
- }
-
- final RootOid adapterOid = (RootOid) targetAdapter.getOid();
- final String oidStr = getOidMarshaller().marshal(adapterOid);
- final Identifier actionIdentifier = objectAction.getIdentifier();
- final String title = oidStr + ": " + actionIdentifier.toNameParmsIdentityString();
-
- final String actionTargetClass = CommandUtil.targetClassNameFor(targetAdapter);
- final String actionTargetAction = CommandUtil.targetActionNameFor(objectAction);
- final Bookmark actionTarget = CommandUtil.bookmarkFor(targetAdapter);
- final String actionMemberIdentifier = CommandUtil.actionIdentifierFor(objectAction);
-
- final List<String> parameterNames;
- final List<Class<?>> parameterTypes;
- final Class<?> returnType;
-
- if(identifiedHolder instanceof FacetedMethod) {
- // should always be the case
-
- final FacetedMethod facetedMethod = (FacetedMethod) identifiedHolder;
- returnType = facetedMethod.getType();
-
- final List<FacetedMethodParameter> parameters = facetedMethod.getParameters();
- parameterNames = immutableList(Iterables.transform(parameters, FacetedMethodParameter.Functions.GET_NAME));
- parameterTypes = immutableList(Iterables.transform(parameters, FacetedMethodParameter.Functions.GET_TYPE));
- } else {
- parameterNames = null;
- parameterTypes = null;
- returnType = null;
- }
-
- final Command command = commandContext.getCommand();
-
- final Interaction.SequenceName sequenceName = Interaction.SequenceName.PUBLISHED_EVENT;
- final int nextEventSequence = command.next(sequenceName.abbr());
- final UUID transactionId = command.getTransactionId();
- final EventMetadata metadata = new EventMetadata(
- transactionId, nextEventSequence, EventType.ACTION_INVOCATION, currentUser, timestamp, title,
- actionTargetClass, actionTargetAction, actionTarget, actionMemberIdentifier, parameterNames,
- parameterTypes, returnType);
-
- final PublishedAction.PayloadFactory payloadFactory = publishedActionFacet.value();
-
- final ObjectStringifier stringifier = objectStringifier();
-
- final EventPayload payload = payloadFactory.payloadFor(
- identifiedHolder.getIdentifier(),
- ObjectAdapter.Util.unwrap(undeletedElseEmpty(targetAdapter)),
- ObjectAdapter.Util.unwrap(undeletedElseEmpty(parameterAdapters)),
- ObjectAdapter.Util.unwrap(undeletedElseEmpty(resultAdapter)));
- payload.withStringifier(stringifier);
- publishingServiceIfAny.publish(metadata, payload);
- }
-
- private static <T> List<T> immutableList(final Iterable<T> iterable) {
- return Collections.unmodifiableList(Lists.newArrayList(iterable));
- }
-
- private ObjectStringifier objectStringifier() {
- return new ObjectStringifier() {
- @Override
- public String toString(Object object) {
- if(object == null) {
- return null;
- }
- final ObjectAdapter adapter = IsisContext.getPersistenceSession().adapterFor(object);
- Oid oid = adapter.getOid();
- return oid != null? oid.enString(getOidMarshaller()): encodedValueOf(adapter);
- }
- private String encodedValueOf(ObjectAdapter adapter) {
- EncodableFacet facet = adapter.getSpecification().getFacet(EncodableFacet.class);
- return facet != null? facet.toEncodedString(adapter): adapter.toString();
- }
- @Override
- public String classNameOf(Object object) {
- final ObjectAdapter adapter = getPersistenceSession().adapterFor(object);
- final String className = adapter.getSpecification().getFullIdentifier();
- return className;
- }
- };
- }
-
- private static List<ObjectAdapter> undeletedElseEmpty(List<ObjectAdapter> parameters) {
- return Lists.newArrayList(Iterables.transform(parameters, NOT_DESTROYED_ELSE_EMPTY));
- }
-
- private static ObjectAdapter undeletedElseEmpty(ObjectAdapter adapter) {
- return NOT_DESTROYED_ELSE_EMPTY.apply(adapter);
- }
-
- protected OidMarshaller getOidMarshaller() {
- return IsisContext.getOidMarshaller();
- }
-
- private EventMetadata newEventMetadata(
- final String currentUser,
- final Timestamp timestamp,
- final ChangeKind changeKind,
- final String enlistedAdapterClass,
- final Bookmark enlistedTarget) {
- final EventType eventType = PublishingServiceInternalDefault.eventTypeFor(changeKind);
-
- final Command command = commandContext.getCommand();
-
- final Interaction.SequenceName sequenceName = Interaction.SequenceName.PUBLISHED_EVENT;
- final int nextEventSequence = command.next(sequenceName.abbr());
- final UUID transactionId = command.getTransactionId();
- return new EventMetadata(
- transactionId, nextEventSequence, eventType, currentUser, timestamp, enlistedTarget.toString(),
- enlistedAdapterClass, null, enlistedTarget, null, null, null, null);
- }
-
- private IsisTransactionManager.PersistenceSessionTransactionManagement getPersistenceSession() {
- return IsisContext.getPersistenceSession();
- }
-
-
- @Inject
- private PublishingService publishingServiceIfAny;
-
- @Inject
- private CommandContext commandContext;
-
- @Inject
- private ClockService clockService;
-
- @Inject
- private UserService userService;
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/9d8847fc/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
new file mode 100644
index 0000000..b860d2b
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
@@ -0,0 +1,313 @@
+/*
+ * 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.runtime.services.publishing;
+
+import java.sql.Timestamp;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.Programmatic;
+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.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.applib.services.iactn.Interaction;
+import org.apache.isis.applib.services.publish.EventMetadata;
+import org.apache.isis.applib.services.publish.EventPayload;
+import org.apache.isis.applib.services.publish.EventType;
+import org.apache.isis.applib.services.publish.ObjectStringifier;
+import org.apache.isis.applib.services.publish.PublishingService;
+import org.apache.isis.applib.services.user.UserService;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
+import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
+import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
+import org.apache.isis.core.metamodel.services.publishing.PublishingServiceInternal;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+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.transaction.IsisTransactionManager;
+
+/**
+ * Wrapper around {@link PublishingService}. Is a no-op if there is no injected service.
+ */
+@DomainService(nature = NatureOfService.DOMAIN)
+public class PublishingServiceInternalDefault implements PublishingServiceInternal {
+
+ private final static Function<ObjectAdapter, ObjectAdapter> NOT_DESTROYED_ELSE_EMPTY = new Function<ObjectAdapter, ObjectAdapter>() {
+ public ObjectAdapter apply(ObjectAdapter adapter) {
+ if(adapter == null) {
+ return null;
+ }
+ if (!adapter.isDestroyed()) {
+ return adapter;
+ }
+ // objectstores such as JDO prevent the underlying pojo from being touched once it has been deleted.
+ // we therefore replace that pojo with an 'empty' one.
+
+ Object replacementObject = getPersistenceSession().instantiateAndInjectServices(adapter.getSpecification());
+ getPersistenceSession().remapRecreatedPojo(adapter, replacementObject);
+ return adapter;
+ }
+ protected PersistenceSession getPersistenceSession() {
+ return IsisContext.getPersistenceSession();
+ }
+
+ };
+
+ @Programmatic
+ public static EventType eventTypeFor(ChangeKind changeKind) {
+ if(changeKind == ChangeKind.UPDATE) {
+ return EventType.OBJECT_UPDATED;
+ }
+ if(changeKind == ChangeKind.CREATE) {
+ return EventType.OBJECT_CREATED;
+ }
+ if(changeKind == ChangeKind.DELETE) {
+ return EventType.OBJECT_DELETED;
+ }
+ throw new IllegalArgumentException("unknown ChangeKind '" + changeKind + "'");
+ }
+
+ @Override @Programmatic
+ public boolean canPublish() {
+ return publishingServiceIfAny != null;
+ }
+
+ @Override @Programmatic
+ public void publishObjects(final Map<ObjectAdapter, ChangeKind> changeKindByEnlistedAdapter) {
+
+ if(!canPublish()) {
+ return;
+ }
+
+ final String currentUser = userService.getUser().getName();
+ final Timestamp timestamp = clockService.nowAsJavaSqlTimestamp();
+ final ObjectStringifier stringifier = objectStringifier();
+
+ // take a copy of enlisted adapters ... the JDO implementation of the PublishingService
+ // creates further entities which would be enlisted; taking copy of the keys avoids ConcurrentModificationException
+ final List<ObjectAdapter> enlistedAdapters =
+ Lists.newArrayList(changeKindByEnlistedAdapter.keySet());
+
+ for (final ObjectAdapter enlistedAdapter : enlistedAdapters) {
+ final ChangeKind changeKind = changeKindByEnlistedAdapter.get(enlistedAdapter);
+
+ publishObject(enlistedAdapter, changeKind, currentUser, timestamp, stringifier);
+ }
+ }
+
+ private void publishObject(
+ final ObjectAdapter enlistedAdapter,
+ final ChangeKind changeKind,
+ final String currentUser,
+ final Timestamp timestamp,
+ final ObjectStringifier stringifier) {
+
+ final PublishedObjectFacet publishedObjectFacet =
+ enlistedAdapter.getSpecification().getFacet(PublishedObjectFacet.class);
+ if(publishedObjectFacet == null) {
+ return;
+ }
+ final PublishedObject.PayloadFactory payloadFactory = publishedObjectFacet.value();
+
+ final RootOid enlistedAdapterOid = (RootOid) enlistedAdapter.getOid();
+ final String enlistedAdapterClass = CommandUtil.targetClassNameFor(enlistedAdapter);
+ final Bookmark enlistedTarget = enlistedAdapterOid.asBookmark();
+
+ final EventMetadata metadata = newEventMetadata(
+ currentUser, timestamp, changeKind, enlistedAdapterClass, enlistedTarget);
+
+ final Object pojo = ObjectAdapter.Util.unwrap(undeletedElseEmpty(enlistedAdapter));
+ final EventPayload payload = payloadFactory.payloadFor(pojo, changeKind);
+
+ payload.withStringifier(stringifier);
+ publishingServiceIfAny.publish(metadata, payload);
+ }
+
+ public void publishAction(
+ final ObjectAction objectAction,
+ final IdentifiedHolder identifiedHolder,
+ final ObjectAdapter targetAdapter,
+ final List<ObjectAdapter> parameterAdapters,
+ final ObjectAdapter resultAdapter) {
+ if(!canPublish()) {
+ return;
+ }
+
+ final String currentUser = userService.getUser().getName();
+ final Timestamp timestamp = clockService.nowAsJavaSqlTimestamp();
+
+ final PublishedActionFacet publishedActionFacet =
+ identifiedHolder.getFacet(PublishedActionFacet.class);
+ if(publishedActionFacet == null) {
+ return;
+ }
+
+ final RootOid adapterOid = (RootOid) targetAdapter.getOid();
+ final String oidStr = getOidMarshaller().marshal(adapterOid);
+ final Identifier actionIdentifier = objectAction.getIdentifier();
+ final String title = oidStr + ": " + actionIdentifier.toNameParmsIdentityString();
+
+ final String actionTargetClass = CommandUtil.targetClassNameFor(targetAdapter);
+ final String actionTargetAction = CommandUtil.targetActionNameFor(objectAction);
+ final Bookmark actionTarget = CommandUtil.bookmarkFor(targetAdapter);
+ final String actionMemberIdentifier = CommandUtil.actionIdentifierFor(objectAction);
+
+ final List<String> parameterNames;
+ final List<Class<?>> parameterTypes;
+ final Class<?> returnType;
+
+ if(identifiedHolder instanceof FacetedMethod) {
+ // should always be the case
+
+ final FacetedMethod facetedMethod = (FacetedMethod) identifiedHolder;
+ returnType = facetedMethod.getType();
+
+ final List<FacetedMethodParameter> parameters = facetedMethod.getParameters();
+ parameterNames = immutableList(Iterables.transform(parameters, FacetedMethodParameter.Functions.GET_NAME));
+ parameterTypes = immutableList(Iterables.transform(parameters, FacetedMethodParameter.Functions.GET_TYPE));
+ } else {
+ parameterNames = null;
+ parameterTypes = null;
+ returnType = null;
+ }
+
+ final Command command = commandContext.getCommand();
+
+ final Interaction.SequenceName sequenceName = Interaction.SequenceName.PUBLISHED_EVENT;
+ final int nextEventSequence = command.next(sequenceName.abbr());
+ final UUID transactionId = command.getTransactionId();
+ final EventMetadata metadata = new EventMetadata(
+ transactionId, nextEventSequence, EventType.ACTION_INVOCATION, currentUser, timestamp, title,
+ actionTargetClass, actionTargetAction, actionTarget, actionMemberIdentifier, parameterNames,
+ parameterTypes, returnType);
+
+ final PublishedAction.PayloadFactory payloadFactory = publishedActionFacet.value();
+
+ final ObjectStringifier stringifier = objectStringifier();
+
+ final EventPayload payload = payloadFactory.payloadFor(
+ identifiedHolder.getIdentifier(),
+ ObjectAdapter.Util.unwrap(undeletedElseEmpty(targetAdapter)),
+ ObjectAdapter.Util.unwrap(undeletedElseEmpty(parameterAdapters)),
+ ObjectAdapter.Util.unwrap(undeletedElseEmpty(resultAdapter)));
+ payload.withStringifier(stringifier);
+ publishingServiceIfAny.publish(metadata, payload);
+ }
+
+ private static <T> List<T> immutableList(final Iterable<T> iterable) {
+ return Collections.unmodifiableList(Lists.newArrayList(iterable));
+ }
+
+ private ObjectStringifier objectStringifier() {
+ return new ObjectStringifier() {
+ @Override
+ public String toString(Object object) {
+ if(object == null) {
+ return null;
+ }
+ final ObjectAdapter adapter = IsisContext.getPersistenceSession().adapterFor(object);
+ Oid oid = adapter.getOid();
+ return oid != null? oid.enString(getOidMarshaller()): encodedValueOf(adapter);
+ }
+ private String encodedValueOf(ObjectAdapter adapter) {
+ EncodableFacet facet = adapter.getSpecification().getFacet(EncodableFacet.class);
+ return facet != null? facet.toEncodedString(adapter): adapter.toString();
+ }
+ @Override
+ public String classNameOf(Object object) {
+ final ObjectAdapter adapter = getPersistenceSession().adapterFor(object);
+ final String className = adapter.getSpecification().getFullIdentifier();
+ return className;
+ }
+ };
+ }
+
+ private static List<ObjectAdapter> undeletedElseEmpty(List<ObjectAdapter> parameters) {
+ return Lists.newArrayList(Iterables.transform(parameters, NOT_DESTROYED_ELSE_EMPTY));
+ }
+
+ private static ObjectAdapter undeletedElseEmpty(ObjectAdapter adapter) {
+ return NOT_DESTROYED_ELSE_EMPTY.apply(adapter);
+ }
+
+ protected OidMarshaller getOidMarshaller() {
+ return IsisContext.getOidMarshaller();
+ }
+
+ private EventMetadata newEventMetadata(
+ final String currentUser,
+ final Timestamp timestamp,
+ final ChangeKind changeKind,
+ final String enlistedAdapterClass,
+ final Bookmark enlistedTarget) {
+ final EventType eventType = PublishingServiceInternalDefault.eventTypeFor(changeKind);
+
+ final Command command = commandContext.getCommand();
+
+ final Interaction.SequenceName sequenceName = Interaction.SequenceName.PUBLISHED_EVENT;
+ final int nextEventSequence = command.next(sequenceName.abbr());
+ final UUID transactionId = command.getTransactionId();
+ return new EventMetadata(
+ transactionId, nextEventSequence, eventType, currentUser, timestamp, enlistedTarget.toString(),
+ enlistedAdapterClass, null, enlistedTarget, null, null, null, null);
+ }
+
+ private IsisTransactionManager.PersistenceSessionTransactionManagement getPersistenceSession() {
+ return IsisContext.getPersistenceSession();
+ }
+
+
+ @Inject
+ private PublishingService publishingServiceIfAny;
+
+ @Inject
+ private CommandContext commandContext;
+
+ @Inject
+ private ClockService clockService;
+
+ @Inject
+ private UserService userService;
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/9d8847fc/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
index 5fc4934..0f2747e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
@@ -70,7 +70,6 @@ import org.apache.isis.core.metamodel.transactions.TransactionState;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.PersistenceCommand;
-import org.apache.isis.core.runtime.persistence.objectstore.transaction.PublishingServiceInternalDefault;
import org.apache.isis.core.runtime.system.context.IsisContext;
import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
@@ -254,7 +253,7 @@ public class IsisTransaction implements TransactionScopedComponent {
this.interactionContext = lookupService(InteractionContext.class);
this.auditingServiceIfAny = lookupServiceIfAny(AuditingService3.class);
- this.publishingServiceInternal = lookupService(PublishingServiceInternalDefault.class);
+ this.publishingServiceInternal = lookupService(PublishingServiceInternal.class);
this.transactionId = transactionId;
http://git-wip-us.apache.org/repos/asf/isis/blob/9d8847fc/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 90382f2..023921c 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
@@ -61,7 +61,6 @@ import org.apache.isis.core.metamodel.facets.ImperativeFacet;
import org.apache.isis.core.metamodel.facets.ImperativeFacet.Intent;
import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.services.publishing.PublishingServiceInternal;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -73,8 +72,6 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.metamodel.specloader.specimpl.ContributeeMember;
import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionContributee;
import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-import org.apache.isis.core.runtime.persistence.objectstore.transaction.PublishingServiceInternalDefault;
-import org.apache.isis.core.runtime.system.context.IsisContext;
public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandlerDefault<T> {
@@ -804,10 +801,5 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
return persistenceSessionService;
}
- private PublishingServiceInternal getPublishingServiceInternal() {
- return IsisContext.getPersistenceSession()
- .getServicesInjector().lookupService(PublishingServiceInternalDefault.class);
- }
-
}