/******************************************************************************* * Copyright (c) 2003, 2005 IBM Corporation 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 Corporation - Initial API and implementation *******************************************************************************/ package org.eclipse.wst.server.ui.internal.editor; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.wst.server.core.IServer; import org.eclipse.wst.server.core.ServerCore; import org.eclipse.wst.server.core.internal.Server; import org.eclipse.wst.server.ui.internal.ImageResource; import org.eclipse.ui.IMemento; import org.eclipse.ui.IPersistableElement; /** * The editor input for server configurations and instances. The * input points to a resource that is either an instance or * configuration. * * <p>Editors supporting this editor input should use the ResourceManager * to load their own copy of the resource. Each editor is responsible * for managing this resource and making sure that only one copy is * loaded from disk when multiple editors are opened on the same * resource.</p> * * <p>When the editor saves back to the resource, the server tooling * will notice the change and reload the new configuration.</p> * * <p>Editors should call setEditing(resource, true) when the first * editor opens on a particular resource, and setEditing(resource, * false) when the last editor on a resource closes. This will * ensure that the server tooling does not try to edit the resource * and cause conflicting changes while an editor is open.</p> */ public class ServerEditorInput implements IServerEditorInput, IPersistableElement { private String serverId; /** * ServerEditorInput constructor comment. * * @param serverId a server id */ public ServerEditorInput(String serverId) { super(); this.serverId = serverId; } /** * Returns the server id. * @return org.eclipse.core.resources.IResource */ public String getServerId() { return serverId; } /** * @see Object#equals(Object) */ public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof ServerEditorInput)) return false; ServerEditorInput other = (ServerEditorInput) obj; if (serverId == null) { if (other.serverId != null) return false; } else if (!serverId.equals(other.serverId)) return false; return true; } /** * Returns whether the editor input exists. * <p> * This method is primarily used to determine if an editor input should * appear in the "File Most Recently Used" menu. An editor input will appear * in the list until the return value of <code>exists</code> becomes * <code>false</code> or it drops off the bottom of the list. * * @return <code>true</code> if the editor input exists; <code>false</code> * otherwise */ public boolean exists() { if (serverId != null && ServerCore.findServer(serverId) == null) return false; return true; } /** * Returns an object which is an instance of the given class * associated with this object. Returns <code>null</code> if * no such object can be found. * * @param adapter the adapter class to look up * @return a object castable to the given class, * or <code>null</code> if this object does not * have an adapter for the given class */ public Object getAdapter(Class adapter) { return Platform.getAdapterManager().getAdapter(this, adapter); } /** * Returns the ID of an element factory which can be used to recreate * this object. An element factory extension with this ID must exist * within the workbench registry. * * @return the element factory ID */ public String getFactoryId() { return ServerEditorInputFactory.FACTORY_ID; } public ImageDescriptor getImageDescriptor() { return ImageResource.getImageDescriptor(ImageResource.IMG_SERVER); } /** * Returns the name of this editor input for display purposes. * <p> * For instance, if the fully qualified input name is * <code>"a\b\MyFile.gif"</code>, the return value would be just * <code>"MyFile.gif"</code>. * * @return the file name string */ public String getName() { if (serverId != null) { IServer server = ServerCore.findServer(serverId); if (server != null) return server.getName(); return serverId; } return ""; } /* * Returns an object that can be used to save the state of this editor input. * * @return the persistable element, or <code>null</code> if this editor input * cannot be persisted */ public IPersistableElement getPersistable() { return this; } public String getToolTipText() { String s = null; if (serverId != null) { IServer server = ServerCore.findServer(serverId); if (server != null) { Server server2 = (Server) server; if (server2.getFile() != null) { s = server2.getFile().getFullPath().makeRelative().toString(); if (s.startsWith("/")) s = s.substring(1); } else s = server.getName(); } } if (s == null) s = ""; return s; } /** * Saves the state of an element within a memento. * * @param memento the storage area for element state */ public void saveState(IMemento memento) { ServerEditorInputFactory.saveState(memento, this); } }