/**
* Aptana Studio
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
* Please see the license.html included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.ide.syncing.ui.handlers;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.filesystem.URIUtil;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IPathEditorInput;
import org.eclipse.ui.ISources;
import org.eclipse.ui.IURIEditorInput;
import com.aptana.core.io.efs.EFSUtils;
import com.aptana.ide.ui.io.IUniformFileStoreEditorInput;
import com.aptana.ide.ui.io.Utils;
public abstract class BaseCloakHandler extends BaseSyncHandler
{
private List<IFileStore> fSelectedFiles;
protected BaseCloakHandler()
{
fSelectedFiles = new ArrayList<IFileStore>();
}
@Override
public void setEnabled(Object evaluationContext)
{
fSelectedFiles.clear();
if (evaluationContext instanceof IEvaluationContext)
{
Object activePart = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_PART_NAME);
if (activePart instanceof IEditorPart)
{
IEditorInput editorInput = ((IEditorPart) activePart).getEditorInput();
if (editorInput instanceof IFileEditorInput)
{
fSelectedFiles.add(EFSUtils.getFileStore(((IFileEditorInput) editorInput).getFile()));
}
else if (editorInput instanceof IUniformFileStoreEditorInput)
{
try
{
fSelectedFiles.add(EFS.getStore(((IUniformFileStoreEditorInput) editorInput).getFileStore()
.toURI()));
}
catch (CoreException e)
{
// ignores
}
}
else if (editorInput instanceof IURIEditorInput)
{
try
{
fSelectedFiles.add(EFS.getStore(((IURIEditorInput) editorInput).getURI()));
}
catch (CoreException e)
{
// ignores
}
}
else if (editorInput instanceof IPathEditorInput)
{
try
{
fSelectedFiles.add(EFS.getStore(URIUtil.toURI(((IPathEditorInput) editorInput).getPath())));
}
catch (CoreException e)
{
// ignores
}
}
}
else
{
Object value = ((IEvaluationContext) evaluationContext)
.getVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME);
if (value instanceof ISelection)
{
ISelection selections = (ISelection) value;
if (!selections.isEmpty() && selections instanceof IStructuredSelection)
{
IFileStore fileStore;
Object[] elements = ((IStructuredSelection) selections).toArray();
for (Object element : elements)
{
if (element instanceof IAdaptable)
{
fileStore = Utils.getFileStore((IAdaptable) element);
if (fileStore != null)
{
fSelectedFiles.add(fileStore);
}
}
}
}
}
}
}
}
protected IFileStore[] getSelectedFiles()
{
return fSelectedFiles.toArray(new IFileStore[fSelectedFiles.size()]);
}
}