[jboss-cvs] jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/util ...
Robert Stryker
rawblem at gmail.com
Wed Feb 7 06:52:18 EST 2007
User: rawb
Date: 07/02/07 06:52:18
Added: as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/util
ASLaunchConfigurationConverter.java
Log:
reimpl'd upgrade wizard from 1.6
Revision Changes Path
1.4 +13 -11 jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/util/ASLaunchConfigurationConverter.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ASLaunchConfigurationConverter.java
===================================================================
RCS file: ASLaunchConfigurationConverter.java
diff -N ASLaunchConfigurationConverter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ASLaunchConfigurationConverter.java 7 Feb 2007 11:52:18 -0000 1.4
@@ -0,0 +1,428 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ide.eclipse.as.core.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.internal.core.DebugCoreMessages;
+import org.eclipse.debug.internal.core.LaunchConfiguration;
+import org.eclipse.debug.internal.core.LaunchConfigurationInfo;
+import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMInstallType;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.server.core.IServerWorkingCopy;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.internal.RuntimeWorkingCopy;
+import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.internal.ServerType;
+import org.jboss.ide.eclipse.as.core.runtime.IJBossServerRuntime;
+import org.jboss.ide.eclipse.as.core.runtime.server.AbstractJBossServerRuntime;
+import org.jboss.ide.eclipse.as.core.server.JBossServerLaunchConfiguration;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * This class's purpose is to convert pre-JBIDE2.0 server launch configurations
+ * into proper server and runtime objects linked with WTP.
+ *
+ * @author rstryker
+ */
+
+public class ASLaunchConfigurationConverter {
+
+ public TempLaunchConfiguration[] getConvertableConfigurations() {
+ TempLaunchConfiguration[] cfgs = getAllLaunchConfigurations();
+ ArrayList result = new ArrayList();
+ try {
+ for( int i = 0; i < cfgs.length; i++ ) {
+ int type = cfgs[i].getLaunchType();
+ // If it only has the private key and the type key, its a stub
+ if( type != -1 && cfgs[i].getAttributes().keySet().size() > 2) {
+ result.add(cfgs[i]);
+ }
+ }
+ } catch( CoreException ce) {
+ ce.printStackTrace();
+ }
+ return (TempLaunchConfiguration[]) result.toArray(new TempLaunchConfiguration[result.size()]);
+ }
+
+
+ public void convertConfiguration(TempLaunchConfiguration configuration,
+ String runtimeName, String serverName) throws CoreException {
+ int type = configuration.getLaunchType();
+
+ // need name, directory, jre, configuration
+ String homeDir = configuration.getAttribute(TempLaunchConfiguration.HOME_DIR_KEY, (String)null);
+ String configName = configuration.getAttribute(TempLaunchConfiguration.CONFIGURATION_KEY, (String)null);
+ IVMInstall vm = configuration.getJVMItem();
+
+ IRuntimeType runtimeType = getRuntimeType(type);
+ IServerType serverType = getServerType(type);
+
+ try {
+ IServerWorkingCopy newServerWC = serverType.createServer(null, null, null, null);
+ IRuntimeWorkingCopy newRuntimeWC = runtimeType.createRuntime("", null);
+
+ newRuntimeWC.setName(runtimeName);
+ newRuntimeWC.setLocation(new Path(homeDir));
+ ((RuntimeWorkingCopy)newRuntimeWC).setAttribute(IJBossServerRuntime.PROPERTY_VM_ID, vm.getId());
+ ((RuntimeWorkingCopy)newRuntimeWC).setAttribute(IJBossServerRuntime.PROPERTY_VM_TYPE_ID, vm.getVMInstallType().getId());
+ ((RuntimeWorkingCopy)newRuntimeWC).setAttribute(IJBossServerRuntime.PROPERTY_CONFIGURATION_NAME, configName);
+ IRuntime runtime = newRuntimeWC.save(true, null);
+
+ AbstractJBossServerRuntime newJBRuntime = (AbstractJBossServerRuntime)newRuntimeWC
+ .loadAdapter(AbstractJBossServerRuntime.class, null);
+ newJBRuntime.setVMInstall(vm);
+
+
+ newServerWC.setRuntime(runtime);
+
+ IFolder configFolder = ServerType.getServerProject().getFolder(serverName);
+ if( !configFolder.exists() ) {
+ configFolder.create(true, true, null);
+ }
+
+ newServerWC.setServerConfiguration(configFolder);
+ newServerWC.setName(serverName);
+
+ IServer savedServer = newServerWC.save(true, null);
+
+ ILaunchConfiguration launchConfig =
+ ((Server)savedServer).getLaunchConfiguration(true, new NullProgressMonitor());
+ ILaunchConfigurationWorkingCopy lcwc = launchConfig.getWorkingCopy();
+
+ // now lets set some launch config properties
+ String startSuffix = JBossServerLaunchConfiguration.PRGM_ARGS_START_SUFFIX;
+ String stopSuffix = JBossServerLaunchConfiguration.PRGM_ARGS_STOP_SUFFIX;
+ String twiddleSuffix = JBossServerLaunchConfiguration.PRGM_ARGS_TWIDDLE_SUFFIX;
+
+ String startArgsKey = IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS + startSuffix;
+ String startVMArgsKey = IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS + startSuffix;
+ String startWorkingDirKey = IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY + startSuffix;
+
+ String stopArgsKey = IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS + stopSuffix;
+ String stopVMArgsKey = IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS + stopSuffix;
+ String stopWorkingDirKey = IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY + stopSuffix;
+
+ String twiddleArgsKey = IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS + twiddleSuffix;
+ String twiddleVMArgsKey = IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS + twiddleSuffix;
+ String twiddleWorkingDirKey = IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY + twiddleSuffix;
+
+ String startArgs = configuration.getAttribute("org.rocklet.launcher.userProgramArgs", (String)null);
+ String startVMArgs = configuration.getAttribute("org.rocklet.launcher.UserVMArgs", (String)null);
+
+ String shutdownArgs = configuration.getAttribute("org.rocklet.launcher.userShutdownProgramArgs", (String)null);
+ String shutdownVMArgs = configuration.getAttribute("org.rocklet.launcher.userShutdownVMArgs", (String)null);
+
+ String sourceMementoKey="org.eclipse.debug.core.source_locator_memento";
+ String sourceLocatorKey="org.eclipse.debug.core.source_locator_id";
+ String sourceMemento=configuration.getAttribute(sourceMementoKey, (String)null);
+ String sourceLocator=configuration.getAttribute(sourceLocatorKey, "org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector");
+
+ lcwc.setAttribute(startArgsKey, startArgs);
+ lcwc.setAttribute(startVMArgsKey, startVMArgs);
+ lcwc.setAttribute(stopArgsKey, shutdownArgs);
+ lcwc.setAttribute(stopVMArgsKey, shutdownVMArgs);
+ lcwc.setAttribute(sourceMementoKey, sourceMemento);
+ lcwc.setAttribute(sourceLocatorKey, sourceLocator);
+
+ lcwc.doSave();
+
+
+ } catch( CoreException ce) {
+ ce.printStackTrace();
+ }
+ }
+
+
+ private IRuntimeType getRuntimeType(int version) {
+ String runtimeKey = "org.jboss.ide.eclipse.as.runtime." + version;
+ return ServerCore.findRuntimeType(runtimeKey);
+ }
+
+ private IServerType getServerType(int version) {
+ String serverKey = "org.jboss.ide.eclipse.as." + version;
+ return ServerCore.findServerType(serverKey);
+ }
+
+
+
+ protected TempLaunchConfiguration[] getAllLaunchConfigurations() {
+ IPath containerPath =
+ DebugPlugin.getDefault().getStateLocation().append(".launches");
+
+ List configs = new ArrayList(10);
+ final File directory = containerPath.toFile();
+ if (directory.isDirectory()) {
+ FilenameFilter filter = new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return dir.equals(directory) &&
+ name.endsWith(ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION);
+ }
+ };
+ String[] files = directory.list(filter);
+ for (int i = 0; i < files.length; i++) {
+ TempLaunchConfiguration config = new TempLaunchConfiguration(containerPath.append(files[i]));
+ configs.add(config);
+ }
+ }
+
+ return (TempLaunchConfiguration[]) configs.toArray(new TempLaunchConfiguration[configs.size()]);
+ }
+
+ public class TempLaunchConfiguration extends LaunchConfiguration {
+ public static final String JBOSS_32_CONFIG = "org.jboss.ide.eclipse.launcher.configuration.jboss.JBoss32xLaunchConfigurationDelegate";
+ public static final String JBOSS_40_CONFIG = "org.jboss.ide.eclipse.launcher.configuration.jboss.JBoss40xLaunchConfigurationDelegate";
+ public static final String LAUNCH_CONFIG_TYPE = "_LAUNCH_CONFIG_TYPE_";
+
+ public static final String HOME_DIR_KEY = "org.jboss.rocklet.HomeDir";
+ public static final String CONFIGURATION_KEY = "org.jboss.rocklet.ServerConfiguration";
+
+
+ private TempLaunchConfigurationInfo info = null;
+
+ protected TempLaunchConfiguration(IPath location) {
+ super(location);
+ }
+
+ protected LaunchConfigurationInfo getInfo() throws CoreException {
+ return managerGetInfo(this);
+ }
+
+ // returns 32, 40, or -1
+ public int getLaunchType() {
+ try {
+ if( info == null ) managerGetInfo(this);
+
+ String type = getAttribute(LAUNCH_CONFIG_TYPE, (String)null);
+ if( type == null ) return -1;
+
+ if( type.equals(JBOSS_32_CONFIG)) return 32;
+ if( type.equals(JBOSS_40_CONFIG)) return 40;
+ } catch( Exception e ) {
+ }
+ return -1;
+ }
+
+ public IVMInstall getJVMItem() throws CoreException {
+ List cp = getAttribute("org.rocklet.launcher.JDKClasspath", (List)null);
+ ArrayList vms = new ArrayList();
+ IVMInstallType[] vmTypes = JavaRuntime.getVMInstallTypes();
+ for( int i = 0; i < vmTypes.length; i++ ) {
+ vms.addAll(Arrays.asList(vmTypes[i].getVMInstalls()));
+ }
+ IVMInstall[] vms2 = (IVMInstall[]) vms.toArray(new IVMInstall[vms.size()]);
+
+ Iterator i = cp.iterator();
+ while(i.hasNext()) {
+ Path cpItemPath = new Path((String)i.next());
+ for( int j = 0; j < vms2.length; j++ ) {
+ try {
+ Path vmPath = new Path(vms2[j].getInstallLocation().toURL().getPath());
+ IPath vmPath2 = vmPath.append("lib").append("tools.jar");
+ if( cpItemPath.equals(vmPath2) ) {
+ return vms2[j];
+ }
+ } catch( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ return JavaRuntime.getDefaultVMInstall();
+ }
+
+
+ protected LaunchConfigurationInfo managerGetInfo(ILaunchConfiguration config) throws CoreException {
+ if (info == null) {
+ if (config.exists()) {
+ InputStream stream = null;
+ try {
+ if (config.isLocal()) {
+ IPath path = config.getLocation();
+ File file = path.toFile();
+ stream = new FileInputStream(file);
+ } else {
+ IFile file = ((LaunchConfiguration) config).getFile();
+ if (file == null) {
+ throw createDebugException(MessageFormat.format(DebugCoreMessages.LaunchManager_30, new String[] {config.getName()}), null);
+ }
+ stream = file.getContents();
+ }
+ info = (TempLaunchConfigurationInfo)createInfoFromXML(stream);
+ } catch (FileNotFoundException e) {
+ throwException(config, e);
+ } catch (SAXException e) {
+ throwException(config, e);
+ } catch (ParserConfigurationException e) {
+ throwException(config, e);
+ } catch (IOException e) {
+ throwException(config, e);
+ } finally {
+ if (stream != null) {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ throwException(config, e);
+ }
+ }
+ }
+
+ } else {
+ throw createDebugException(
+ MessageFormat.format(DebugCoreMessages.LaunchManager_does_not_exist, new String[]{config.getName(), config.getLocation().toOSString()}), null);
+ }
+ }
+ return info;
+ }
+
+ private void throwException(ILaunchConfiguration config, Throwable e) throws DebugException {
+ IPath path = config.getLocation();
+ throw createDebugException(MessageFormat.format(DebugCoreMessages.LaunchManager__0__occurred_while_reading_launch_configuration_file__1___1, new String[]{e.toString(), path.toOSString()}), e);
+ }
+
+ protected DebugException createDebugException(String message, Throwable throwable) {
+ return new DebugException(
+ new Status(
+ IStatus.ERROR, DebugPlugin.getUniqueIdentifier(),
+ DebugException.REQUEST_FAILED, message, throwable
+ )
+ );
+ }
+
+
+ protected LaunchConfigurationInfo createInfoFromXML(InputStream stream) throws CoreException,
+ ParserConfigurationException,
+ IOException,
+ SAXException {
+ Element root = null;
+ DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ parser.setErrorHandler(new DefaultHandler());
+ root = parser.parse(new InputSource(stream)).getDocumentElement();
+ TempLaunchConfigurationInfo info = new TempLaunchConfigurationInfo();
+ info.initializeFromXML(root);
+ return info;
+ }
+
+
+ }
+
+ protected class TempLaunchConfigurationInfo extends LaunchConfigurationInfo {
+
+ protected void initializeFromXML(Element root) throws CoreException {
+
+
+// boolean val = true;
+// if( val ) {
+// super.initializeFromXML(root);
+// return;
+// }
+
+
+ if (!root.getNodeName().equalsIgnoreCase("launchConfiguration")) { //$NON-NLS-1$
+ throw getInvalidFormatDebugException();
+ }
+
+ // read type
+ String id = root.getAttribute("type"); //$NON-NLS-1$
+ if (id == null) {
+ throw getInvalidFormatDebugException();
+ }
+
+ // Commenting out as it causes an exception. (Configuration type not found)
+// ILaunchConfigurationType type = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(id);
+// if (type == null) {
+// String message= MessageFormat.format(DebugCoreMessages.LaunchConfigurationInfo_missing_type, new Object[]{id});
+// throw new DebugException(
+// new Status(
+// IStatus.ERROR, DebugPlugin.getUniqueIdentifier(),
+// DebugException.MISSING_LAUNCH_CONFIGURATION_TYPE, message, null)
+// );
+// }
+// setType(type);
+
+ // instead just set an attribute right now.
+ setAttribute(TempLaunchConfiguration.LAUNCH_CONFIG_TYPE, id);
+
+ NodeList list = root.getChildNodes();
+ int length = list.getLength();
+ for (int i = 0; i < length; ++i) {
+ Node node = list.item(i);
+ short nodeType = node.getNodeType();
+ if (nodeType == Node.ELEMENT_NODE) {
+ Element element = (Element) node;
+ String nodeName = element.getNodeName();
+
+ if (nodeName.equalsIgnoreCase("stringAttribute")) { //$NON-NLS-1$
+ setStringAttribute(element);
+ } else if (nodeName.equalsIgnoreCase("intAttribute")) { //$NON-NLS-1$
+ setIntegerAttribute(element);
+ } else if (nodeName.equalsIgnoreCase("booleanAttribute")) { //$NON-NLS-1$
+ setBooleanAttribute(element);
+ } else if (nodeName.equalsIgnoreCase("listAttribute")) { //$NON-NLS-1$
+ setListAttribute(element);
+ } else if (nodeName.equalsIgnoreCase("mapAttribute")) { //$NON-NLS-1$
+ setMapAttribute(element);
+ }
+ }
+ }
+ }
+ }
+
+}
More information about the jboss-cvs-commits
mailing list