/**
* 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.navigator;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.PlatformObject;
import com.aptana.ide.core.io.IConnectionPoint;
import com.aptana.ide.syncing.core.ISiteConnection;
/**
* @author Michael Xia (mxia@aptana.com)
*/
public final class ProjectSiteConnection extends PlatformObject
{
private final IProject project;
private final ISiteConnection siteConnection;
private int hashCode;
public ProjectSiteConnection(IProject project, ISiteConnection siteConnection)
{
this.project = project;
this.siteConnection = siteConnection;
}
public IProject getProject()
{
return project;
}
public ISiteConnection getSiteConnection()
{
return siteConnection;
}
public boolean canDisconnect()
{
IConnectionPoint connectionPoint = siteConnection.getDestination();
return (connectionPoint == null) ? false : connectionPoint.canDisconnect();
}
@SuppressWarnings("rawtypes")
public Object getAdapter(Class adapter)
{
if (adapter == IProject.class)
{
return project;
}
else if (adapter == ISiteConnection.class)
{
return siteConnection;
}
else if (adapter == IConnectionPoint.class)
{
return siteConnection.getDestination();
}
else if (adapter == IFileStore.class)
{
IConnectionPoint destination = siteConnection.getDestination();
try
{
return (destination == null) ? null : destination.getRoot();
}
catch (CoreException e)
{
// falls through on error
}
}
return super.getAdapter(adapter);
}
@Override
public int hashCode()
{
if (hashCode == 0)
{
hashCode = 7;
hashCode = 31 * hashCode + project.hashCode();
hashCode = 31 * hashCode + siteConnection.hashCode();
}
return hashCode;
}
@Override
public boolean equals(Object o)
{
if (!(o instanceof ProjectSiteConnection))
{
return false;
}
ProjectSiteConnection connection = (ProjectSiteConnection) o;
return project == connection.project && siteConnection == connection.siteConnection;
}
@Override
public String toString()
{
return getSiteConnection().toString();
}
}