You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/01/04 11:20:24 UTC
svn commit: r608793 - in
/servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor:
DeploymentListener.java FileMonitor.java
Author: gnodet
Date: Fri Jan 4 02:20:21 2008
New Revision: 608793
URL: http://svn.apache.org/viewvc?rev=608793&view=rev
Log:
Add a DeploymentListener interface, patch provided by Jeff Yu
Added:
servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/DeploymentListener.java
Modified:
servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java
Added: servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/DeploymentListener.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/DeploymentListener.java?rev=608793&view=auto
==============================================================================
--- servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/DeploymentListener.java (added)
+++ servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/DeploymentListener.java Fri Jan 4 02:20:21 2008
@@ -0,0 +1,36 @@
+/**
+ *
+ * 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.servicemix.runtime.filemonitor;
+
+import java.io.File;
+
+
+public interface DeploymentListener {
+
+ /**
+ * Returns true if the listener can process the given file
+ */
+ boolean canHandle(File artifact);
+
+ /**
+ * Process the given file (canHandle returned true previously)
+ * Can return <null> or a pointer to a transformed file.
+ */
+ File handle(File artifact, File tmpDir);
+
+}
Modified: servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java?rev=608793&r1=608792&r2=608793&view=diff
==============================================================================
--- servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java (original)
+++ servicemix/smx4/runtime/trunk/filemonitor/src/main/java/org/apache/servicemix/runtime/filemonitor/FileMonitor.java Fri Jan 4 02:20:21 2008
@@ -24,9 +24,11 @@
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Dictionary;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import java.util.Set;
@@ -36,6 +38,7 @@
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.packageadmin.PackageAdmin;
@@ -73,6 +76,7 @@
private List<Bundle> changedBundles = new ArrayList<Bundle>();
private List<Bundle> bundlesToStart = new ArrayList<Bundle>();
private List<Bundle> bundlesToUpdate = new ArrayList<Bundle>();
+ private Map<String, String> artifactToBundle = new HashMap<String, String>();
private int logLevel = NONE;
@@ -107,7 +111,7 @@
deployDir.mkdirs();
generateDir.mkdirs();
- List dirs = new ArrayList();
+ List<File> dirs = new ArrayList<File>();
if (configDir != null) {
dirs.add(configDir);
}
@@ -200,11 +204,26 @@
for (Object filename : filenames) {
String name = filename.toString();
-
- // now lets iterate to find the parent directory
+ boolean added = true;
+
File file = new File(name);
try {
debug("File changed: " + filename + " with type: " + filename.getClass().getName());
+
+ if (file.exists()) {
+ file = transformArtifact(file);
+ } else {
+ added = false;
+ String transformedFile = artifactToBundle.get(name);
+ if (transformedFile != null) {
+ file = new File(transformedFile);
+ if (file.exists()) {
+ file.delete();
+ }
+ }
+ }
+
+ // now lets iterate to find the parent directory
File jardir = getExpandedBundleRootDirectory(file);
if (jardir != null) {
if (file.exists() && !bundleJarsCreated.contains(jardir)) {
@@ -213,23 +232,23 @@
deployBundle(newBundle);
}
}
- else if (name.endsWith(".jar")) {
- if (file.exists()) {
+ else if (file.getName().endsWith(".jar")) {
+ if (added) {
deployBundle(file);
}
else {
undeployBundle(file);
}
}
- else if (name.endsWith(".cfg")) {
- if (file.exists()) {
+ else if (file.getName().endsWith(".cfg")) {
+ if (added) {
updateConfiguration(file);
}
else {
deleteConfiguration(file);
}
}
- else if (name.equals("MANIFEST.MF")) {
+ else if (file.getName().equals("MANIFEST.MF")) {
File parentFile = file.getParentFile();
if (parentFile.getName().equals("META-INF")) {
File bundleDir = parentFile.getParentFile();
@@ -245,6 +264,26 @@
}
refreshPackagesAndStartOrUpdateBundles();
}
+
+
+ private File transformArtifact(File file) throws Exception {
+ ServiceReference[] srvRefs = getContext().getAllServiceReferences(DeploymentListener.class.getName(), null);
+ if(srvRefs != null) {
+ for(ServiceReference sr : srvRefs) {
+ try {
+ DeploymentListener deploymentListener = (DeploymentListener)getContext().getService(sr);
+ if (deploymentListener.canHandle(file)) {
+ File transformedFile = deploymentListener.handle(file, getGenerateDir());
+ artifactToBundle.put(file.getAbsolutePath(), transformedFile.getAbsolutePath());
+ file = transformedFile;
+ }
+ } finally {
+ getContext().ungetService(sr);
+ }
+ }
+ }
+ return file;
+ }
protected void deployBundle(File file) throws IOException, BundleException {
log("Deloying: " + file.getCanonicalPath());
@@ -284,14 +323,12 @@
}
protected Bundle getBundleForJarFile(File file) throws IOException {
- String absoluteFilePath = file.getCanonicalPath();
+ String absoluteFilePath = file.getAbsolutePath();
Bundle bundles[] = getContext().getBundles();
for (int i = 0; i < bundles.length; i++) {
Bundle bundle = bundles[i];
String location = bundle.getLocation();
- File locationFile = new File(location);
- String absoluteLocation = locationFile.getCanonicalPath();
- if (absoluteFilePath.equals(absoluteLocation)) {
+ if (location.endsWith(absoluteFilePath)) {
return bundle;
}
}