File eclipse-fileinitializer.patch of Package eclipse

Index: plugin.xml
===================================================================
RCS file: /home/eclipse/org.eclipse.core.runtime/plugin.xml,v
retrieving revision 1.68
diff -u -r1.68 plugin.xml
--- plugin.xml	4 Mar 2005 22:18:54 -0000	1.68
+++ plugin.xml	9 May 2005 20:57:51 -0000
@@ -6,6 +6,7 @@
    <extension-point id="adapters" name="%adaptersName" schema="schema/adapters.exsd"/>
    <extension-point id="preferences" name="%preferencesName" schema="schema/preferences.exsd"/>
    <extension-point id="contentTypes" name="%contentTypesName" schema="schema/contentTypes.exsd"/>
+   <extension-point id="initializers" name="%initializersName" schema="schema/initializers.exsd"/>
 
 	<extension id="platform-preferences" point="org.eclipse.core.runtime.preferences" name="%preferencesExtPtName">
 		<scope name="configuration" class="org.eclipse.core.internal.preferences.ConfigurationPreferences"/>
@@ -35,5 +36,19 @@
 			file-extensions="properties">
 			<property name="charset" default="ISO-8859-1"/>
 		</content-type>			
-	</extension>		 
+	</extension>
+ <extension
+       id="initializer"
+       name="%initializerApp"
+       point="org.eclipse.core.runtime.applications">
+      <application>
+         <run class="org.eclipse.core.internal.runtime.Initializer"/>
+      </application>
+ </extension>
+ <extension id="fileInitializer"
+       point="org.eclipse.core.runtime.initializers">
+    <initializer>
+   		<initialize class="org.eclipse.core.internal.runtime.FileInitializer"/>
+   	</initializer>
+ </extension>
 </plugin>
Index: src/org/eclipse/core/internal/runtime/Messages.java
===================================================================
RCS file: /home/eclipse/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Messages.java,v
retrieving revision 1.14
diff -u -r1.14 Messages.java
--- src/org/eclipse/core/internal/runtime/Messages.java	20 Apr 2005 21:38:22 -0000	1.14
+++ src/org/eclipse/core/internal/runtime/Messages.java	9 May 2005 20:57:51 -0000
@@ -30,6 +30,8 @@
 	public static String content_errorLoadingSettings;	
 	public static String content_errorSavingSettings;
 	public static String content_invalidContentDescriber;
+
+
 	public static String content_invalidProperty;	
 	public static String content_missingIdentifier;
 	public static String content_missingName;
@@ -64,6 +66,14 @@
 	public static String meta_unableToWriteAuthorization;
 
 	public static String ok;
+	
+	// initializer
+	public static String initializer_error;
+	
+	// file initializer
+	public static String fileInitializer_fileNotFound;
+	public static String fileInitializer_IOError;
+	public static String fileInitializer_missingFileName;
 
 	// parsing/resolve
 	public static String parse_nonSingleton;
@@ -71,6 +81,7 @@
 	public static String parse_doubleSeparatorVersion;
 	public static String parse_duplicateFragment;
 	public static String parse_duplicateLib;
+
 	public static String parse_duplicatePlugin;
 	public static String parse_emptyPluginVersion;
 	public static String parse_error;
@@ -89,6 +100,7 @@
 	public static String parse_missingFPVersion;
 	public static String parse_missingFragmentPd;
 	public static String parse_missingPluginId;
+
 	public static String parse_missingPluginName;
 	public static String parse_missingPluginVersion;
 	public static String parse_nullFragmentIdentifier;
Index: src/org/eclipse/core/internal/runtime/messages.properties
===================================================================
RCS file: /home/eclipse/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/messages.properties,v
retrieving revision 1.99
diff -u -r1.99 messages.properties
--- src/org/eclipse/core/internal/runtime/messages.properties	20 Apr 2005 21:38:22 -0000	1.99
+++ src/org/eclipse/core/internal/runtime/messages.properties	9 May 2005 20:57:51 -0000
@@ -166,3 +166,10 @@
 url_resolveFragment=Unable to resolve fragment \"{0}\".
 url_resolvePlugin=Unable to resolve plug-in \"{0}\".
 
