| /******************************************************************************* |
| * Copyright (c) 2000, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.launching; |
| |
| |
| import java.net.URL; |
| import java.io.File; |
| |
| import org.eclipse.jdt.internal.launching.LaunchingMessages; |
| /** |
| * Abstract implementation of a VM install. |
| * <p> |
| * Clients implenmenting VM installs should subclass this class. |
| * </p> |
| */ |
| public abstract class AbstractVMInstall implements IVMInstall { |
| private IVMInstallType fType; |
| private String fId; |
| private String fName; |
| private File fInstallLocation; |
| private LibraryLocation[] fSystemLibraryDescriptions; |
| private URL fJavadocLocation; |
| private String[] fVMArgs; |
| // whether change events should be fired |
| private boolean fNotify = true; |
| |
| /** |
| * Constructs a new VM install. |
| * |
| * @param type The type of this VM install. |
| * Must not be <code>null</code> |
| * @param id The unique identifier of this VM instance |
| * Must not be <code>null</code>. |
| * @throws IllegalArgumentException if any of the required |
| * parameters are <code>null</code>. |
| */ |
| public AbstractVMInstall(IVMInstallType type, String id) { |
| if (type == null) |
| throw new IllegalArgumentException(LaunchingMessages.getString("vmInstall.assert.typeNotNull")); //$NON-NLS-1$ |
| if (id == null) |
| throw new IllegalArgumentException(LaunchingMessages.getString("vmInstall.assert.idNotNull")); //$NON-NLS-1$ |
| fType= type; |
| fId= id; |
| } |
| |
| /* (non-Javadoc) |
| * Subclasses should not override this method. |
| * @see IVMInstall#getId() |
| */ |
| public String getId() { |
| return fId; |
| } |
| |
| /* (non-Javadoc) |
| * Subclasses should not override this method. |
| * @see IVMInstall#getName() |
| */ |
| public String getName() { |
| return fName; |
| } |
| |
| /* (non-Javadoc) |
| * Subclasses should not override this method. |
| * @see IVMInstall#setName(String) |
| */ |
| public void setName(String name) { |
| if (!name.equals(fName)) { |
| PropertyChangeEvent event = new PropertyChangeEvent(this, IVMInstallChangedListener.PROPERTY_NAME, fName, name); |
| fName= name; |
| if (fNotify) { |
| JavaRuntime.fireVMChanged(event); |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * Subclasses should not override this method. |
| * @see IVMInstall#getInstallLocation() |
| */ |
| public File getInstallLocation() { |
| return fInstallLocation; |
| } |
| |
| /* (non-Javadoc) |
| * Subclasses should not override this method. |
| * @see IVMInstall#setInstallLocation(File) |
| */ |
| public void setInstallLocation(File installLocation) { |
| if (!installLocation.equals(fInstallLocation)) { |
| PropertyChangeEvent event = new PropertyChangeEvent(this, IVMInstallChangedListener.PROPERTY_INSTALL_LOCATION, fInstallLocation, installLocation); |
| fInstallLocation= installLocation; |
| if (fNotify) { |
| JavaRuntime.fireVMChanged(event); |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * Subclasses should not override this method. |
| * @see IVMInstall#getVMInstallType() |
| */ |
| public IVMInstallType getVMInstallType() { |
| return fType; |
| } |
| |
| /* (non-Javadoc) |
| * @see IVMInstall#getVMRunner(String) |
| */ |
| public IVMRunner getVMRunner(String mode) { |
| return null; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.launching.IVMInstall#getLibraryLocations() |
| */ |
| public LibraryLocation[] getLibraryLocations() { |
| return fSystemLibraryDescriptions; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.launching.IVMInstall#setLibraryLocations(org.eclipse.jdt.launching.LibraryLocation[]) |
| */ |
| public void setLibraryLocations(LibraryLocation[] locations) { |
| if (locations == fSystemLibraryDescriptions) { |
| return; |
| } |
| LibraryLocation[] newLocations = locations; |
| if (newLocations == null) { |
| newLocations = getVMInstallType().getDefaultLibraryLocations(getInstallLocation()); |
| } |
| LibraryLocation[] prevLocations = fSystemLibraryDescriptions; |
| if (prevLocations == null) { |
| prevLocations = getVMInstallType().getDefaultLibraryLocations(getInstallLocation()); |
| } |
| |
| if (newLocations.length == prevLocations.length) { |
| int i = 0; |
| boolean equal = true; |
| while (i < newLocations.length && equal) { |
| equal = newLocations[i].equals(prevLocations[i]); |
| i++; |
| } |
| if (equal) { |
| // no change |
| return; |
| } |
| } |
| |
| PropertyChangeEvent event = new PropertyChangeEvent(this, IVMInstallChangedListener.PROPERTY_LIBRARY_LOCATIONS, prevLocations, newLocations); |
| fSystemLibraryDescriptions = locations; |
| if (fNotify) { |
| JavaRuntime.fireVMChanged(event); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.launching.IVMInstall#getJavadocLocation() |
| */ |
| public URL getJavadocLocation() { |
| return fJavadocLocation; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.launching.IVMInstall#setJavadocLocation(java.net.URL) |
| */ |
| public void setJavadocLocation(URL url) { |
| if (url == fJavadocLocation) { |
| return; |
| } |
| if (url != null && fJavadocLocation != null) { |
| if (url.equals(fJavadocLocation)) { |
| // no change |
| return; |
| } |
| } |
| |
| PropertyChangeEvent event = new PropertyChangeEvent(this, IVMInstallChangedListener.PROPERTY_JAVADOC_LOCATION, fJavadocLocation, url); |
| fJavadocLocation = url; |
| if (fNotify) { |
| JavaRuntime.fireVMChanged(event); |
| } |
| } |
| |
| /** |
| * Whether this VM should fire property change notifications. |
| * |
| * @param notify |
| * @since 2.1 |
| */ |
| protected void setNotify(boolean notify) { |
| fNotify = notify; |
| } |
| |
| /* (non-Javadoc) |
| * @see java.lang.Object#equals(java.lang.Object) |
| * @since 2.1 |
| */ |
| public boolean equals(Object object) { |
| if (object instanceof IVMInstall) { |
| IVMInstall vm = (IVMInstall)object; |
| return getVMInstallType().equals(vm.getVMInstallType()) && |
| getId().equals(vm.getId()); |
| } |
| return false; |
| } |
| |
| /* (non-Javadoc) |
| * @see java.lang.Object#hashCode() |
| * @since 2.1 |
| */ |
| public int hashCode() { |
| return getVMInstallType().hashCode() + getId().hashCode(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.launching.IVMInstall#getDefaultVMArguments() |
| * @since 3.0 |
| */ |
| public String[] getVMArguments() { |
| return fVMArgs; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jdt.launching.IVMInstall#setDefaultVMArguments(java.lang.String[]) |
| * @since 3.0 |
| */ |
| public void setVMArguments(String[] vmArgs) { |
| fVMArgs = vmArgs; |
| } |
| } |