diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java')
-rw-r--r-- | bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java | 265 |
1 files changed, 0 insertions, 265 deletions
diff --git a/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java b/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java deleted file mode 100644 index e10b6c502..000000000 --- a/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java +++ /dev/null @@ -1,265 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2009 EclipseSource and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Eclipse Source - initial API and implementation - * IBM Corporation - ongoing development - *******************************************************************************/ -package org.eclipse.equinox.internal.p2.publisher.eclipse; - -import java.io.*; -import java.util.HashSet; -import java.util.Set; -import org.eclipse.core.runtime.*; -import org.eclipse.equinox.internal.p2.core.helpers.FileUtils; -import org.eclipse.equinox.internal.p2.core.helpers.LogHelper; -import org.eclipse.equinox.internal.p2.publisher.Activator; -import org.eclipse.equinox.p2.publisher.AbstractPublisherAction; -import org.eclipse.osgi.service.environment.Constants; - -public class ExecutablesDescriptor { - - private File location; - private Set<File> files; - private String executableName; - private boolean temporary = false; - private String os; - private File iniFile; - - public static File findExecutable(String os, File root, String baseName) { - // TODO this may need to get more intelligent - // if MacOS its going to be baseName.app/Contents/MacOS/baseName - if (Constants.OS_MACOSX.equals(os)) { - return new File(root, baseName + ".app/Contents/MacOS/" + baseName); //$NON-NLS-1$ - } - // if it is not Mac and not Windows it must be a UNIX flavor - if (!Constants.OS_WIN32.equals(os)) { - return new File(root, baseName); - } - // otherwise we are left with windows - return new File(root, baseName + ".exe"); //$NON-NLS-1$ - } - - /** - * Return the root directory of the executables folder for the given configSpec. The folder - * is expected to be part of the standard Eclipse executables feature whose structure is - * embedded here. - * @param executablesFeatureLocation the location of the executables feature - * @param configSpec the configuration to lookup - * @return the root location of the requested executables - */ - public static ExecutablesDescriptor createExecutablesFromFeature(File executablesFeatureLocation, String configSpec) { - // TODO consider handling JAR'd features here... - if (executablesFeatureLocation == null || !executablesFeatureLocation.exists()) - return null; - String[] config = AbstractPublisherAction.parseConfigSpec(configSpec); - File result = new File(executablesFeatureLocation, "bin/" + config[0] + "/" + config[1] + "/" + config[2]); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - if (!result.exists()) - return null; - return new ExecutablesDescriptor(config[1], "launcher", result, new File[] {result}); //$NON-NLS-1$ - } - - /** - * Create an executable descriptor based on the given location, os and name. - * This method is typically used to identify the executable related files in existing - * unmanaged configurations. - * @param os - * @param location - * @param executable - * @return the created descriptor - */ - public static ExecutablesDescriptor createDescriptor(String os, String executable, File location) { - if (Constants.OS_MACOSX.equals(os)) - return createMacDescriptor(os, executable, location); - - // if it is not Mac and not Windows it must be a UNIX flavor - if (!Constants.OS_WIN32.equals(os)) - return createUnixDescriptor(os, executable, location); - - // Nothing else so it must be Windows - return createWindowsDescriptor(os, executable, location); - } - - private static ExecutablesDescriptor createWindowsDescriptor(String os, String executable, File location) { - ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, null); - File file = new File(location, executable + ".exe"); //$NON-NLS-1$ - if (file.isFile()) { - result.addFile(file); - result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$ - } - file = new File(location, "eclipsec.exe"); //$NON-NLS-1$ - if (file.isFile()) - result.addFile(file); - return result; - } - - private static ExecutablesDescriptor createUnixDescriptor(String os, String executable, File location) { - ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, null); - File[] files = location.listFiles(); - for (int i = 0; files != null && i < files.length; i++) { - String extension = new Path(files[i].getName()).getFileExtension(); - if (files[i].isFile() && (extension == null || extension.equals("so"))) //$NON-NLS-1$ - result.addFile(files[i]); - } - result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$ - return result; - } - - private static ExecutablesDescriptor createMacDescriptor(String os, String executable, File location) { - File files[] = location.listFiles(new FilenameFilter() { - public boolean accept(File dir, String name) { - int length = name.length(); - return length > 3 && name.substring(length - 4, length).equalsIgnoreCase(".app"); //$NON-NLS-1$ - } - }); - ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, files); - result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$ - return result; - } - - public ExecutablesDescriptor(String os, String executable, File location, File[] files) { - this.os = os; - this.executableName = executable; - this.location = location; - if (files == null) - this.files = new HashSet<File>(11); - else { - this.files = new HashSet<File>(files.length); - for (int i = 0; i < files.length; i++) - addAllFiles(files[i]); - } - } - - public ExecutablesDescriptor(ExecutablesDescriptor descriptor) { - this.os = descriptor.os; - this.location = descriptor.location; - this.executableName = descriptor.executableName; - this.temporary = descriptor.temporary; - this.files = new HashSet<File>(descriptor.files); - } - - public void addAllFiles(File file) { - if (file.isFile()) - files.add(relativize(file)); - else { - File absolute = file.isAbsolute() ? file : new File(location, file.getPath()); - File[] list = absolute.listFiles(); - for (int i = 0; i < list.length; i++) - addAllFiles(list[i]); - } - } - - public void addFile(File file) { - files.add(relativize(file)); - } - - // do a simple relativization by removing all the bits before the location - private File relativize(File file) { - if (!file.isAbsolute()) - return file; - String path = file.getPath(); - if (!path.startsWith(location.getPath())) - throw new IllegalArgumentException(file.toString() + " must be related to " + location); //$NON-NLS-1$ - path = path.substring(location.getPath().length()); - // trim off any separator. This accomodates people who set the location with a trailing / - if (path.startsWith("/") || path.startsWith("\\")) //$NON-NLS-1$//$NON-NLS-2$ - path = path.substring(1); - return new File(path); - } - - public void removeFile(File file) { - files.remove(relativize(file)); - } - - public void replace(File oldFile, File newFile) { - removeFile(oldFile); - addFile(newFile); - } - - public File[] getFiles() { - File[] result = files.toArray(new File[files.size()]); - for (int i = 0; i < result.length; i++) - result[i] = new File(location, result[i].getPath()); - return result; - } - - public String getExecutableName() { - return executableName; - } - - public File getExecutable() { - return findExecutable(os, location, executableName); - } - - public File getIniLocation() { - return iniFile; - } - - public File getLocation() { - return location; - } - - public void setLocation(File value) { - location = value; - } - - public boolean isTemporary() { - return temporary; - } - - public void setExecutableName(String value, boolean updateFiles) { - if (updateFiles) - updateExecutableName(value); - executableName = value; - } - - public void makeTemporaryCopy() { - if (isTemporary()) - return; - File tempFile = null; - try { - tempFile = File.createTempFile("p2.brandingIron", ""); //$NON-NLS-1$ //$NON-NLS-2$ - tempFile.delete(); - for (File file : files) - FileUtils.copy(location, tempFile, file, true); - } catch (IOException e) { - LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error publishing artifacts", e)); //$NON-NLS-1$ - } - location = tempFile; - temporary = true; - } - - /** - * If the executable represented by this descriptor has been branded then a mess - * of files have been renamed. Here scan the descriptor's file list and update the names - * taking into account the different layout on different OSes. - * @param newName the new name of the executable. - */ - private void updateExecutableName(String newName) { - if (newName.equalsIgnoreCase(executableName)) - return; - String targetIni = executableName + ".ini"; //$NON-NLS-1$ - String targetExecutable = executableName; - String executableExtension = Constants.OS_WIN32.equals(os) ? ".exe" : ""; //$NON-NLS-1$ //$NON-NLS-2$ - targetExecutable = executableName + executableExtension; - Set<File> filesCopy = new HashSet<File>(files); - for (File file : filesCopy) { - String base = file.getParent(); - - // use String concatenation here because new File("", "foo") is absolute on at least windows... - base = base == null ? "" : base + "/"; //$NON-NLS-1$ //$NON-NLS-2$ - if (Constants.OS_MACOSX.equals(os) && base.startsWith(executableName + ".app")) //$NON-NLS-1$ - base = newName + ".app" + base.substring(executableName.length() + 4); //$NON-NLS-1$ - if (file.getName().equalsIgnoreCase(targetExecutable)) - replace(file, new File(base + newName + executableExtension)); - else if (file.getName().equalsIgnoreCase(targetIni)) - replace(file, new File(base + newName + ".ini")); //$NON-NLS-1$ - else if (Constants.OS_MACOSX.equals(os)) - replace(file, new File(base + file.getName())); - } - } -} |