diff options
author | jmisinco | 2016-05-31 16:20:46 +0000 |
---|---|---|
committer | Andrew M. Finkbeiner | 2016-10-07 01:12:03 +0000 |
commit | 3acc2c0b2d6ab65c99cb9fc4084e33db70e39ff3 (patch) | |
tree | 84aa9e823d825a5b475b8aa8ab55490a556c9d04 | |
parent | 11e6dd2475b02123e2a690ac147b1378b252d531 (diff) | |
download | org.eclipse.osee-3acc2c0b2d6ab65c99cb9fc4084e33db70e39ff3.tar.gz org.eclipse.osee-3acc2c0b2d6ab65c99cb9fc4084e33db70e39ff3.tar.xz org.eclipse.osee-3acc2c0b2d6ab65c99cb9fc4084e33db70e39ff3.zip |
feature: Add precompile version check
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(); } |