/**
* 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.core.old;
import java.io.IOException;
import java.io.InputStream;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileInfo;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import com.aptana.core.io.vfs.IExtendedFileStore;
import com.aptana.core.logging.IdeLog;
import com.aptana.ide.syncing.core.SyncingPlugin;
/**
* @author Kevin Lindsey
*/
public class VirtualFileSyncPair
{
public static final int Direction_None = 0;
public static final int Direction_ClientToServer = 1;
public static final int Direction_ServerToClient = 2;
private String _relativePath;
private IFileStore _sourceFile;
private IFileInfo _sourceFileInfo = null;
private IFileStore _destinationFile;
private IFileInfo _destinationFileInfo = null;
private int _syncState;
private int _syncDirection = Direction_None;
/**
* SyncItem
*
* @param sourceFile
* @param destinationFile
* @param relativePath
* @param syncState
*/
public VirtualFileSyncPair(IFileStore sourceFile, IFileStore destinationFile, String relativePath, int syncState)
{
this._sourceFile = sourceFile;
this._destinationFile = destinationFile;
this._relativePath = relativePath;
this._syncState = syncState;
}
/**
* getClientFile
*
* @return IVirtualFile
*/
public IFileStore getSourceFile()
{
return this._sourceFile;
}
/**
* getSourceFileInfo
*
* @return
*/
public IFileInfo getSourceFileInfo()
{
try
{
return getSourceFileInfo(null);
}
catch (CoreException e)
{
IdeLog.logError(SyncingPlugin.getDefault(), Messages.VirtualFileSyncPair_SourceFileInfoError, e);
return null;
}
}
/**
* getSourceFileInfo
*
* @return IVirtualFile
* @throws CoreException
*/
public IFileInfo getSourceFileInfo(IProgressMonitor monitor) throws CoreException
{
if (this._sourceFile == null)
{
return null;
}
if (this._sourceFileInfo == null)
{
this._sourceFileInfo = _sourceFile.fetchInfo(IExtendedFileStore.DETAILED, monitor);
}
return this._sourceFileInfo;
}
/**
* getClientInputStream
*
* @return InputStream
* @throws ConnectionException
* @throws VirtualFileManagerException
* @throws IOException
* @throws CoreException
*/
public InputStream getSourceInputStream() throws CoreException
{
InputStream result = null;
if (this._sourceFile != null && !this._sourceFile.fetchInfo().isDirectory())
{
result = this._sourceFile.openInputStream(EFS.NONE, null);
}
return result;
}
/**
* setClientFile
*
* @param sourceFile
*/
public void setSourceFile(IFileStore sourceFile)
{
this._sourceFile = sourceFile;
this._sourceFileInfo = null;
}
/**
* getServerFile
*
* @return IVirtualFile
*/
public IFileStore getDestinationFile()
{
return this._destinationFile;
}
/**
* getDestinationFileInfo
*
* @return
*/
public IFileInfo getDestinationFileInfo()
{
try
{
return getDestinationFileInfo(null);
}
catch (CoreException e)
{
IdeLog.logError(SyncingPlugin.getDefault(), Messages.VirtualFileSyncPair_DestFileInfoErrror, e);
return null;
}
}
/**
* getDestinationFileInfo
*
* @return IVirtualFile
* @throws CoreException
*/
public IFileInfo getDestinationFileInfo(IProgressMonitor monitor) throws CoreException
{
if (this._destinationFile == null)
{
return null;
}
if (this._destinationFileInfo == null)
{
this._destinationFileInfo = _destinationFile.fetchInfo(IExtendedFileStore.DETAILED, monitor);
}
return this._destinationFileInfo;
}
/**
* getServerInputStream
*
* @return InputStream
* @throws ConnectionException
* @throws VirtualFileManagerException
* @throws IOException
* @throws CoreException
*/
public InputStream getDestinationInputStream() throws CoreException
{
InputStream result = null;
if (this._destinationFile != null && !this._destinationFile.fetchInfo().isDirectory())
{
result = this._destinationFile.openInputStream(EFS.NONE, null);
}
return result;
}
/**
* setServerFile
*
* @param destinationFile
*/
public void setDestinationFile(IFileStore destinationFile)
{
this._destinationFile = destinationFile;
this._destinationFileInfo = null;
}
/**
* getRelativePath
*
* @return String
*/
public String getRelativePath()
{
return this._relativePath;
}
/**
* getSyncState
*
* @return int
*/
public int getSyncState()
{
return this._syncState;
}
/**
* setSyncState
*
* @param syncState
*/
public void setSyncState(int syncState)
{
this._syncState = syncState;
}
/**
* getSyncDirection
*
* @return int
*/
public int getSyncDirection()
{
return _syncDirection;
}
/**
* @param direction
*/
public void setSyncDirection(int direction)
{
this._syncDirection = direction;
}
/**
* Am I a folder?
*
* @return boolean
*/
public boolean isDirectory()
{
if (getSyncState() == SyncState.IncompatibleFileTypes)
{
return false;
}
if (getSourceFile() != null && getSourceFile().fetchInfo().isDirectory())
{
return true;
}
return getDestinationFile() != null && getDestinationFile().fetchInfo().isDirectory();
}
/**
* Returns a nicely formatted version of the file pair
*/
public String toString()
{
String text = ""; //$NON-NLS-1$
text += (this._sourceFile != null) ? this._sourceFile.toString() : "null"; //$NON-NLS-1$
text += " <-> "; //$NON-NLS-1$
text += (this._destinationFile != null) ? this._destinationFile.toString() : "null"; //$NON-NLS-1$
return text;
}
}