blob: 7f7d5237c51db730f82da145bd127c6d7e2e69c0 [file] [log] [blame]
/**
* Copyright (c) 2004-2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.common.ui;
import java.io.File;
import java.lang.reflect.Constructor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.util.URI;
import org.osgi.framework.Bundle;
/**
* An implementation of an {@link org.eclipse.ui.IEditorInput} to wrap
* a {@link org.eclipse.emf.common.util.URI}.
*/
public class URIEditorInput implements IEditorInput, IPersistableElement
{
private URI uri;
private String name;
public URIEditorInput(URI uri)
{
this.uri = uri;
}
public URIEditorInput(URI uri, String name)
{
this.uri = uri;
this.name = name;
}
public URIEditorInput(IMemento memento)
{
loadState(memento);
}
@Override
public int hashCode()
{
return uri.hashCode();
}
@Override
public boolean equals(Object o)
{
return this == o || o instanceof URIEditorInput && uri.equals(((URIEditorInput)o).getURI());
}
/**
* @return the uri
*/
public URI getURI()
{
return uri;
}
/**
* Returns <b>true</b> only if the URI represents a file and if this file exists.
* @see org.eclipse.ui.IEditorInput#exists()
*/
public boolean exists()
{
if (getURI().isFile())
{
return new File(getURI().toFileString()).exists();
}
else
{
if (EMFPlugin.IS_RESOURCES_BUNDLE_AVAILABLE)
{
return EclipseUtil.exists(uri);
}
else
{
return false;
}
}
}
/**
* Returns the <i>toString</i> value of the associated URI.
* @see org.eclipse.ui.IEditorInput#getName()
*/
public String getName()
{
if (name == null)
{
URI uri = getURI();
return URI.decode(uri.isHierarchical() && uri.lastSegment() != null ? uri.lastSegment() : uri.toString());
}
else
{
return name;
}
}
public String getToolTipText()
{
return getURI().toString();
}
public ImageDescriptor getImageDescriptor()
{
return null;
}
public IPersistableElement getPersistable()
{
return this;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public Object getAdapter(Class adapter)
{
if (EMFPlugin.IS_RESOURCES_BUNDLE_AVAILABLE)
{
Object result = EclipseUtil.getAdapter(adapter, uri);
if (result != null)
{
return result;
}
}
return null;
}
public String getFactoryId()
{
return URIEditorInputFactory.ID;
}
protected String getBundleSymbolicName()
{
return CommonUIPlugin.getPlugin().getSymbolicName();
}
protected static final String BUNDLE_TAG = "bundle";
protected static final String CLASS_TAG = "class";
protected static final String URI_TAG = "uri";
protected static final String NAME_TAG = "name";
static URIEditorInput create(IMemento memento)
{
String bundleSymbolicName = memento.getString(BUNDLE_TAG);
String className = memento.getString(CLASS_TAG);
try
{
Bundle bundle = Platform.getBundle(bundleSymbolicName);
Class<?> theClass = bundle.loadClass(className);
Constructor<?> constructor = theClass.getConstructor(IMemento.class);
return (URIEditorInput)constructor.newInstance(memento);
}
catch (Exception exception)
{
CommonUIPlugin.INSTANCE.log(exception);
return new URIEditorInput(memento);
}
}
public void saveState(IMemento memento)
{
memento.putString(BUNDLE_TAG, getBundleSymbolicName());
memento.putString(CLASS_TAG, getClass().getName());
memento.putString(URI_TAG, uri.toString());
memento.putString(NAME_TAG, name);
}
protected void loadState(IMemento memento)
{
uri = URI.createURI(memento.getString(URI_TAG));
name = memento.getString(NAME_TAG);
}
protected static class EclipseUtil
{
/**
* @deprecated
* @see #getAdapter(Class, URI)
*/
@Deprecated
public static Object getAdatper(Class<?> adapter, URI uri)
{
return getAdapter(adapter, uri);
}
public static Object getAdapter(Class<?> adapter, URI uri)
{
if ((adapter == IFile.class || adapter == IResource.class) && uri.isPlatformResource())
{
return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uri.toPlatformString(true)));
}
else
{
return null;
}
}
public static boolean exists(URI uri)
{
if (uri.isPlatformResource())
{
return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uri.toPlatformString(true))).exists();
}
else
{
return false;
}
}
}
}