You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2013/01/17 23:18:43 UTC
svn commit: r1434936 - in
/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core:
ModuleArtifactMapper.java osgi/AriesHelper.java
Author: gawor
Date: Thu Jan 17 22:18:43 2013
New Revision: 1434936
URL: http://svn.apache.org/viewvc?rev=1434936&view=rev
Log:
reset manifest cache and simplify reflection code a bit
Modified:
geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/ModuleArtifactMapper.java
geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/osgi/AriesHelper.java
Modified: geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/ModuleArtifactMapper.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/ModuleArtifactMapper.java?rev=1434936&r1=1434935&r2=1434936&view=diff
==============================================================================
--- geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/ModuleArtifactMapper.java (original)
+++ geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/ModuleArtifactMapper.java Thu Jan 17 22:18:43 2013
@@ -25,6 +25,7 @@ import org.apache.geronimo.st.v30.core.b
import org.apache.geronimo.st.v30.core.base.ModuleSet;
import org.apache.geronimo.st.v30.core.internal.Trace;
import org.apache.geronimo.st.v30.core.osgi.AriesHelper;
+import org.apache.geronimo.st.v30.core.osgi.AriesHelper.BundleInfo;
import org.apache.geronimo.st.v30.core.persist.PersistenceManager;
import org.apache.geronimo.st.v30.core.persist.factory.PersistenceManagerFactory;
import org.apache.geronimo.st.v30.core.persist.factory.impl.FilePersistenceManagerFactory;
@@ -85,9 +86,8 @@ public class ModuleArtifactMapper {
synchronized public void addBundleEntry(IServer server, IModule module, long bundleId, int bundleStartLevel) {
ModuleSet<Bundle> bundles = getServerBundles(server);
if(bundles != null) {
- String symbolicName = AriesHelper.getSymbolicName(module);
- Version version = AriesHelper.getVersion(module);
- Bundle bundle = new Bundle(getId(module), symbolicName, version, bundleId, bundleStartLevel);
+ BundleInfo bundleInfo = AriesHelper.getBundleInfo(module);
+ Bundle bundle = new Bundle(getId(module), bundleInfo.getSymbolicName(), bundleInfo.getVersion(), bundleId, bundleStartLevel);
bundles.remove(bundle);
bundles.add(bundle);
}
Modified: geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/osgi/AriesHelper.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/osgi/AriesHelper.java?rev=1434936&r1=1434935&r2=1434936&view=diff
==============================================================================
--- geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/osgi/AriesHelper.java (original)
+++ geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/osgi/AriesHelper.java Thu Jan 17 22:18:43 2013
@@ -16,7 +16,6 @@
*/
package org.apache.geronimo.st.v30.core.osgi;
-import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.apache.geronimo.st.v30.core.Activator;
@@ -35,9 +34,75 @@ import org.osgi.framework.Version;
*/
public final class AriesHelper {
- private AriesHelper() {
+ private static Method GET_BUNDLE_MANIFEST_METHOD;
+ private static Method GET_APPLICATION_MANIFEST_METHOD;
+
+ private static Method GET_BUNDLE_SYMBOLIC_NAME_METHOD;
+ private static Method GET_BUNDLE_VERSION_METHOD;
+
+ private static Method GET_APPLICATION_SYMBOLIC_NAME_METHOD;
+ private static Method GET_APPLICATION_VERSION_METHOD;
+
+ private static Method REMOVE_MODEL_METHOD;
+ private static Method GET_MANIFEST_FILE_METHOD;
+
+ static {
+ initialize();
+ }
+
+ private static void initialize() {
+ try {
+ Class<?> ariesUtilsClass = Class.forName("com.ibm.etools.aries.internal.core.utils.AriesUtils");
+ GET_BUNDLE_MANIFEST_METHOD = ariesUtilsClass.getMethod("getBlueprintBundleManifest", IProject.class);
+ GET_APPLICATION_MANIFEST_METHOD = ariesUtilsClass.getMethod("getApplicationManifest", IProject.class);
+ } catch (ClassNotFoundException e) {
+ Trace.trace(Trace.WARNING, "AriesUtils class is not available", e, Activator.traceOsgi);
+ } catch (Exception e) {
+ Trace.trace(Trace.ERROR, "Could not initialize AriesUtils methods", e, Activator.traceOsgi);
+ }
+
+ try {
+ Class<?> bundleManifestClass = Class.forName("com.ibm.etools.aries.core.models.BundleManifest");
+ GET_BUNDLE_SYMBOLIC_NAME_METHOD = bundleManifestClass.getMethod("getBundleSymbolicName");
+ GET_BUNDLE_VERSION_METHOD = bundleManifestClass.getMethod("getBundleVersion");
+ } catch (ClassNotFoundException e) {
+ Trace.trace(Trace.WARNING, "BundleManifest class is not available", e, Activator.traceOsgi);
+ } catch (Exception e) {
+ Trace.trace(Trace.ERROR, "Could not initialize BundleManifest methods", e, Activator.traceOsgi);
+ }
+
+ try {
+ Class<?> appManifestClass = Class.forName("com.ibm.etools.aries.core.models.ApplicationManifest");
+ GET_APPLICATION_SYMBOLIC_NAME_METHOD = appManifestClass.getMethod("getApplicationSymbolicName");
+ GET_APPLICATION_VERSION_METHOD= appManifestClass.getMethod("getApplicationVersion");
+ } catch (ClassNotFoundException e) {
+ Trace.trace(Trace.WARNING, "ApplicationManifest class is not available", e, Activator.traceOsgi);
+ } catch (Exception e) {
+ Trace.trace(Trace.ERROR, "Could not initialize ApplicationManifest methods", e, Activator.traceOsgi);
+ }
+
+ try {
+ Class<?> manifestFactoryClass = Class.forName("com.ibm.etools.aries.core.models.ManifestModelsFactory");
+ Class<?> manifestClass = Class.forName("com.ibm.etools.aries.core.models.Manifest");
+ REMOVE_MODEL_METHOD = manifestFactoryClass.getMethod("removeModel", new Class [] { IProject.class, manifestClass });
+ } catch (ClassNotFoundException e) {
+ Trace.trace(Trace.WARNING, "ManifestModelsFactory or Manifest class is not available", e, Activator.traceOsgi);
+ } catch (Exception e) {
+ Trace.trace(Trace.ERROR, "Could not initialize ManifestModelsFactory methods", e, Activator.traceOsgi);
+ }
+
+ try {
+ Class<?> manifestUtilsClass = Class.forName("com.ibm.etools.aries.internal.core.utils.ManifestUtils");
+ GET_MANIFEST_FILE_METHOD = manifestUtilsClass.getMethod("getManifestFile", IProject.class);
+ } catch (ClassNotFoundException e) {
+ Trace.trace(Trace.WARNING, "ManifestUtils class is not available", e, Activator.traceOsgi);
+ } catch (Exception e) {
+ Trace.trace(Trace.ERROR, "Could not initialize ManifestUtils methods", e, Activator.traceOsgi);
+ }
}
+ private AriesHelper() {
+ }
/**
* Determine if the Aries OSGi tooling plugins are installed. They are optional and have to be manually installed
@@ -62,101 +127,58 @@ public final class AriesHelper {
return false;
}
- public static IModule[] getChildModules(IModule ebaModule) {
- if (AriesHelper.isAriesInstalled()) {
- try {
- Class<?> class1 = Class.forName("com.ibm.etools.aries.internal.core.modules.AriesModuleDelegate");
- Method method = class1.getMethod("getChildModules");
- Constructor<?> constructor = class1.getConstructor(IProject.class);
- Object object = constructor.newInstance(ebaModule.getProject());
- return (IModule[]) method.invoke(object);
- } catch (Exception e) {
- Trace.trace(Trace.ERROR, "Could not get child modules", e, Activator.traceOsgi);
- }
- }
- return new IModule[0];
- }
-
- public static String getSymbolicName(IModule bundleModule) {
- if (AriesHelper.isAriesInstalled()) {
- try {
- Class<?> class1 = Class.forName("com.ibm.etools.aries.internal.core.utils.AriesUtils");
- Method method = class1.getMethod("getBundleSymbolicName", IProject.class);
- return (String) method.invoke(null, bundleModule.getProject());
- } catch (Exception e) {
- Trace.trace(Trace.ERROR, "Could not get bundle symbolic name", e, Activator.traceOsgi);
- }
+ public static BundleInfo getBundleInfo(IModule module) {
+ BundleInfo info = null;
+ try {
+ info = getBundleInfo(module.getProject());
+ } catch (Exception e) {
+ Trace.trace(Trace.ERROR, "Could not get BundleInfo", e, Activator.traceOsgi);
}
- return null;
+ return info;
}
- public static Version getVersion(IModule bundleModule) {
- if (AriesHelper.isAriesInstalled()) {
- try {
- Class<?> ariesUtilsClass = Class.forName("com.ibm.etools.aries.internal.core.utils.AriesUtils");
- Method method = ariesUtilsClass.getMethod("getBlueprintBundleManifest", IProject.class);
- Object object = method.invoke(null, bundleModule.getProject());
-
- Class<?> bundleManifest = Class.forName("com.ibm.etools.aries.core.models.BundleManifest");
- method = bundleManifest.getMethod("getBundleVersion");
- String versionStr = (String) method.invoke(object);
- Version version = Version.parseVersion(versionStr);
- return version;
- } catch (Exception e) {
- Trace.trace(Trace.ERROR, "Could not get bundle version", e, Activator.traceOsgi);
- }
- }
- return null;
- }
-
public static BundleInfo getBundleInfo(IProject project) throws Exception {
- if (AriesHelper.isAriesInstalled()) {
- Class<?> ariesUtilsClass = Class.forName("com.ibm.etools.aries.internal.core.utils.AriesUtils");
- Method method = ariesUtilsClass.getMethod("getBlueprintBundleManifest", IProject.class);
- Object object = method.invoke(null, project);
-
- Class<?> bundleManifest = Class.forName("com.ibm.etools.aries.core.models.BundleManifest");
- method = bundleManifest.getMethod("getBundleSymbolicName");
- String symbolicName = (String) method.invoke(object);
-
- method = bundleManifest.getMethod("getBundleVersion");
- String versionStr = (String) method.invoke(object);
- Version version = Version.parseVersion(versionStr);
-
- if (symbolicName != null && version != null) {
- return new BundleInfo(symbolicName, version);
+ if (GET_BUNDLE_MANIFEST_METHOD != null) {
+ Object bundleManifest = GET_BUNDLE_MANIFEST_METHOD.invoke(null, project);
+ String symbolicName = (String) GET_BUNDLE_SYMBOLIC_NAME_METHOD.invoke(bundleManifest);
+ String version = (String) GET_BUNDLE_VERSION_METHOD.invoke(bundleManifest);
+ if (symbolicName == null && version == null && REMOVE_MODEL_METHOD != null) {
+ // try to reset the manifest cache in case and lookup the values again
+ REMOVE_MODEL_METHOD.invoke(null, project, bundleManifest);
+ bundleManifest = GET_BUNDLE_MANIFEST_METHOD.invoke(null, project);
+ symbolicName = (String) GET_BUNDLE_SYMBOLIC_NAME_METHOD.invoke(bundleManifest);
+ version = (String) GET_BUNDLE_VERSION_METHOD.invoke(bundleManifest);
+ }
+ if (symbolicName != null) {
+ return new BundleInfo(symbolicName, Version.parseVersion(version));
}
}
return null;
}
-
+
public static BundleInfo getApplicationBundleInfo(IProject project) throws Exception {
- if (AriesHelper.isAriesInstalled()) {
- Class<?> ariesUtilsClass = Class.forName("com.ibm.etools.aries.internal.core.utils.AriesUtils");
- Method method = ariesUtilsClass.getMethod("getApplicationManifest", IProject.class);
- Object object = method.invoke(null, project);
-
- Class<?> appManifestClass = Class.forName("com.ibm.etools.aries.core.models.ApplicationManifest");
- method = appManifestClass.getMethod("getApplicationSymbolicName");
- String symbolicName = (String) method.invoke(object);
-
- method = appManifestClass.getMethod("getApplicationVersion");
- String versionStr = (String) method.invoke(object);
- Version version = Version.parseVersion(versionStr);
-
- if (symbolicName != null && version != null) {
- return new BundleInfo(symbolicName, version);
+ if (GET_APPLICATION_MANIFEST_METHOD != null) {
+ Object appManifest = GET_APPLICATION_MANIFEST_METHOD.invoke(null, project);
+ String symbolicName = (String) GET_APPLICATION_SYMBOLIC_NAME_METHOD.invoke(appManifest);
+ String version = (String) GET_APPLICATION_VERSION_METHOD.invoke(appManifest);
+ if (symbolicName == null && version == null && REMOVE_MODEL_METHOD != null) {
+ // try to reset the manifest cache in case and lookup the values again
+ REMOVE_MODEL_METHOD.invoke(null, project, appManifest);
+ appManifest = GET_APPLICATION_MANIFEST_METHOD.invoke(null, project);
+ symbolicName = (String) GET_APPLICATION_SYMBOLIC_NAME_METHOD.invoke(appManifest);
+ version = (String) GET_APPLICATION_VERSION_METHOD.invoke(appManifest);
+ }
+ if (symbolicName != null) {
+ return new BundleInfo(symbolicName, Version.parseVersion(version));
}
}
return null;
}
public static IFile getManifestFile(IProject project) {
- if (AriesHelper.isAriesInstalled()) {
+ if (GET_MANIFEST_FILE_METHOD != null) {
try {
- Class<?> ariesUtilsClass = Class.forName("com.ibm.etools.aries.internal.core.utils.ManifestUtils");
- Method method = ariesUtilsClass.getMethod("getManifestFile", IProject.class);
- return (IFile) method.invoke(null, project);
+ return (IFile) GET_MANIFEST_FILE_METHOD.invoke(null, project);
} catch (Exception e) {
Trace.trace(Trace.ERROR, "Could not get manifest file", e, Activator.traceOsgi);
}