Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjmisinco2016-05-31 16:20:46 +0000
committerAndrew M. Finkbeiner2016-10-07 01:12:03 +0000
commit3acc2c0b2d6ab65c99cb9fc4084e33db70e39ff3 (patch)
tree84aa9e823d825a5b475b8aa8ab55490a556c9d04
parent11e6dd2475b02123e2a690ac147b1378b252d531 (diff)
downloadorg.eclipse.osee-3acc2c0b2d6ab65c99cb9fc4084e33db70e39ff3.tar.gz
org.eclipse.osee-3acc2c0b2d6ab65c99cb9fc4084e33db70e39ff3.tar.xz
org.eclipse.osee-3acc2c0b2d6ab65c99cb9fc4084e33db70e39ff3.zip
feature: Add precompile version check
-rw-r--r--plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/PrecompiledListener.java151
-rw-r--r--plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/SafeWorkspaceTracker.java8
2 files changed, 159 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/PrecompiledListener.java b/plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/PrecompiledListener.java
new file mode 100644
index 00000000000..11d63c6160a
--- /dev/null
+++ b/plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/PrecompiledListener.java
@@ -0,0 +1,151 @@
+package org.eclipse.osee.ote.runtimemanager;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Scanner;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.Jobs;
+import org.eclipse.osee.framework.ui.swt.Displays;
+import org.eclipse.osee.framework.ui.workspacebundleloader.IJarChangeListener;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.Version;
+
+public class PrecompiledListener implements IJarChangeListener<OteSystemLibsNature> {
+
+ private static final Matcher VERSION_MATTCHER = Pattern.compile("(\\d+.\\d+.\\d+)").matcher("");
+ private boolean firstTime = true;
+ private boolean isPrecompiledInstalled = false;
+
+ @Override
+ public void handleBundleAdded(URL url) {
+ // do nothing -- gets called for each jar in the precompiled project
+ }
+
+ @Override
+ public void handleBundleChanged(URL url) {
+ // do nothing -- gets called for each jar in the precompiled project
+ }
+
+ @Override
+ public void handleBundleRemoved(URL url) {
+ // do nothing?
+ }
+
+ @Override
+ public void handlePostChange() {
+ runCheckInThread();
+ }
+
+ @Override
+ public void handleNatureClosed(OteSystemLibsNature nature) {
+ // do nothing?
+ }
+
+ public void runCheckInThread() {
+ Jobs.runInJob(new AbstractOperation("Precompiled Version Check", RuntimeManager.BUNDLE_ID) {
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ runCheck();
+ }}, false);
+ }
+
+ private synchronized void runCheck() {
+ if(firstTime) {
+ firstTime = false;
+ URL installLocation = Platform.getInstallLocation().getURL();
+ File pluginsDir = new File(installLocation.getFile() + File.separator + "plugins");
+ for(File plugin : Lib.recursivelyListFiles(pluginsDir)) {
+ if(plugin.getName().startsWith("ote.cdb.messages")) {
+ isPrecompiledInstalled = true;
+ break;
+ }
+ }
+ }
+
+ String precompileVersion = null;
+ try {
+ for (OteSystemLibsNature nature : OteSystemLibsNature.getWorkspaceProjects()) {
+ IProject project = nature.getProject();
+ if (precompileVersion == null && project.getName().contains("precompiled")) {
+ IFile buildLabel = project.getFile("build_label.txt");
+ Scanner s = new Scanner(buildLabel.getContents());
+ try {
+ while (s.hasNextLine()) {
+ String line = s.nextLine().toLowerCase();
+ if (line.contains("osee build")) {
+ String[] tokens = line.split(":");
+ if (tokens.length == 2) {
+ precompileVersion = tokens[1].trim();
+ break;
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(RuntimeManager.class, Level.SEVERE, ex);
+ } finally {
+ Lib.close(s);
+ }
+ }
+
+ if(precompileVersion != null) {
+ break;
+ }
+
+ }
+ } catch (CoreException ex) {
+ OseeLog.log(RuntimeManager.class, Level.SEVERE, ex);
+ }
+
+ if (precompileVersion != null) {
+ final String message;
+ if(isPrecompiledInstalled) {
+ message = "Conflict: Precompiled detected in workspace of non precompiled required client!\nPlease remove it from the workspace and restart.";
+ } else {
+ Version client = RuntimeManager.getDefault().getContext().getBundle().getVersion();
+ String clientStr = "", precompileStr = "";
+ Matcher matcher = VERSION_MATTCHER.reset(client.toString());
+ if(matcher.find()) {
+ clientStr = matcher.group(1);
+ }
+ matcher = VERSION_MATTCHER.reset(precompileVersion.toString());
+ if(matcher.find()) {
+ precompileStr = matcher.group(1);
+ }
+
+ if(!clientStr.equals(precompileStr)) {
+ message = String.format(
+ "OTE IDE / Precompilde Libraries version mismatch!\nOTE[%s] != Precompiled[%s]\nPlease get the version that matches [%s].",
+ clientStr, precompileStr, clientStr);
+ } else {
+ message = null;
+ }
+
+ }
+
+ if (message != null) {
+ Displays.ensureInDisplayThread(new Runnable() {
+
+ @Override
+ public void run() {
+ MessageDialog.openError(PlatformUI.getWorkbench().getModalDialogShellProvider().getShell(), "Precompiled Version",
+ message);
+ }
+ }, true);
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/SafeWorkspaceTracker.java b/plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/SafeWorkspaceTracker.java
index f21b1c80c65..b527ed3845f 100644
--- a/plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/SafeWorkspaceTracker.java
+++ b/plugins/org.eclipse.osee.ote.runtimeManager/src/org/eclipse/osee/ote/runtimemanager/SafeWorkspaceTracker.java
@@ -25,6 +25,7 @@ import java.util.Set;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.logging.Level;
+
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -49,8 +50,10 @@ import org.osgi.util.tracker.ServiceTracker;
public class SafeWorkspaceTracker extends ServiceTracker implements OteBundleLocator {
private JarChangeResourceListener<OteSystemLibsNature> systemLibResourceListener;
+ private JarChangeResourceListener<OteSystemLibsNature> precompiledResourceListener;
private JarChangeResourceListener<OteUserLibsNature> userLibResourceListener;
private LibJarListener<OteSystemLibsNature> systemLibListener;
+ private PrecompiledListener precompiledListener;
private LibJarListener<OteUserLibsNature> userLibListener;
private ProjectChangeResourceListener projectChangeResourceListener;
private RuntimeBundleServer bundleServer;
@@ -66,13 +69,16 @@ public class SafeWorkspaceTracker extends ServiceTracker implements OteBundleLoc
public Object addingService(ServiceReference reference) {
this.systemLibListener = new LibJarListener<>();
this.userLibListener = new LibJarListener<>();
+ this.precompiledListener = new PrecompiledListener();
this.systemLibResourceListener =
new JarChangeResourceListener<OteSystemLibsNature>(OteSystemLibsNature.NATURE_ID, systemLibListener);
this.userLibResourceListener =
new JarChangeResourceListener<OteUserLibsNature>(OteUserLibsNature.NATURE_ID, userLibListener);
+ this.precompiledResourceListener = new JarChangeResourceListener<>(OteSystemLibsNature.NATURE_ID, precompiledListener);
this.projectChangeResourceListener = new ProjectChangeResourceListener();
service = (SafeWorkspaceAccess) context.getService(reference);
slowLoadingJars();
+ precompiledListener.runCheckInThread();
return super.addingService(reference);
}
@@ -98,6 +104,7 @@ public class SafeWorkspaceTracker extends ServiceTracker implements OteBundleLoc
}
workspace.addResourceChangeListener(systemLibResourceListener);
workspace.addResourceChangeListener(userLibResourceListener);
+ workspace.addResourceChangeListener(precompiledResourceListener);
SafeWorkspaceTracker.this.bundleServer = new RuntimeBundleServer(SafeWorkspaceTracker.this);
@@ -129,6 +136,7 @@ public class SafeWorkspaceTracker extends ServiceTracker implements OteBundleLoc
if (workspace != null) {
workspace.removeResourceChangeListener(systemLibResourceListener);
workspace.removeResourceChangeListener(userLibResourceListener);
+ workspace.removeResourceChangeListener(precompiledResourceListener);
}
super.close();
}

Back to the top