+### Initializer
+initializer_error=There was a problem running the application {0}.
+
+### File Initiializer
+fileInitializer_fileNotFound={0}: The file {1} was not found.
+fileInitializer_IOError={0}: There was an error reading {1}.
+fileInitializer_missingFileName={0}: The \"file patterns\" file was not specified.
\ No newline at end of file
Index: src/org/eclipse/core/runtime/Platform.java
===================================================================
RCS file: /home/eclipse/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Platform.java,v
retrieving revision 1.82
diff -u -r1.82 Platform.java
--- src/org/eclipse/core/runtime/Platform.java	21 Feb 2005 23:10:02 -0000	1.82
+++ src/org/eclipse/core/runtime/Platform.java	9 May 2005 20:57:51 -0000
@@ -85,6 +85,14 @@
 	 */
 	public static final String PT_PRODUCT = "products"; //$NON-NLS-1$
 	/** 
+	 * The simple identifier constant (value "<code>initializers</code>") of
+	 * the extension point of the Core Runtime plug-in where plug-ins declare
+	 * their the existence of initialization code.
+	 * 
+	 * @since 3.1
+	 */
+	public static final String PT_INITIALIZERS = "initializers"; //$NON-NLS-1$
+	/** 
 	 * Debug option value denoting the time at which the platform runtime
 	 * was started.  This constant can be used in conjunction with
 	 * <code>getDebugOption</code> to find the string value of
Index: schema/initializers.exsd
===================================================================
RCS file: schema/initializers.exsd
diff -N schema/initializers.exsd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ schema/initializers.exsd	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,138 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.core.runtime">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.core.runtime" id="initializers" name="Plug-in Initializers"/>
+      </appInfo>
+      <documentation>
+         Platform runtime supports plug-ins which would like to 
+be initialized. That is, plug-ins that needs to be initialized when
+the initialization application is being run should provide an extension
+to this extension-point.
+The initializers are run when the org.eclipse.core.runtime.initializer application
+is being run. The initializers are run in any order.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="initializer"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="initializer">
+      <complexType>
+         <sequence>
+            <element ref="initialize"/>
+         </sequence>
+      </complexType>
+   </element>
+
+   <element name="initialize">
+      <complexType>
+         <sequence>
+            <element ref="initialize"/>
+         </sequence>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.core.runtime.IPlatformRunnable"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.1
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         Following is an example of initializer declaration:
+&lt;p&gt;
+&lt;pre&gt;
+   &lt;extension id=&quot;myInitializer&quot; point=&quot;org.eclipse.core.runtime.initializers&quot;&gt;
+      &lt;initializer&gt;
+         &lt;initialize class=&quot;myInitializer.Doit&quot;/&gt;
+      &lt;/initializer&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         The value of the class attribute must represent an 
+implementor of 
+&lt;samp&gt;org.eclipse.core.runtime.IPlatformRunnable&lt;/samp&gt;.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
+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 
+&lt;a 
+href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
Index: src/org/eclipse/core/internal/runtime/FileInitializer.java
===================================================================
RCS file: src/org/eclipse/core/internal/runtime/FileInitializer.java
diff -N src/org/eclipse/core/internal/runtime/FileInitializer.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/core/internal/runtime/FileInitializer.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,153 @@
+package org.eclipse.core.internal.runtime;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.LinkedList;
+
+import org.eclipse.core.runtime.IPlatformRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.Bundle;
+
+/**
+ * <p>
+ * This application extracts files to their "localURL". The file patterns that you
+ * want to extract should be specified in a file with one pattern per line. This
+ * application should be run through the generic initializer mechanism and not
+ * run directly.
+ * </p>
+ * 
+ * <p>
+ * To run this application, do something like:
+ * </p>
+ * 
+ * <p>
+ * <code>
+ * java -cp startup.jar org.eclipse.core.launcher.Main -application org.eclipse.core.runtime.initializer -fileInitializer &lt;fileWithFilePatternsToExtract&gt;
+ * </code>
+ * </p>
+ * 
+ * <p>
+ * <ul>
+ * <li> 
+ * Note: Only the files that are extracted will be printed to the console. If you
+ * want to debug things, use the -consolelog option in
+ * org.eclipse.core.launcher.Main
+ * </li>
+ * </ul>
+ * </p>
+ * 
+ * @see Initializer
+ * @see Platform#asLocalURL(URL)
+ * @since 3.1
+ */
+public class FileInitializer implements IPlatformRunnable {
+	
+	private final String SWT_BUNDLE_NAME = "org.eclipse.swt"; //$NON-NLS-1$
+	
+	public Object run(Object args) throws Exception {
+		ArrayList fileNamePatterns = getFileNamePatterns((String[]) args);
+		
+		// don't do anything if the arrayList is empty
+		if (fileNamePatterns == null || fileNamePatterns.size() < 1) {
+			return IPlatformRunnable.EXIT_OK;
+		}
+		
+		Bundle[] installedBundles = InternalPlatform.getDefault().getBundleContext().getBundles();
+		LinkedList extractedFiles = new LinkedList();
+
+		for (int i = 0; i < installedBundles.length; i++) {
+			for (int j = 0; j < fileNamePatterns.size(); j++) {
+				
+				Enumeration e = installedBundles[i].findEntries("/", (String) fileNamePatterns.get(j), true); //$NON-NLS-1$
+				String bundleName = installedBundles[i].getSymbolicName();
+				
+				while(e != null && e.hasMoreElements()) {
+					URL fileURL = (URL) e.nextElement();
+					String filePath = fileURL.getPath();
+
+				
+					if (bundleName.startsWith(SWT_BUNDLE_NAME)) {
+						// special case for swt
+						if (!bundleName.equals(SWT_BUNDLE_NAME + '.' + Platform.getWS() + '.' + Platform.getOS() + '.' + Platform.getOSArch()))
+							continue;
+					} else {
+						// everything but swt plugins
+						String[] path = filePath.split(File.separator);
+						// check to see if the file is should be extracted to the current os/arch
+						if (path.length == 4 && path[0].equals("os") && !(path[1].equals(Platform.getOS()) && path[2].equals(Platform.getOSArch()))) { //$NON-NLS-1$
+							continue;
+						}
+						// check to see if the file is should be extracted to the current ws
+						if (path.length == 3 && path[0].equals("ws") && !path[1].equals(Platform.getWS())) { //$NON-NLS-1$
+							continue;
+						}
+					}
+		
+					// the call to Platform.asLocalURL(URL) does the actual extraction
+					String localURL = Platform.asLocalURL(fileURL).getPath();
+
+					// only print the path if it hasn't been printed yet
+					int index = Collections.binarySearch(extractedFiles, localURL);
+					if (index < 0) {
+						extractedFiles.add(-(index + 1), localURL);
+						System.out.println("FileInitializer: " + localURL); //$NON-NLS-1$
+					}
+				}	
+			} // end for
+		} // end for
+		
+		return IPlatformRunnable.EXIT_OK;
+	}
+
+	private final String ARG_FILE = "-fileInitializer"; //$NON-NLS-1$
+	
+	private ArrayList getFileNamePatterns(String[] argsArray) {
+		
+		for (int i = 0; i < argsArray.length; i++) {
+			if (argsArray[i].equalsIgnoreCase(ARG_FILE)) {
+
+				// the "file patterns" file was not specified
+				if (argsArray.length < i + 2) {
+					String msg = NLS.bind(Messages.fileInitializer_missingFileName, this.getClass().getName());
+					IStatus status = new Status(IStatus.ERROR, Platform.PI_RUNTIME, Platform.PLUGIN_ERROR, msg, null);
+					InternalPlatform.getDefault().log(status);
+					return null;
+				}
+				
+				ArrayList fileList = new ArrayList();
+				try {
+					BufferedReader in = new BufferedReader(new FileReader(argsArray[i + 1]));
+					String line;
+					while ((line = in.readLine()) != null) {
+						fileList.add(line);
+					}
+					in.close();
+				} catch (FileNotFoundException e) {
+					String msg = NLS.bind(Messages.fileInitializer_fileNotFound, this.getClass().getName(), argsArray[i + 1]);
+					IStatus status = new Status(IStatus.ERROR, Platform.PI_RUNTIME, Platform.PLUGIN_ERROR, msg, null);
+					InternalPlatform.getDefault().log(status);
+					return null;
+				} catch (IOException e) {
+					String msg = NLS.bind(Messages.fileInitializer_IOError, this.getClass().getName(), argsArray[i + 1]);
+					IStatus status = new Status(IStatus.ERROR, Platform.PI_RUNTIME, Platform.PLUGIN_ERROR, msg, e);
+					InternalPlatform.getDefault().log(status);
+					return null;
+				}
+				return fileList;
+			}
+		}
+		
+		// ARG_FILE wasn't found
+		return null;
+	}
+}
Index: src/org/eclipse/core/internal/runtime/Initializer.java
===================================================================
RCS file: src/org/eclipse/core/internal/runtime/Initializer.java
diff -N src/org/eclipse/core/internal/runtime/Initializer.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/core/internal/runtime/Initializer.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,49 @@
+/*******************************************************************************
+* Copyright (c) 2005 Red Hat Incoporated 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:
+*     IBM  - Initial implementation
+*******************************************************************************/
+package org.eclipse.core.internal.runtime;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IPlatformRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+
+public class Initializer implements IPlatformRunnable {
+
+	public Object run(Object args) throws Exception {
+		IExtensionPoint xpt = Platform.getExtensionRegistry().getExtensionPoint(Platform.PI_RUNTIME, Platform.PT_INITIALIZERS);
+		if (xpt == null)
+			return IPlatformRunnable.EXIT_OK;
+		
+		IExtension[] exts = xpt.getExtensions();
+		for (int i = 0; i < exts.length; i++) {
+			IConfigurationElement[] configs = exts[i].getConfigurationElements();
+			IPlatformRunnable initializer = null;
+			if (configs.length != 0) {
+				try {
+					initializer = (IPlatformRunnable) configs[0].createExecutableExtension("initialize"); //$NON-NLS-1$
+					initializer.run(args);
+				} catch(CoreException e) {
+					String msg = NLS.bind(Messages.initializer_error, exts[i].getExtensionPointUniqueIdentifier());
+					IStatus status = new Status(IStatus.ERROR, Platform.PI_RUNTIME, Platform.PLUGIN_ERROR, msg, e);
+					InternalPlatform.getDefault().log(status);
+					return null;
+				}
+			}
+		}
+		return IPlatformRunnable.EXIT_OK;
+	}
+
+}
openSUSE Build Service is sponsored by