/** * 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; import java.net.URI; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.PlatformObject; import com.aptana.core.epl.IMemento; import com.aptana.core.logging.IdeLog; import com.aptana.ide.core.io.ConnectionPointType; import com.aptana.ide.core.io.ConnectionPointUtils; import com.aptana.ide.core.io.CoreIOPlugin; import com.aptana.ide.core.io.IConnectionPoint; /** * @author Max Stepanov */ /* package */class SiteConnection extends PlatformObject implements ISiteConnection { private static final String ELEMENT_NAME = "name"; //$NON-NLS-1$ private static final String ELEMENT_SOURCE = "source"; //$NON-NLS-1$ private static final String ELEMENT_DESTINATION = "destination"; //$NON-NLS-1$ private static final String ELEMENT_EXCLUDES = "excludes"; //$NON-NLS-1$ private static final String ELEMENT_PATH = "path"; //$NON-NLS-1$ private static final String ELEMENT_WILDCARD = "wildcard"; //$NON-NLS-1$ private String name; private IConnectionPoint sourceConnectionPoint; private IConnectionPoint destinationConnectionPoint; private List<Object> excludes = new ArrayList<Object>(); private boolean dirty; /** * */ /* package */SiteConnection() { } /** * @see com.aptana.ide.syncing.core.ISiteConnection#getName() */ public String getName() { return name; } /** * set site connection name * * @param name */ public void setName(String name) { this.name = name; notifyChanged(); } /** * @see com.aptana.ide.syncing.core.ISiteConnection#getSource() */ public IConnectionPoint getSource() { return sourceConnectionPoint; } /** * Sets the source connection point. * * @param source */ public void setSource(IConnectionPoint source) { this.sourceConnectionPoint = source; notifyChanged(); } /** * @see com.aptana.ide.syncing.core.ISiteConnection#getDestination() */ public IConnectionPoint getDestination() { return destinationConnectionPoint; } /** * Sets the destination connection point. * * @param destination */ public void setDestination(IConnectionPoint destination) { this.destinationConnectionPoint = destination; notifyChanged(); } /** * @see com.aptana.ide.syncing.core.ISiteConnection#excludes(org.eclipse.core.runtime.IPath) */ public boolean excludes(IPath path) { for (Object i : excludes) { if (i instanceof IPath) { if (path.equals(i)) { return true; } } } return false; } public void addExcludePath(IPath path) { if (!excludes.contains(path)) { excludes.add(path); } } public void addExcludeWildcard(String wildcard) { if (!excludes.contains(wildcard)) { excludes.add(wildcard); } } @Override public String toString() { StringBuilder text = new StringBuilder(); text.append('('); IConnectionPoint source = getSource(); if (source == null) { text.append(Messages.SiteConnection_LBL_NoSource); } else { ConnectionPointType type = CoreIOPlugin.getConnectionPointManager().getType(source); if (type != null) { text.append(type.getName()).append(':'); } text.append(source.getName()); } text.append(" <-> "); //$NON-NLS-1$ IConnectionPoint target = getDestination(); if (target == null) { text.append(Messages.SiteConnection_LBL_NoDestination); } else { ConnectionPointType type = CoreIOPlugin.getConnectionPointManager().getType(target); if (type != null) { text.append(type.getName()).append(':'); } text.append(target.getName()); } text.append(')'); return text.toString(); } protected void loadState(IMemento memento) { IMemento child = memento.getChild(ELEMENT_NAME); if (child != null) { name = child.getTextData(); } child = memento.getChild(ELEMENT_SOURCE); if (child != null) { URI uri = URI.create(child.getTextData()); sourceConnectionPoint = ConnectionPointUtils.findConnectionPoint(uri); if (sourceConnectionPoint == null) { IdeLog.logWarning(SyncingPlugin.getDefault(), "Failed to load source connection point from URI " + uri, //$NON-NLS-1$ IDebugScopes.DEBUG); } } child = memento.getChild(ELEMENT_DESTINATION); if (child != null) { URI uri = URI.create(child.getTextData()); destinationConnectionPoint = ConnectionPointUtils.findConnectionPoint(uri); if (destinationConnectionPoint == null) { IdeLog.logWarning(SyncingPlugin.getDefault(), "Failed to load destination connection point from URI " + uri, //$NON-NLS-1$ IDebugScopes.DEBUG); } } child = memento.getChild(ELEMENT_EXCLUDES); if (child != null) { for (IMemento i : child.getChildren(ELEMENT_PATH)) { excludes.add(Path.fromPortableString(i.getTextData())); } for (IMemento i : child.getChildren(ELEMENT_WILDCARD)) { excludes.add(i.getTextData()); } } } protected void saveState(IMemento memento) { memento.createChild(ELEMENT_NAME).putTextData(name); if (sourceConnectionPoint != null) { memento.createChild(ELEMENT_SOURCE).putTextData(sourceConnectionPoint.getRootURI().toString()); } if (destinationConnectionPoint != null) { memento.createChild(ELEMENT_DESTINATION).putTextData(destinationConnectionPoint.getRootURI().toString()); } if (!excludes.isEmpty()) { IMemento excludesMemento = memento.createChild(ELEMENT_EXCLUDES); for (Object i : excludes) { if (i instanceof IPath) { excludesMemento.createChild(ELEMENT_PATH).putTextData(((IPath) i).toPortableString()); } else if (i instanceof String) { excludesMemento.createChild(ELEMENT_PATH).putTextData((String) i); } } } } protected final void notifyChanged() { dirty = true; } /* package */final boolean isChanged() { try { return dirty; } finally { dirty = false; } } /* package */final boolean isValid() { return sourceConnectionPoint != null && destinationConnectionPoint != null; } }