summaryrefslogtreecommitdiff
path: root/eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Configuration.java
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2011-12-10 01:57:19 +0100
committerJose <jose@zeroc.com>2011-12-10 01:57:19 +0100
commit42e31f18dc2f34c6b0c427ca0a976ac795349864 (patch)
tree91f81872e55f06c5d6b859039e3c2a633c70c684 /eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Configuration.java
parentICE-4705 voip glacier2 configuration (diff)
downloadice-42e31f18dc2f34c6b0c427ca0a976ac795349864.tar.bz2
ice-42e31f18dc2f34c6b0c427ca0a976ac795349864.tar.xz
ice-42e31f18dc2f34c6b0c427ca0a976ac795349864.zip
Eclipse plug-in updates for release 3.4.2.20111024
Diffstat (limited to 'eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Configuration.java')
-rw-r--r--eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Configuration.java1021
1 files changed, 1021 insertions, 0 deletions
diff --git a/eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Configuration.java b/eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Configuration.java
new file mode 100644
index 00000000000..ad50b474c14
--- /dev/null
+++ b/eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Configuration.java
@@ -0,0 +1,1021 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
+//
+// This plug-in is provided to you under the terms and conditions
+// of the Eclipse Public License Version 1.0 ("EPL"). A copy of
+// the EPL is available at http://www.eclipse.org/legal/epl-v10.html.
+//
+// **********************************************************************
+
+package com.zeroc.slice2javaplugin.internal;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+import com.zeroc.slice2javaplugin.Activator;
+import com.zeroc.slice2javaplugin.preferences.PluginPreferencePage;
+
+public class Configuration
+{
+ public Configuration(IProject project)
+ {
+ _project = project;
+
+ _instanceStore = new ScopedPreferenceStore(new InstanceScope(), Activator.PLUGIN_ID + "." + _project.getName());
+
+ _store = new ScopedPreferenceStore(new ProjectScope(project), Activator.PLUGIN_ID);
+
+ _androidProject = false;
+ try
+ {
+ _androidProject = project.hasNature("com.android.ide.eclipse.adt.AndroidNature");
+ }
+ catch(CoreException e)
+ {
+ }
+
+ _store.setDefault(GENERATED_KEY, GENERATED_KEY);
+ _store.setDefault(DEFINES_KEY, "");
+ _store.setDefault(TIE_KEY, false);
+ _store.setDefault(ICE_KEY, false);
+ _store.setDefault(STREAM_KEY, false);
+ _store.setDefault(ICE_INCLUDE_KEY, false);
+ _store.setDefault(META_KEY, "");
+ _store.setDefault(CONSOLE_KEY, false);
+ _store.setDefault(SLICE_SOURCE_DIRS_KEY, "slice");
+ _store.setDefault(INCLUDES_KEY, "");
+ _store.setDefault(ADD_JARS_KEY, true);
+ _store.setDefault(UNDERSCORE_KEY, false);
+
+ _store.setDefault(JARS_KEY, "Ice.jar");
+ }
+
+ /**
+ * Turns list of strings into a single ';' delimited string. ';' in the
+ * string values are escaped with a leading '\'. '\' are turned into '\\'.
+ *
+ * @param l
+ * List of strings.
+ * @return Semicolon delimited string.
+ */
+ static public String fromList(List<String> l)
+ {
+ StringBuffer sb = new StringBuffer();
+ for(Iterator<String> p = l.iterator(); p.hasNext();)
+ {
+ if(sb.length() > 0)
+ {
+ sb.append(";");
+ }
+ sb.append(escape(p.next()));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Turn a semicolon delimited string into a list of strings. Escaped values
+ * are preserved (characters prefixed with a '\').
+ *
+ * @param s
+ * Semicolon delimited string.
+ * @return List of strings.
+ */
+ static public List<String> toList(String s)
+ {
+ java.util.List<String> l = new ArrayList<String>();
+ int curr = 0;
+ int end = s.length();
+ boolean escape = false;
+ StringBuffer sb = new StringBuffer();
+ for(curr = 0; curr < end; ++curr)
+ {
+ char ch = s.charAt(curr);
+ if(escape)
+ {
+ sb.append(ch);
+ escape = false;
+ }
+ else
+ {
+ if(ch == ';')
+ {
+ String tok = sb.toString().trim();
+ sb.setLength(0);
+ if(tok.length() > 0)
+ {
+ l.add(tok);
+ }
+ }
+ else if(ch == '\\')
+ {
+ escape = true;
+ }
+ else
+ {
+ sb.append(ch);
+ }
+ }
+ }
+ String tok = sb.toString().trim();
+ if(tok.length() > 0)
+ {
+ l.add(tok);
+ }
+ return l;
+ }
+
+ public boolean write()
+ throws CoreException, IOException
+ {
+ boolean rc = false;
+ if(_store.needsSaving())
+ {
+ _store.save();
+ rc = true;
+ }
+ if(_instanceStore.needsSaving())
+ {
+ _instanceStore.save();
+ rc = true;
+ }
+
+ if(rc)
+ {
+ IJavaProject javaProject = JavaCore.create(_project);
+ if(getAddJars())
+ {
+ addLibrary(javaProject);
+ }
+ else
+ {
+ removeLibrary(javaProject);
+ }
+ }
+
+ return rc;
+ }
+
+ public void initialize()
+ throws CoreException
+ {
+ // Create the slice source directories, if necessary.
+ for(Iterator<String> p = getSliceSourceDirs().iterator(); p.hasNext();)
+ {
+ IFolder slice = _project.getFolder(p.next());
+ if(!slice.exists())
+ {
+ slice.create(false, true, null);
+ }
+ }
+
+ // Create the generated directory, if necessary.
+ IFolder generated = _project.getFolder(getGeneratedDir());
+ if(!generated.exists())
+ {
+ generated.create(false, true, null);
+ }
+
+ fixGeneratedCP(null, getGeneratedDir());
+
+ IJavaProject javaProject = JavaCore.create(_project);
+ addLibrary(javaProject);
+ }
+
+ public void deinstall()
+ throws CoreException
+ {
+ IJavaProject javaProject = JavaCore.create(_project);
+ removeLibrary(javaProject);
+ removedGeneratedCP();
+ IFolder generatedFolder = _project.getFolder(getGeneratedDir());
+ if(generatedFolder != null && generatedFolder.exists())
+ {
+ generatedFolder.delete(true, null);
+ }
+ }
+
+ public boolean isAndroidProject()
+ {
+ return _androidProject;
+ }
+
+ public List<String> getSliceSourceDirs()
+ {
+ return toList(_store.getString(SLICE_SOURCE_DIRS_KEY));
+ }
+
+ public void setSliceSourceDirs(List<String> sliceSourceDirs)
+ {
+ setValue(SLICE_SOURCE_DIRS_KEY, fromList(sliceSourceDirs));
+ }
+
+ public String getGeneratedDir()
+ {
+ return _store.getString(GENERATED_KEY);
+ }
+
+ public void fixGeneratedCP(String oldG, String newG)
+ throws CoreException
+ {
+ IJavaProject javaProject = JavaCore.create(_project);
+
+ IFolder newGenerated = _project.getFolder(newG);
+
+ IClasspathEntry[] entries = javaProject.getRawClasspath();
+ IClasspathEntry newEntry = JavaCore.newSourceEntry(newGenerated.getFullPath());
+
+ if(oldG != null)
+ {
+ IFolder oldGenerated = _project.getFolder(oldG);
+ IClasspathEntry oldEntry = JavaCore.newSourceEntry(oldGenerated.getFullPath());
+ for(int i = 0; i < entries.length; ++i)
+ {
+ if(entries[i].equals(oldEntry))
+ {
+ entries[i] = newEntry;
+ javaProject.setRawClasspath(entries, null);
+ oldGenerated.delete(true, null);
+ return;
+ }
+ }
+ }
+
+ IClasspathEntry[] newEntries = new IClasspathEntry[entries.length + 1];
+ System.arraycopy(entries, 0, newEntries, 1, entries.length);
+ newEntries[0] = newEntry;
+
+ newGenerated.setDerived(true, null);
+
+ try
+ {
+ javaProject.setRawClasspath(newEntries, null);
+ }
+ catch(JavaModelException e)
+ {
+ // This can occur if a duplicate CLASSPATH entry is made.
+ //
+ // throw new CoreException(new Status(IStatus.ERROR,
+ // Activator.PLUGIN_ID, e.toString(), null));
+ }
+ }
+
+ public void removedGeneratedCP()
+ throws CoreException
+ {
+ IJavaProject javaProject = JavaCore.create(_project);
+
+ IFolder generated = _project.getFolder(getGeneratedDir());
+
+ IClasspathEntry generatedEntry = JavaCore.newSourceEntry(generated.getFullPath());
+
+ IClasspathEntry[] entries = javaProject.getRawClasspath();
+ IClasspathEntry[] newEntries = new IClasspathEntry[entries.length - 1];
+
+ for(int i = 0, j = 0; i < entries.length; i++)
+ {
+ if(entries[i].equals(generatedEntry))
+ {
+ continue;
+ }
+ newEntries[j] = entries[i];
+ j++;
+ }
+
+ try
+ {
+ javaProject.setRawClasspath(newEntries, null);
+ }
+ catch(JavaModelException e)
+ {
+ // This can occur if a duplicate CLASSPATH entry is made.
+ //
+ // throw new CoreException(new Status(IStatus.ERROR,
+ // Activator.PLUGIN_ID, e.toString(), null));
+ }
+ }
+
+ public void setGeneratedDir(String generated)
+ throws CoreException
+ {
+ String oldGenerated = getGeneratedDir();
+ if(setValue(GENERATED_KEY, generated))
+ {
+ fixGeneratedCP(oldGenerated, generated);
+ }
+ }
+
+ public List<String> getCommandLine()
+ {
+ List<String> cmds = new ArrayList<String>();
+ for(Iterator<String> p = getIncludes().iterator(); p.hasNext();)
+ {
+ cmds.add("-I" + p.next());
+ }
+ for(Iterator<String> p = getDefines().iterator(); p.hasNext();)
+ {
+ cmds.add("-D" + p.next());
+ }
+ for(Iterator<String> p = getMeta().iterator(); p.hasNext();)
+ {
+ cmds.add("--meta");
+ cmds.add(p.next());
+ }
+ if(getStream())
+ {
+ cmds.add("--stream");
+ }
+ if(getTie())
+ {
+ cmds.add("--tie");
+ }
+ if(getIce())
+ {
+ cmds.add("--ice");
+ }
+ if(getUnderscore())
+ {
+ cmds.add("--underscore");
+ }
+
+ StringTokenizer tokens = new StringTokenizer(getExtraArguments());
+ while(tokens.hasMoreTokens())
+ {
+ cmds.add(tokens.nextToken());
+ }
+
+ return cmds;
+ }
+
+ public List<String> getCommandLine(IResource resource)
+ {
+ List<String> cmds = getCommandLine();
+ for(Iterator<String> p = getBareIncludes(resource).iterator(); p.hasNext();)
+ {
+ cmds.add("-I" + p.next());
+ }
+ for(Iterator<String> p = getDefines(resource).iterator(); p.hasNext();)
+ {
+ cmds.add("-D" + p.next());
+ }
+ for(Iterator<String> p = getMeta(resource).iterator(); p.hasNext();)
+ {
+ cmds.add("--meta");
+ cmds.add(p.next());
+ }
+ if(!getStream() && getStream(resource))
+ {
+ cmds.add("--stream");
+ }
+ if(!getTie() && getTie(resource))
+ {
+ cmds.add("--tie");
+ }
+ if(!getIce() && getIce(resource))
+ {
+ cmds.add("--ice");
+ }
+ if(!getUnderscore() && getUnderscore(resource))
+ {
+ cmds.add("--underscore");
+ }
+
+ StringTokenizer tokens = new StringTokenizer(getExtraArguments(resource));
+ while(tokens.hasMoreTokens())
+ {
+ cmds.add(tokens.nextToken());
+ }
+
+ return cmds;
+ }
+
+ public List<String> getIncludes()
+ {
+ List<String> s = toList(_store.getString(INCLUDES_KEY));
+
+ String iceHome = getIceHome();
+ String os = System.getProperty("os.name");
+ String path = null;
+ if(os.equals("Linux") && iceHome.equals("/usr"))
+ {
+ String version = getIceVersion();
+ if(version != null)
+ {
+ File f = new File("/usr/share/Ice-" + version + "/slice");
+ if(f.exists())
+ {
+ path = f.toString();
+ }
+ }
+ }
+
+ if(path == null)
+ {
+ path = new File(iceHome + File.separator + "slice").toString();
+ }
+
+ s.add(path);
+ return s;
+ }
+
+ // The bare include list.
+ public List<String> getBareIncludes()
+ {
+ return toList(_store.getString(INCLUDES_KEY));
+ }
+
+ public List<String> getBareIncludes(IResource resource)
+ {
+ return toList(_store.getString(resourceKey(resource, INCLUDES_KEY)));
+ }
+
+ public void setIncludes(List<String> includes)
+ {
+ setValue(INCLUDES_KEY, fromList(includes));
+ }
+
+ public void setIncludes(IResource resource, List<String> includes)
+ {
+ setValue(resourceKey(resource, INCLUDES_KEY), fromList(includes));
+ }
+
+ public boolean getAddJars()
+ {
+ return _store.getBoolean(ADD_JARS_KEY);
+ }
+
+ public void setAddJars(boolean b)
+ {
+ _store.setValue(ADD_JARS_KEY, b);
+ }
+
+ public List<String> getJars()
+ {
+ return toList(_store.getString(JARS_KEY));
+ }
+
+ public void setJars(List<String> jars) throws CoreException
+ {
+ if(setValue(JARS_KEY, fromList(jars)))
+ {
+ IceClasspathContainerIntializer.reinitialize(_project, this);
+ }
+ }
+
+ public List<String> getDefines()
+ {
+ return toList(_store.getString(DEFINES_KEY));
+ }
+
+ public List<String> getDefines(IResource resource)
+ {
+ return toList(_store.getString(resourceKey(resource, DEFINES_KEY)));
+ }
+
+ public void setDefines(List<String> defines)
+ {
+ setValue(DEFINES_KEY, fromList(defines));
+ }
+
+ public void setDefines(IResource resource, List<String> defines)
+ {
+ setValue(resourceKey(resource, DEFINES_KEY), fromList(defines));
+ }
+
+ public boolean getStream()
+ {
+ return _store.getBoolean(STREAM_KEY);
+ }
+
+ public boolean getStream(IResource resource)
+ {
+ return _store.getBoolean(resourceKey(resource, STREAM_KEY));
+ }
+
+ public void setStream(boolean stream)
+ {
+ _store.setValue(STREAM_KEY, stream);
+ }
+
+ public void setStream(IResource resource, boolean stream)
+ {
+ _store.setValue(resourceKey(resource, STREAM_KEY), stream);
+ }
+
+ public boolean getTie()
+ {
+ return _store.getBoolean(TIE_KEY);
+ }
+
+ public boolean getTie(IResource resource)
+ {
+ return _store.getBoolean(resourceKey(resource, TIE_KEY));
+ }
+
+ public void setTie(boolean tie)
+ {
+ _store.setValue(TIE_KEY, tie);
+ }
+
+ public void setTie(IResource resource, boolean tie)
+ {
+ _store.setValue(resourceKey(resource, TIE_KEY), tie);
+ }
+
+ public boolean getIce()
+ {
+ return _store.getBoolean(ICE_KEY);
+ }
+
+ public boolean getIce(IResource resource)
+ {
+ return _store.getBoolean(resourceKey(resource, ICE_KEY));
+ }
+
+ public void setIce(boolean ice)
+ {
+ _store.setValue(ICE_KEY, ice);
+ }
+
+ public void setIce(IResource resource, boolean ice)
+ {
+ _store.setValue(resourceKey(resource, ICE_KEY), ice);
+ }
+
+ public boolean getUnderscore()
+ {
+ return _store.getBoolean(UNDERSCORE_KEY);
+ }
+
+ public boolean getUnderscore(IResource resource)
+ {
+ return _store.getBoolean(resourceKey(resource, UNDERSCORE_KEY));
+ }
+
+ public void setUnderscore(boolean underscore)
+ {
+ _store.setValue(UNDERSCORE_KEY, underscore);
+ }
+
+ public void setUnderscore(IResource resource, boolean underscore)
+ {
+ _store.setValue(resourceKey(resource, UNDERSCORE_KEY), underscore);
+ }
+
+ public boolean getConsole()
+ {
+ return _store.getBoolean(CONSOLE_KEY);
+ }
+
+ public void setConsole(boolean console)
+ {
+ _store.setValue(CONSOLE_KEY, console);
+ }
+
+ public List<String> getMeta()
+ {
+ return toList(_store.getString(META_KEY));
+ }
+
+ public List<String> getMeta(IResource resource)
+ {
+ return toList(_store.getString(resourceKey(resource, META_KEY)));
+ }
+
+ public void setMeta(List<String> meta)
+ {
+ setValue(META_KEY, fromList(meta));
+ }
+
+ public void setMeta(IResource resource, List<String> meta)
+ {
+ setValue(resourceKey(resource, META_KEY), fromList(meta));
+ }
+
+ public String getExtraArguments()
+ {
+ return _store.getString(EXTRA_ARGUMENTS_KEY);
+ }
+
+ public String getExtraArguments(IResource resource)
+ {
+ return _store.getString(resourceKey(resource, EXTRA_ARGUMENTS_KEY));
+ }
+
+ public void setExtraArguments(String arguments)
+ {
+ setValue(EXTRA_ARGUMENTS_KEY, arguments);
+ }
+
+ public void setExtraArguments(IResource resource, String arguments)
+ {
+ setValue(resourceKey(resource, EXTRA_ARGUMENTS_KEY), arguments);
+ }
+
+ public static void setupSharedLibraryPath(Map<String, String> env)
+ {
+ String iceHome = getIceHome();
+
+ String libPath;
+ boolean srcdist = false;
+ if(new File(iceHome + File.separator + "cpp" + File.separator + "bin").exists())
+ {
+ // iceHome points at a source distribution.
+ libPath = new File(iceHome + File.separator + "cpp" + File.separator + "lib").toString();
+ srcdist = true;
+ }
+ else
+ {
+ libPath = new File(iceHome + File.separator + "lib").toString();
+ }
+
+ String ldLibPathEnv = null;
+ String ldLib64PathEnv = null;
+ String lib64Path = null;
+
+ String os = System.getProperty("os.name");
+ if(os.equals("Mac OS X"))
+ {
+ ldLibPathEnv = "DYLD_LIBRARY_PATH";
+ }
+ else if(os.equals("AIX"))
+ {
+ ldLibPathEnv = "LIBPATH";
+ }
+ else if(os.equals("HP-UX"))
+ {
+ ldLibPathEnv = "SHLIB_PATH";
+ ldLib64PathEnv = "LD_LIBRARY_PATH";
+ if(srcdist)
+ {
+ lib64Path = libPath;
+ }
+ else
+ {
+ lib64Path = new File(iceHome + File.separator + "lib" + File.separator + "pa20_64").toString();
+ }
+ }
+ else if(os.startsWith("Windows"))
+ {
+ //
+ // No need to change the PATH environment variable on Windows, the
+ // DLLs should be found
+ // in the translator local directory.
+ //
+ // ldLibPathEnv = "PATH";
+ }
+ else if(os.equals("SunOS"))
+ {
+ ldLibPathEnv = "LD_LIBRARY_PATH";
+ ldLib64PathEnv = "LD_LIBRARY_PATH_64";
+ String arch = System.getProperty("os.arch");
+ if(srcdist)
+ {
+ lib64Path = libPath;
+ }
+ else if(arch.equals("x86"))
+ {
+ lib64Path = new File(iceHome + File.separator + "lib" + File.separator + "amd64").toString();
+ }
+ else
+ // Sparc
+ {
+ lib64Path = new File(iceHome + File.separator + "lib" + File.separator + "sparcv9").toString();
+ }
+ }
+ else
+ {
+ ldLibPathEnv = "LD_LIBRARY_PATH";
+ ldLib64PathEnv = "LD_LIBRARY_PATH";
+ if(srcdist)
+ {
+ lib64Path = libPath;
+ }
+ else
+ {
+ lib64Path = new File(iceHome + File.separator + "lib64").toString();
+ }
+ }
+
+ if(ldLibPathEnv != null)
+ {
+ if(ldLibPathEnv.equals(ldLib64PathEnv))
+ {
+ libPath = libPath + File.pathSeparator + lib64Path;
+ }
+
+ String envLibPath = env.get(ldLibPathEnv);
+ if(envLibPath != null)
+ {
+ libPath = libPath + File.pathSeparator + envLibPath;
+ }
+
+ env.put(ldLibPathEnv, libPath);
+ }
+
+ if(ldLib64PathEnv != null && !ldLib64PathEnv.equals(ldLibPathEnv))
+ {
+ String envLib64Path = env.get(ldLib64PathEnv);
+ if(envLib64Path != null)
+ {
+ lib64Path = lib64Path + File.pathSeparator + envLib64Path;
+ }
+ env.put(ldLib64PathEnv, lib64Path);
+ }
+ }
+
+ public String getTranslator()
+ {
+ return getTranslatorForHome(getIceHome());
+ }
+
+ static public boolean verifyIceHome(String dir)
+ {
+ return getTranslatorForHome(dir) != null;
+ }
+
+ public String getJarDir()
+ {
+ String iceHome = getIceHome();
+ String os = System.getProperty("os.name");
+ if(os.equals("Linux") && iceHome.equals("/usr"))
+ {
+ File f = new File(iceHome + File.separator + "share" + File.separator + "java");
+ if(f.exists())
+ {
+ return f.toString();
+ }
+ }
+
+ File f = new File(iceHome + File.separator + "lib");
+ if(!f.exists())
+ {
+ File f2 = new File(iceHome + File.separator + "java" + File.separator + "lib");
+ if(f2.exists())
+ {
+ return f2.toString();
+ }
+ }
+ // Add the platform default even if it cannot be found.
+ return f.toString();
+ }
+
+ private static String getIceHome()
+ {
+ return Activator.getDefault().getPreferenceStore().getString(PluginPreferencePage.SDK_PATH);
+ }
+
+ // For some reason ScopedPreferenceStore.setValue(String, String)
+ // doesn't check to see whether the stored value is the same as
+ // the new value.
+ private boolean setValue(String key, String value)
+ {
+ return setValue(_store, key, value);
+ }
+
+ private boolean setValue(ScopedPreferenceStore store, String key, String value)
+ {
+ if(!store.getString(key).equals(value))
+ {
+ store.setValue(key, value);
+ return true;
+ }
+ return false;
+ }
+
+ static private String escape(String s)
+ {
+ int curr = 0;
+ int end = s.length();
+ StringBuffer sb = new StringBuffer();
+ for(curr = 0; curr < end; ++curr)
+ {
+ char ch = s.charAt(curr);
+ if(ch == '\\' || ch == ';')
+ {
+ sb.append('\\');
+ }
+ sb.append(ch);
+ }
+ return sb.toString();
+ }
+
+ // Obtain the Ice version by executing the translator with the -v option.
+ private String getIceVersion()
+ {
+ String version = null;
+ String exec = getTranslatorForHome(getIceHome());
+ if(exec != null)
+ {
+ try
+ {
+ ProcessBuilder b = new ProcessBuilder(exec, "-v");
+ b.redirectErrorStream(true);
+ Map<String, String> env = b.environment();
+ setupSharedLibraryPath(env);
+ Process p = b.start();
+ int status = p.waitFor();
+ if(status == 0)
+ {
+ BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String line = r.readLine();
+ version = line.trim();
+ }
+ }
+ catch(Throwable ex)
+ {
+ // Ignore.
+ }
+ }
+ return version;
+ }
+
+ private static String getTranslatorForHome(String dir)
+ {
+ String suffix = "";
+ String os = System.getProperty("os.name");
+ if(os.startsWith("Windows"))
+ {
+ suffix = ".exe";
+ }
+ File f = new File(dir + File.separator + "bin" + File.separator + "slice2java" + suffix);
+ if(f.exists())
+ {
+ return f.toString();
+ }
+ f = new File(dir + File.separator + "cpp" + File.separator + "bin" + File.separator + "slice2java" + suffix);
+ if(f.exists())
+ {
+ return f.toString();
+ }
+ return null;
+ }
+
+ private void addLibrary(IJavaProject project)
+ throws CoreException
+ {
+ IClasspathEntry cpEntry = null;
+ if(!isAndroidProject())
+ {
+ cpEntry = IceClasspathContainerIntializer.getContainerEntry();
+ }
+ else
+ {
+ cpEntry = JavaCore.newVariableEntry(new Path("ICE_HOME/lib/Ice.jar"), null, null);
+ }
+
+ IClasspathEntry[] entries = project.getRawClasspath();
+ boolean found = false;
+ for(int i = 0; i < entries.length; ++i)
+ {
+ if(entries[i].equals(cpEntry))
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if(!found)
+ {
+ IClasspathEntry[] newEntries = new IClasspathEntry[entries.length + 1];
+ System.arraycopy(entries, 0, newEntries, 0, entries.length);
+ newEntries[entries.length] = cpEntry;
+
+ try
+ {
+ project.setRawClasspath(newEntries, null);
+ }
+ catch(JavaModelException e)
+ {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.toString(), null));
+ }
+ }
+ }
+
+ public void removeLibrary(IJavaProject project)
+ throws CoreException
+ {
+ IClasspathEntry cpEntry = null;
+ if(!isAndroidProject())
+ {
+ cpEntry = IceClasspathContainerIntializer.getContainerEntry();
+ }
+ else
+ {
+ cpEntry = JavaCore.newVariableEntry(new Path("ICE_HOME/lib/Ice.jar"), null, null);
+ }
+ IClasspathEntry[] entries = project.getRawClasspath();
+
+ for(int i = 0; i < entries.length; ++i)
+ {
+ if(entries[i].equals(cpEntry))
+ {
+ IClasspathEntry[] newEntries = new IClasspathEntry[entries.length - 1];
+ System.arraycopy(entries, 0, newEntries, 0, i);
+ System.arraycopy(entries, i + 1, newEntries, i, entries.length - i - 1);
+
+ try
+ {
+ project.setRawClasspath(newEntries, null);
+ }
+ catch(JavaModelException e)
+ {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.toString(), null));
+ }
+ break;
+ }
+ }
+ }
+
+ //
+ // Check if the given resource has any Slice compiler options set.
+ //
+ public static boolean resourceHasOptions(IResource resource)
+ {
+ Configuration configuration = new Configuration(resource.getProject());
+ if(configuration.getDefines(resource) != null && configuration.getDefines(resource).size() > 0)
+ {
+ return true;
+ }
+ if(configuration.getMeta(resource) != null && configuration.getMeta(resource).size() > 0)
+ {
+ return true;
+ }
+ if(!configuration.getStream() && configuration.getStream(resource))
+ {
+ return true;
+ }
+ if(!configuration.getTie() && configuration.getTie(resource))
+ {
+ return true;
+ }
+ if(!configuration.getIce() && configuration.getIce(resource))
+ {
+ return true;
+ }
+ if(!configuration.getUnderscore() && configuration.getUnderscore(resource))
+ {
+ return true;
+ }
+ if(configuration.getExtraArguments(resource) != null && !configuration.getExtraArguments(resource).isEmpty())
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public static String resourceKey(IResource resource, String key)
+ {
+ return resource.getFullPath().toString() + "." + key;
+ }
+
+ private static final String JARS_KEY = "jars";
+ private static final String INCLUDES_KEY = "includes";
+ private static final String SLICE_SOURCE_DIRS_KEY = "sliceSourceDirs";
+ private static final String CONSOLE_KEY = "console";
+ private static final String META_KEY = "meta";
+ private static final String STREAM_KEY = "stream";
+ private static final String ICE_INCLUDE_KEY = "iceIncludes";
+ private static final String ICE_KEY = "ice";
+ private static final String TIE_KEY = "tie";
+ private static final String DEFINES_KEY = "defines";
+ private static final String GENERATED_KEY = "generated";
+ private static final String ADD_JARS_KEY = "addJars";
+ private static final String UNDERSCORE_KEY = "underscore";
+
+ private static final String EXTRA_ARGUMENTS_KEY = "extraArguments";
+
+ // Preferences store for items which should go in SCM. This includes things
+ // like build flags.
+ private ScopedPreferenceStore _store;
+
+ // Preferences store per project items which should not go in SCM, such as
+ // the location of the Ice installation.
+ private ScopedPreferenceStore _instanceStore;
+
+ private IProject _project;
+
+ private boolean _androidProject;
+}