You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2016/12/14 09:15:26 UTC
svn commit: r1774151 - in
/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging:
events/ events/impl/ impl/
Author: tripod
Date: Wed Dec 14 09:15:26 2016
New Revision: 1774151
URL: http://svn.apache.org/viewvc?rev=1774151&view=rev
Log:
JCRVLT-139 Add support for package installation listeners
Added:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEvent.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEventListener.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcher.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcherImpl.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/package-info.java
Modified:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java
Added: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEvent.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEvent.java?rev=1774151&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEvent.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEvent.java Wed Dec 14 09:15:26 2016
@@ -0,0 +1,55 @@
+/*
+ * 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.jackrabbit.vault.packaging.events;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.vault.packaging.PackageId;
+
+import aQute.bnd.annotation.ProviderType;
+
+/**
+ * Event that is sent via the packaging listeners.
+ */
+@ProviderType
+public interface PackageEvent {
+
+ /**
+ * Event type
+ */
+ enum Type {
+ UPLOAD,
+ INSTALL,
+ EXTRACT,
+ UNINSTALL,
+ CREATE,
+ REMOVE,
+ ASSEMBLE,
+ REWRAPP,
+ RENAME,
+ EXTRACT_SUB_PACKAGES,
+ SNAPSHOT
+ }
+
+ @Nonnull Type getType();
+
+ @Nonnull PackageId getId();
+
+ @CheckForNull PackageId getRelatedId();
+
+}
\ No newline at end of file
Added: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEventListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEventListener.java?rev=1774151&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEventListener.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/PackageEventListener.java Wed Dec 14 09:15:26 2016
@@ -0,0 +1,33 @@
+/*
+ * 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.jackrabbit.vault.packaging.events;
+
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.vault.packaging.PackageId;
+
+import aQute.bnd.annotation.ConsumerType;
+
+/**
+ * Listener that can receive packaging events. Listeners are registered via OSGi.
+ */
+@ConsumerType
+public interface PackageEventListener {
+
+ void onPackageEvent(@Nonnull PackageEvent event);
+
+}
\ No newline at end of file
Added: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcher.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcher.java?rev=1774151&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcher.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcher.java Wed Dec 14 09:15:26 2016
@@ -0,0 +1,41 @@
+/*
+ * 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.jackrabbit.vault.packaging.events.impl;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.apache.jackrabbit.vault.packaging.PackageId;
+import org.apache.jackrabbit.vault.packaging.events.PackageEvent;
+
+import aQute.bnd.annotation.ProviderType;
+
+/**
+ * Internal service that is used to dispatch packaging events.
+ */
+@ProviderType
+public interface PackageEventDispatcher {
+
+ /**
+ * Dispatches the events to the listeners.
+ * @param type Event type
+ * @param id package id
+ * @param related related id
+ */
+ void dispatch(@Nonnull PackageEvent.Type type, @Nonnull PackageId id, @Nullable PackageId related);
+
+}
\ No newline at end of file
Added: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcherImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcherImpl.java?rev=1774151&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcherImpl.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/impl/PackageEventDispatcherImpl.java Wed Dec 14 09:15:26 2016
@@ -0,0 +1,129 @@
+/*
+ * 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.jackrabbit.vault.packaging.events.impl;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.References;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.vault.packaging.PackageId;
+import org.apache.jackrabbit.vault.packaging.events.PackageEvent;
+import org.apache.jackrabbit.vault.packaging.events.PackageEventListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Packaging observation helper
+ */
+@Component(immediate=true)
+@References({
+ @Reference(name="packageEventListener",
+ referenceInterface = PackageEventListener.class,
+ cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
+ policy = ReferencePolicy.DYNAMIC)
+})
+@Service
+public class PackageEventDispatcherImpl implements PackageEventDispatcher {
+
+ /**
+ * default logger
+ */
+ private static final Logger log = LoggerFactory.getLogger(PackageEventDispatcherImpl.class);
+
+ /**
+ * the registered listener
+ */
+ private ConcurrentHashMap<Object, PackageEventListener> listeners = new ConcurrentHashMap<Object, PackageEventListener>();
+
+ /**
+ * Bind a new listener
+ * @param listener the processor
+ * @param props service properties
+ */
+ protected void bindPackageEventListener(PackageEventListener listener, Map<String, Object> props) {
+ listeners.put(props.get("component.id"), listener);
+ log.info("Registering package event listener {}", listener.getClass().getName());
+ }
+
+ /**
+ * Unbinds a listener
+ * @param listener the processor
+ * @param props service properties
+ */
+ protected void unbindPackageEventListener(PackageEventListener listener, Map<String, Object> props) {
+ if (listeners.remove(props.get("component.id")) != null) {
+ log.info("Unregistering package event listener {}", listener.getClass().getName());
+ } else {
+ log.warn("unable to unregister package event listener {}", listener.getClass().getName());
+ }
+ }
+
+ public void dispatch(@Nonnull PackageEvent.Type type, @Nonnull PackageId id, @Nullable PackageId related) {
+ final EventImpl event = new EventImpl(type, id, related);
+ for (PackageEventListener l: listeners.values()) {
+ try {
+ l.onPackageEvent(event);
+ } catch (Throwable e) {
+ // ignore
+ }
+ }
+ }
+
+ private static final class EventImpl implements PackageEvent {
+
+ private final Type type;
+
+ private final PackageId id;
+
+ private final PackageId related;
+
+ public EventImpl(Type type, PackageId id, PackageId related) {
+ this.type = type;
+ this.id = id;
+ this.related = related;
+ }
+
+ @Nonnull
+ @Override
+ public Type getType() {
+ return type;
+ }
+
+ @Nonnull
+ @Override
+ public PackageId getId() {
+ return id;
+ }
+
+ @CheckForNull
+ @Override
+ public PackageId getRelatedId() {
+ return related;
+ }
+ }
+
+}
+
Added: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/package-info.java?rev=1774151&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/package-info.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/events/package-info.java Wed Dec 14 09:15:26 2016
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+@Version("1.0.0")
+package org.apache.jackrabbit.vault.packaging.events;
+
+import aQute.bnd.annotation.Version;
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java?rev=1774151&r1=1774150&r2=1774151&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java Wed Dec 14 09:15:26 2016
@@ -63,6 +63,7 @@ import org.apache.jackrabbit.vault.packa
import org.apache.jackrabbit.vault.packaging.SubPackageHandling;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.apache.jackrabbit.vault.packaging.Version;
+import org.apache.jackrabbit.vault.packaging.events.PackageEvent;
import org.apache.jackrabbit.vault.util.JcrConstants;
import org.apache.jackrabbit.vault.util.Text;
import org.slf4j.Logger;
@@ -498,6 +499,12 @@ public class JcrPackageImpl implements J
s.save();
}
}
+
+ if (createSnapshot) {
+ mgr.dispatch(PackageEvent.Type.INSTALL, def.getId(), null);
+ } else {
+ mgr.dispatch(PackageEvent.Type.EXTRACT, def.getId(), null);
+ }
}
/**
@@ -509,6 +516,7 @@ public class JcrPackageImpl implements J
throws RepositoryException, PackageException, IOException {
Set<PackageId> processed = new HashSet<PackageId>();
extractSubpackages(opts, processed);
+ mgr.dispatch(PackageEvent.Type.EXTRACT_SUB_PACKAGES, getDefinition().getId(), null);
PackageId[] ret = processed.toArray(new PackageId[processed.size()]);
Arrays.sort(ret);
return ret;
@@ -779,6 +787,7 @@ public class JcrPackageImpl implements J
}
packMgr.assemble(snap.getNode(), snapDef, opts.getListener());
log.info("Creating snapshot for {} completed.", id);
+ mgr.dispatch(PackageEvent.Type.SNAPSHOT, id, null);
return snap;
}
@@ -906,6 +915,9 @@ public class JcrPackageImpl implements J
// revert installed flags on this package
JcrPackageDefinitionImpl def = (JcrPackageDefinitionImpl) getDefinition();
def.clearLastUnpacked(true);
+
+ mgr.dispatch(PackageEvent.Type.UNINSTALL, def.getId(), null);
+
}
/**
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java?rev=1774151&r1=1774150&r2=1774151&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java Wed Dec 14 09:15:26 2016
@@ -57,6 +57,8 @@ import org.apache.jackrabbit.vault.packa
import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.apache.jackrabbit.vault.packaging.Version;
+import org.apache.jackrabbit.vault.packaging.events.PackageEvent;
+import org.apache.jackrabbit.vault.packaging.events.impl.PackageEventDispatcher;
import org.apache.jackrabbit.vault.util.InputStreamPump;
import org.apache.jackrabbit.vault.util.JcrConstants;
import org.apache.jackrabbit.vault.util.Text;
@@ -276,6 +278,7 @@ public class JcrPackageManagerImpl exten
if (state != null) {
def.setState(state);
}
+ dispatch(PackageEvent.Type.UPLOAD, pid, null);
return jcrPack;
} finally {
bin.dispose();
@@ -356,6 +359,7 @@ public class JcrPackageManagerImpl exten
if (state != null) {
def.setState(state);
}
+ dispatch(PackageEvent.Type.UPLOAD, pid, null);
return jcrPack;
} finally {
if (jcrPack == null) {
@@ -450,6 +454,7 @@ public class JcrPackageManagerImpl exten
} finally {
IOUtils.closeQuietly(in);
}
+ dispatch(PackageEvent.Type.CREATE, pid, null);
return new JcrPackageImpl(this, node, (ZipVaultPackage) pack);
}
@@ -482,6 +487,7 @@ public class JcrPackageManagerImpl exten
content.setProperty(JcrConstants.JCR_MIMETYPE, JcrPackage.MIME_TYPE);
content.setProperty(JcrConstants.JCR_DATA, bin);
def.unwrap(archive, false);
+ dispatch(PackageEvent.Type.CREATE, pid, null);
return new JcrPackageImpl(this, node);
}
@@ -491,12 +497,14 @@ public class JcrPackageManagerImpl exten
*/
@Override
public void remove(JcrPackage pack) throws RepositoryException {
+ PackageId pid = pack.getDefinition().getId();
JcrPackage snap = pack.getSnapshot();
if (snap != null) {
snap.getNode().remove();
}
pack.getNode().remove();
session.save();
+ dispatch(PackageEvent.Type.REMOVE, pid, null);
}
/**
@@ -550,6 +558,7 @@ public class JcrPackageManagerImpl exten
session.save();
Node newNode = session.getNode(dstPath);
+ dispatch(PackageEvent.Type.RENAME, id, newId);
return open(newNode);
}
@@ -581,6 +590,7 @@ public class JcrPackageManagerImpl exten
opts.setPostProcessor(def.getInjectProcessor());
VaultPackage pack = assemble(packNode.getSession(), opts, (File) null);
+ PackageId id = pack.getId();
// update this content
Node contentNode = packNode.getNode(JcrConstants.JCR_CONTENT);
@@ -597,6 +607,7 @@ public class JcrPackageManagerImpl exten
contentNode.setProperty(JcrConstants.JCR_MIMETYPE, JcrPackage.MIME_TYPE);
packNode.getSession().save();
pack.close();
+ dispatch(PackageEvent.Type.ASSEMBLE, id, null);
}
/**
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java?rev=1774151&r1=1774150&r2=1774151&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java Wed Dec 14 09:15:26 2016
@@ -29,6 +29,8 @@ import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
@@ -44,9 +46,12 @@ import org.apache.jackrabbit.vault.fs.im
import org.apache.jackrabbit.vault.fs.io.JarExporter;
import org.apache.jackrabbit.vault.fs.spi.ProgressTracker;
import org.apache.jackrabbit.vault.packaging.ExportOptions;
+import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.PackageManager;
import org.apache.jackrabbit.vault.packaging.PackageProperties;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
+import org.apache.jackrabbit.vault.packaging.events.PackageEvent;
+import org.apache.jackrabbit.vault.packaging.events.impl.PackageEventDispatcher;
import org.apache.jackrabbit.vault.util.Constants;
/**
@@ -55,6 +60,12 @@ import org.apache.jackrabbit.vault.util.
public class PackageManagerImpl implements PackageManager {
/**
+ * event dispatcher
+ */
+ @Nullable
+ private PackageEventDispatcher dispatcher;
+
+ /**
* {@inheritDoc}
*/
public VaultPackage open(File file) throws IOException {
@@ -154,7 +165,9 @@ public class PackageManagerImpl implemen
rewrap(opts, src, out);
IOUtils.closeQuietly(out);
success = true;
- return new ZipVaultPackage(file, isTmp);
+ VaultPackage pack = new ZipVaultPackage(file, isTmp);
+ dispatch(PackageEvent.Type.REWRAPP, pack.getId(), null);
+ return pack;
} finally {
IOUtils.closeQuietly(out);
if (isTmp && !success) {
@@ -225,4 +238,21 @@ public class PackageManagerImpl implemen
exporter.close();
}
+ @Nullable
+ PackageEventDispatcher getDispatcher() {
+ return dispatcher;
+ }
+
+ void setDispatcher(@Nullable PackageEventDispatcher dispatcher) {
+ this.dispatcher = dispatcher;
+ }
+
+ void dispatch(@Nonnull PackageEvent.Type type, @Nonnull PackageId id, @Nullable PackageId related) {
+ if (dispatcher == null) {
+ return;
+ }
+ dispatcher.dispatch(type, id, related);
+ }
+
+
}
\ No newline at end of file
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java?rev=1774151&r1=1774150&r2=1774151&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java Wed Dec 14 09:15:26 2016
@@ -21,12 +21,14 @@ import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.jackrabbit.vault.packaging.JcrPackage;
import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition;
import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
import org.apache.jackrabbit.vault.packaging.PackageManager;
import org.apache.jackrabbit.vault.packaging.Packaging;
+import org.apache.jackrabbit.vault.packaging.events.impl.PackageEventDispatcher;
/**
* {@code PackagingImpl}...
@@ -35,10 +37,17 @@ import org.apache.jackrabbit.vault.packa
@Service(value = Packaging.class)
public class PackagingImpl implements Packaging {
+ @Reference
+ private PackageEventDispatcher eventDispatcher;
+
/**
* package manager is a singleton
*/
- private final PackageManager pkgManager = new PackageManagerImpl();
+ private final PackageManagerImpl pkgManager = new PackageManagerImpl();
+
+ public PackagingImpl() {
+ pkgManager.setDispatcher(eventDispatcher);
+ }
/**
* {@inheritDoc}
@@ -51,7 +60,9 @@ public class PackagingImpl implements Pa
* {@inheritDoc}
*/
public JcrPackageManager getPackageManager(Session session) {
- return new JcrPackageManagerImpl(session);
+ JcrPackageManagerImpl mgr = new JcrPackageManagerImpl(session);
+ mgr.setDispatcher(eventDispatcher);
+ return mgr;
}
/**