package org.eclipse.team.internal.ccvs.core.connection;/* * (c) Copyright IBM Corp. 2000, 2001. * All Rights Reserved. */ import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;import org.eclipse.team.internal.ccvs.core.IConnectionMethod;import org.eclipse.team.internal.ccvs.core.IServerConnection;public class PServerConnectionMethod implements IConnectionMethod {	/**	 * @see IConnectionMethod#createConnection(ICVSRepositoryLocation, String)	 */	public IServerConnection createConnection(ICVSRepositoryLocation location, String password) {		return new PServerConnection(location, password);	}	/**	 * @see IConnectionMethod#getName()	 */	public String getName() {		return "pserver";//$NON-NLS-1$	}}