Return-Path: <cvs-return-271-tigrisq-archive=mail-subclipse=cvs=tigris.org=tigris.org@subclipse.tigris.org>
Delivered-To: tigrisq-archive=mail-subclipse=cvs=tigris.org@tigris.org
Received: (qmail 22583 invoked by uid 5302); 29 Oct 2003 05:11:54 -0000
Mailing-List: contact cvs-help@subclipse.tigris.org; run by ezmlm
Precedence: bulk
X-No-Archive: yes
list-help: <mailto:cvs-help@subclipse.tigris.org>
list-unsubscribe: <mailto:cvs-unsubscribe@subclipse.tigris.org>
list-post: <mailto:cvs@subclipse.tigris.org>
Reply-To: cvs@subclipse.tigris.org
Delivered-To: mailing list cvs@subclipse.tigris.org
Received: (qmail 22569 invoked from network); 29 Oct 2003 05:11:52 -0000
Date: Tue, 28 Oct 2003 23:07:25 -0600
Message-Id: <200310290507.h9T57Pp14847@svn.collab.net>
X-Authentication-Warning: svn.collab.net: svn set sender to schatz@tigris.org using -f
From: schatz@tigris.org
To: cvs@subclipse.tigris.org
Subject:  subclipse commit: rev 259 - trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline

Author: schatz
Date: Tue Oct 28 23:07:21 2003
New Revision: 259

Removed:
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineAuthenticationException.java
Modified:
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineClientAdapter.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineDirEntry.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineException.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineInfo.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineLogMessage.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineProperty.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineRemoteDirEntry.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineStatus.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineStatusUnversioned.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CommandLine.java
   trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/Helper.java
Log:
Added javadoc code. Made classes, constructors, and methods package private. Changed exec in CommandLine to run execVoid() for methods that do not return anything.

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineClientAdapter.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineClientAdapter.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineClientAdapter.java	Tue Oct 28 23:07:21 2003
@@ -60,6 +60,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -79,15 +80,20 @@
 import org.tigris.subversion.svnclientadapter.SVNUrl;
 
 /**
- * @author philip schatz
+ * <p>
+ * Implements a <tt>ISVNClientAdapter</tt> using the
+ * Command line client. This expects the <tt>svn</tt>
+ * executible to be in the path.</p>
+ * 
+ * @author Philip Schatz (schatz at tigris)
  */
 public class CmdLineClientAdapter implements ISVNClientAdapter {
 
-	//PHIL this expects svn to be in the path. should be able to set it in Window, Preferences
+	//Fields
 	private CommandLine _cmd = new CommandLine("svn");
 	private List _listeners = new LinkedList();
 
-
+	//Methods
     public static boolean isAvailable() {
         // this will need to be fixed when path to svn will be customizable 
         CommandLine cmd = new CommandLine("svn");
@@ -118,18 +124,13 @@
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#getSingleStatus(java.io.File)
 	 */
 	public ISVNStatus getSingleStatus(File file) throws SVNClientException {
-		String path = null;
 		try {
-			path = file.getCanonicalPath();
+			String path = toString(file);
 			String infoLine = _cmd.info(path);
-			String statusLine = _cmd.status(path, false);			
+			String statusLine = _cmd.status(path, false);
 			return new CmdLineStatus(statusLine, infoLine);
-		} catch (IOException e) {
-			throw SVNClientException.wrapException(e);
 		} catch (CmdLineException e) {
-			if (e
-				.getMessage()
-				.startsWith("svn: Path is not a working copy directory")) {
+			if (e.getMessage().startsWith("svn: Path is not a working copy directory")) {
 				return new CmdLineStatusUnversioned();
 			}
 			throw SVNClientException.wrapException(e);
@@ -150,12 +151,10 @@
 			StringTokenizer st = new StringTokenizer(listLine, Helper.NEWLINE);
 			while (st.hasMoreTokens()) {
 				String dirLine = st.nextToken();
-				CmdLineRemoteDirEntry entry =
-					new CmdLineRemoteDirEntry(toString(svnUrl), dirLine);
+				CmdLineRemoteDirEntry entry = new CmdLineRemoteDirEntry(toString(svnUrl), dirLine);
 				entries.add(entry);
 			}
-			return (ISVNDirEntry[]) entries.toArray(
-				new ISVNDirEntry[entries.size()]);
+			return (ISVNDirEntry[]) entries.toArray(new ISVNDirEntry[entries.size()]);
 		} catch (CmdLineException e) {
 			throw SVNClientException.wrapException(e);
 		}
@@ -185,21 +184,19 @@
 	public void revert(File arg0, boolean arg1) throws SVNClientException {
 		try {
 			String changedFiles = _cmd.revert(arg0.getCanonicalPath(), arg1);
-			refreshChangedResources(changedFiles);			
+			refreshChangedResources(changedFiles);
 		} catch (IOException e) {
 			throw SVNClientException.wrapException(e);
-		}
-		catch (CmdLineException e) {
+		} catch (CmdLineException e) {
 			throw SVNClientException.wrapException(e);
 		}
-				
+
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#getContent(java.net.SVNUrl, org.tigris.subversion.subclipse.client.ISVNRevision)
 	 */
-	public InputStream getContent(SVNUrl arg0, SVNRevision arg1)
-		throws SVNClientException {
+	public InputStream getContent(SVNUrl arg0, SVNRevision arg1) throws SVNClientException {
 
         try {
 		  InputStream content = _cmd.cat(toString(arg0), toString(arg1));
@@ -232,10 +229,7 @@
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#getLogMessages(java.net.URL, org.tigris.subversion.subclipse.client.ISVNRevision, org.tigris.subversion.subclipse.client.ISVNRevision)
 	 */
-	public ISVNLogMessage[] getLogMessages(
-		SVNUrl arg0,
-		SVNRevision arg1,
-		SVNRevision arg2)
+	public ISVNLogMessage[] getLogMessages(SVNUrl arg0, SVNRevision arg1, SVNRevision arg2)
 		throws SVNClientException {
 		List tempLogs = new java.util.LinkedList();
 		String revRange = arg1.toString() + ":" + arg2.toString();
@@ -249,8 +243,7 @@
 				tempLogs.add(new CmdLineLogMessage(st));
 			}
 
-			return (ISVNLogMessage[]) tempLogs.toArray(
-				new ISVNLogMessage[tempLogs.size()]);
+			return (ISVNLogMessage[]) tempLogs.toArray(new ISVNLogMessage[tempLogs.size()]);
 		} catch (CmdLineException e) {
 			throw SVNClientException.wrapException(e);
 		}
@@ -304,19 +297,11 @@
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#move(java.net.URL, java.net.URL, java.lang.String, org.tigris.subversion.subclipse.client.ISVNRevision)
 	 */
-	public void move(
-		SVNUrl url,
-		SVNUrl destUrl,
-		String message,
-		SVNRevision revision)
+	public void move(SVNUrl url, SVNUrl destUrl, String message, SVNRevision revision)
 		throws SVNClientException {
 		try {
 			String changedResources =
-				_cmd.move(
-					url.toString(),
-					destUrl.toString(),
-					message,
-					revision.toString());
+				_cmd.move(url.toString(), destUrl.toString(), message, revision.toString());
 			refreshChangedResources(changedResources);
 		} catch (CmdLineException e) {
 			SVNClientException.wrapException(e);
@@ -326,15 +311,10 @@
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#move(java.io.File, java.io.File, boolean)
 	 */
-	public void move(File file, File file2, boolean b)
-		throws SVNClientException {
+	public void move(File file, File file2, boolean b) throws SVNClientException {
 		try {
 			String changedResources =
-				_cmd.move(
-					file.getCanonicalPath(),
-					file2.getCanonicalPath(),
-					null,
-					null);
+				_cmd.move(file.getCanonicalPath(), file2.getCanonicalPath(), null, null);
 			refreshChangedResources(changedResources);
 		} catch (IOException e) {
 			throw SVNClientException.wrapException(e);
@@ -386,7 +366,7 @@
 	public void addFile(File file) throws SVNClientException {
 		try {
 			String changedResources = _cmd.add(file.getCanonicalPath(), false);
-			refreshChangedResources(changedResources);			
+			refreshChangedResources(changedResources);
 		} catch (IOException e) {
 			throw SVNClientException.wrapException(e);
 		} catch (CmdLineException e) {
@@ -402,8 +382,7 @@
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#commit(java.io.File[], java.lang.String, boolean)
 	 */
-	public long commit(File[] parents, String comment, boolean b)
-		throws SVNClientException {
+	public long commit(File[] parents, String comment, boolean b) throws SVNClientException {
 		StringBuffer sb = new StringBuffer();
 		for (int i = 0; i < parents.length; i++) {
 			sb.append(parents[i].toString());
@@ -415,16 +394,13 @@
 		} catch (CmdLineException e) {
 			if ("".equals(e.getMessage()))
 				return SVNRevision.SVN_INVALID_REVNUM;
-			if (e
-				.getMessage()
-				.startsWith("svn: Attempted to lock an already-locked dir")) {
+			if (e.getMessage().startsWith("svn: Attempted to lock an already-locked dir")) {
 				//PHIL is this the best way to handle pending locks? (ie caused by "svn cp")
 				//loop through up to 5 sec, waiting for locks
 				//to be removed.
 				for (int i = 0; i < 50; i++) {
 					try {
-						String changedResources =
-							_cmd.checkin(sb.toString(), comment);
+						String changedResources = _cmd.checkin(sb.toString(), comment);
 						return refreshChangedResources(changedResources);
 					} catch (CmdLineException e1) {
 						try {
@@ -442,11 +418,9 @@
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#update(java.io.File, org.tigris.subversion.subclipse.client.ISVNRevision, boolean)
 	 */
-	public void update(File file, SVNRevision revision, boolean b)
-		throws SVNClientException {
+	public void update(File file, SVNRevision revision, boolean b) throws SVNClientException {
 		try {
-			String changedResources =
-				_cmd.update(file.getCanonicalPath(), revision.toString());
+			String changedResources = _cmd.update(file.getCanonicalPath(), revision.toString());
 			refreshChangedResources(changedResources);
 		} catch (IOException e) {
 			throw SVNClientException.wrapException(e);
@@ -458,16 +432,11 @@
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#checkout(java.net.URL, java.io.File, org.tigris.subversion.subclipse.client.ISVNRevision, boolean)
 	 */
-	public void checkout(
-		SVNUrl url,
-		File destPath,
-		SVNRevision revision,
-		boolean b)
+	public void checkout(SVNUrl url, File destPath, SVNRevision revision, boolean b)
 		throws SVNClientException {
 		try {
 			String dest = destPath.getCanonicalPath();
-			String changedResources =
-				_cmd.checkout(url.toString(), dest, revision.toString(), b);
+			String changedResources = _cmd.checkout(url.toString(), dest, revision.toString(), b);
 			refreshChangedResources(changedResources);
 
 		} catch (CmdLineException e) {
@@ -480,52 +449,31 @@
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#getStatusRecursively(java.io.File,boolean)
 	 */
-	public ISVNStatus[] getStatusRecursively(File file, boolean getAll)
-		throws SVNClientException {
+	public ISVNStatus[] getStatusRecursively(File file, boolean getAll) throws SVNClientException {
 		String path = null;
 		List statuses = new LinkedList();
 		try {
 			path = file.getCanonicalPath();
 			String statusLines = _cmd.recursiveStatus(path);
-			StringTokenizer st =
-				new StringTokenizer(statusLines, Helper.NEWLINE);
+			StringTokenizer st = new StringTokenizer(statusLines, Helper.NEWLINE);
 			while (st.hasMoreTokens()) {
 				String statusLine = st.nextToken();
 				String infoLine = _cmd.info(statusLine.substring(7));
-				CmdLineStatus status =
-					new CmdLineStatus(statusLine, infoLine);
+				CmdLineStatus status = new CmdLineStatus(statusLine, infoLine);
 				statuses.add(status);
 			}
 
-			return (ISVNStatus[]) statuses.toArray(
-				new ISVNStatus[statuses.size()]);
+			return (ISVNStatus[]) statuses.toArray(new ISVNStatus[statuses.size()]);
 		} catch (IOException e) {
 			throw SVNClientException.wrapException(e);
 		} catch (CmdLineException e) {
-			if (e
-				.getMessage()
-				.startsWith("svn: Path is not a working copy directory")) {
+			if (e.getMessage().startsWith("svn: Path is not a working copy directory")) {
 				return new ISVNStatus[0];
 			}
 			throw SVNClientException.wrapException(e);
 		}
 	}
 
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#getRevision(java.lang.String)
-	 */
-	public SVNRevision getRevision(String revName) {
-		// TODO : implement
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#getRevision(long)
-	 */
-	public SVNRevision.Number getRevision(long revNum) {
-		return new SVNRevision.Number(revNum);
-	}
-
 	private void notifyListenersOfChange(String path, SVNNodeKind type) {
 		for (Iterator i = _listeners.iterator(); i.hasNext();) {
 			ISVNNotifyListener listener = (ISVNNotifyListener) i.next();
@@ -534,8 +482,7 @@
 	}
 
 	private long refreshChangedResources(String changedResourcesList) {
-		StringTokenizer st =
-			new StringTokenizer(changedResourcesList, Helper.NEWLINE);
+		StringTokenizer st = new StringTokenizer(changedResourcesList, Helper.NEWLINE);
 		while (st.hasMoreTokens()) {
 			String line = st.nextToken();
 
@@ -558,9 +505,7 @@
 			//check to see if this is a file or a dir.
 			File f = new File(fileName);
 
-			notifyListenersOfChange(
-				fileName,
-				f.isDirectory() ? SVNNodeKind.DIR : SVNNodeKind.FILE);
+			notifyListenersOfChange(fileName, f.isDirectory() ? SVNNodeKind.DIR : SVNNodeKind.FILE);
 		}
 		return SVNRevision.SVN_INVALID_REVNUM;
 	}
@@ -615,8 +560,7 @@
 			recurse);
 	}
 
-	public void diff(File path, File outFile, boolean recurse)
-		throws SVNClientException {
+	public void diff(File path, File outFile, boolean recurse) throws SVNClientException {
 		diff(path, null, null, null, outFile, recurse);
 	}
 	/**
@@ -630,13 +574,7 @@
 		File outFile,
 		boolean recurse)
 		throws SVNClientException {
-		diff(
-			toString(oldUrl),
-			oldUrlRevision,
-			toString(newUrl),
-			newUrlRevision,
-			outFile,
-			recurse);
+		diff(toString(oldUrl), oldUrlRevision, toString(newUrl), newUrlRevision, outFile, recurse);
 	}
 
 	public void diff(
@@ -647,15 +585,13 @@
 		boolean recurse)
 		throws SVNClientException {
 		// TODO : test
-		diff(url, oldUrlRevision, url, newUrlRevision, outFile, recurse);        
+		diff(url, oldUrlRevision, url, newUrlRevision, outFile, recurse);
 	}
 
-	public ISVNProperty propertyGet(File path, String propertyName)
-		throws SVNClientException {
+	public ISVNProperty propertyGet(File path, String propertyName) throws SVNClientException {
 		try {
 			String pathString = toString(path);
-			InputStream valueAndData =
-				_cmd.propget(toString(path), propertyName);
+			InputStream valueAndData = _cmd.propget(toString(path), propertyName);
 
 			byte[] bytes = streamToByteArray(valueAndData, true);
 
@@ -676,21 +612,49 @@
 	}
 
 	public List getIgnoredPatterns(File path) throws SVNClientException {
-		// TODO : implement
-		return null;
+		if (!path.isDirectory())
+			return null;
+		List list = new ArrayList();
+		ISVNProperty pd = propertyGet(path, "svn:ignore");
+		if (pd == null)
+			return list;
+		String patterns = pd.getValue();
+		StringTokenizer st = new StringTokenizer(patterns, "\n");
+		while (st.hasMoreTokens()) {
+			String entry = st.nextToken();
+			if (!entry.equals(""))
+				list.add(entry);
+		}
+		return list;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientAdapter#addToIgnoredPatterns(java.io.File, java.lang.String)
 	 */
-	public void addToIgnoredPatterns(File file, String pattern)
-		throws SVNClientException {
-		// TODO : implement
+	public void addToIgnoredPatterns(File file, String pattern) throws SVNClientException {
+		List patterns = getIgnoredPatterns(file);
+		if (patterns == null) // not a directory
+			return;
+
+		// verify that the pattern has not already been added
+		for (Iterator it = patterns.iterator(); it.hasNext();) {
+			if (((String) it.next()).equals(pattern))
+				return; // already added
+		}
+
+		patterns.add(pattern);
+		setIgnoredPatterns(file, patterns);
 	}
 
-	public void setIgnoredPatterns(File path, List patterns)
-		throws SVNClientException {
-		// TODO : implement
+	public void setIgnoredPatterns(File path, List patterns) throws SVNClientException {
+		if (!path.isDirectory())
+			return;
+		String value = "";
+		for (Iterator it = patterns.iterator(); it.hasNext();) {
+			String pattern = (String) it.next();
+			value = value + '\n' + pattern;
+		}
+		propertySet(path, "svn:ignore", value, false);
 	}
 
 	public void mkdir(File file) throws SVNClientException {
@@ -710,34 +674,21 @@
 		}
 	}
 
-	public void doImport(
-		File path,
-		SVNUrl url,
-		String message,
-		boolean recurse)
+	public void doImport(File path, SVNUrl url, String message, boolean recurse)
 		throws SVNClientException {
 		// TODO : implement        
 	}
 
-	public void doExport(
-		SVNUrl srcUrl,
-		File destPath,
-		SVNRevision revision,
-		boolean force)
+	public void doExport(SVNUrl srcUrl, File destPath, SVNRevision revision, boolean force)
 		throws SVNClientException {
 		try {
-			_cmd.export(
-				toString(srcUrl),
-				toString(destPath),
-				toString(revision),
-				force);
+			_cmd.export(toString(srcUrl), toString(destPath), toString(revision), force);
 		} catch (CmdLineException e) {
 			throw SVNClientException.wrapException(e);
 		}
 	}
 
-	public void doExport(File srcPath, File destPath, boolean force)
-		throws SVNClientException {
+	public void doExport(File srcPath, File destPath, boolean force) throws SVNClientException {
 		// TODO : test
 		try {
 			_cmd.export(toString(srcPath), toString(destPath), null, force);
@@ -746,25 +697,16 @@
 		}
 	}
 
-	public void propertySet(
-		File path,
-		String propertyName,
-		File propertyFile,
-		boolean recurse)
+	public void propertySet(File path, String propertyName, File propertyFile, boolean recurse)
 		throws SVNClientException, IOException {
 		try {
-			_cmd.propsetFile(
-				propertyName,
-				toString(propertyFile),
-				toString(path),
-				recurse);
+			_cmd.propsetFile(propertyName, toString(propertyFile), toString(path), recurse);
 		} catch (CmdLineException e) {
 			throw SVNClientException.wrapException(e);
 		}
 	}
 
-	public void copy(File srcPath, SVNUrl destUrl, String message)
-		throws SVNClientException {
+	public void copy(File srcPath, SVNUrl destUrl, String message) throws SVNClientException {
 		// TODO : implement
 	}
 
@@ -774,8 +716,7 @@
 		SVNRevision revisionEnd)
 		throws SVNClientException {
 		List tempLogs = new java.util.LinkedList();
-		String revRange =
-			revisionStart.toString() + ":" + revisionEnd.toString();
+		String revRange = revisionStart.toString() + ":" + revisionEnd.toString();
 
 		try {
 			String messages = _cmd.log(path.toString(), revRange);
@@ -786,8 +727,7 @@
 				tempLogs.add(new CmdLineLogMessage(st));
 			}
 
-			return (ISVNLogMessage[]) tempLogs.toArray(
-				new ISVNLogMessage[tempLogs.size()]);
+			return (ISVNLogMessage[]) tempLogs.toArray(new ISVNLogMessage[tempLogs.size()]);
 		} catch (CmdLineException e) {
 			throw SVNClientException.wrapException(e);
 		}
@@ -807,17 +747,12 @@
         } catch (CmdLineException e) {
             SVNClientException.wrapException(e);
         }              
-		// TODO : test
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.svnclientadapter.ISVNClientAdapter#propertySet(java.io.File, java.lang.String, java.lang.String, boolean)
 	 */
-	public void propertySet(
-		File path,
-		String propertyName,
-		String propertyValue,
-		boolean recurse)
+	public void propertySet(File path, String propertyName, String propertyValue, boolean recurse)
 		throws SVNClientException {
 		try {
 			_cmd.propset(propertyName, propertyValue, toString(path), recurse);
@@ -838,8 +773,7 @@
 		return (revision == null) ? null : revision.toString();
 	}
 
-	private static void streamToFile(InputStream stream, File outFile)
-		throws IOException {
+	private static void streamToFile(InputStream stream, File outFile) throws IOException {
 		int tempByte;
 		try {
 			FileOutputStream os = new FileOutputStream(outFile);
@@ -853,9 +787,7 @@
 		}
 	}
 
-	private static byte[] streamToByteArray(
-		InputStream stream,
-		boolean removeTrailing)
+	private static byte[] streamToByteArray(InputStream stream, boolean removeTrailing)
 		throws IOException {
 		//read byte-by-byte and put it in a vector.
 		//then take the vector and fill a byteArray.

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineDirEntry.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineDirEntry.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineDirEntry.java	Tue Oct 28 23:07:21 2003
@@ -57,32 +57,27 @@
 import org.tigris.subversion.svnclientadapter.ISVNDirEntry;
 
 /**
+ * <p>
+ * Implements a DirEntry located locally using the
+ * "svn list" command.</p>
  * 
- * @author philip schatz
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CmdLineDirEntry extends CmdLineInfo implements ISVNDirEntry {
+class CmdLineDirEntry extends CmdLineInfo implements ISVNDirEntry {
 
-	/**
-	 * @param line
-	 */
-	public CmdLineDirEntry(String line) {
+	//Constructors
+	CmdLineDirEntry(String line) {
 		super(line);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNDirEntry#getHasProps()
-	 */
+	//Methods
 	public boolean getHasProps() {
 		//TODO unhardcode this
 		return false;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.svnclientadapter.ISVNDirEntry#getSize()
-	 */
 	public long getSize() {
 		// TODO Auto-generated method stub
 		return 0;
 	}
-
 }

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineException.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineException.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineException.java	Tue Oct 28 23:07:21 2003
@@ -57,26 +57,29 @@
 import java.lang.reflect.InvocationTargetException;
 
 /**
- * @author phil
- *
+ * <p>
+ * An exception that wraps the "svn" error message.</p>
+ * 
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CmdLineException extends Exception {
+class CmdLineException extends Exception {
 
-	public CmdLineException() {
+	//Constructors
+	CmdLineException() {
 	}
 
-	public CmdLineException(String message) {
+	CmdLineException(String message) {
 		super(message);
 	}
 
-	public CmdLineException(Throwable cause) {
+	CmdLineException(Throwable cause) {
 		super(cause);
 	}
 
 	/*
-	 * Static helper methods for creating exceptions
+	 * Static helper method for creating exceptions
 	 */
-	public static CmdLineException wrapException(Exception e) {
+	static CmdLineException wrapException(Exception e) {
 		Throwable t = e;
 		if (e instanceof InvocationTargetException) {
 			Throwable target =
@@ -88,5 +91,4 @@
 		}
 		return new CmdLineException(e);
 	}
-
 }

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineInfo.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineInfo.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineInfo.java	Tue Oct 28 23:07:21 2003
@@ -64,10 +64,13 @@
 import org.tigris.subversion.svnclientadapter.SVNUrl;
 
 /**
- * Not the most "efficient" implementation, but it works.
- * @author philip schatz
+ * <p>
+ * <strong>NOTE:</strong> Not the most "efficient"
+ * implementation, but it works.</p>
+ * 
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CmdLineInfo {
+class CmdLineInfo {
 
 	//"Constants"
 	private static final String KEY_PATH = "Path";
@@ -77,46 +80,28 @@
 	private static final String KEY_LASTCHANGEDAUTHOR = "Last Changed Author";
 	private static final String KEY_LASTCHANGEDREV = "Last Changed Rev";
 	private static final String KEY_LASTCHANGEDDATE = "Last Changed Date";
-	//private static final String KEY_NAME = "Name";
-	//private static final String KEY_SCHEDULE = "Schedule";
-	//private static final String KEY_TEXTLASTUPDATED = "Text Last Updated";
-	//private static final String KEY_PROPERTIESLASTUPDATED = "Properties Last Updated";
-	//private static final String KEY_CHECKSUM = "Checksum";
 
 	//Fields
 	private Map infoMap = new HashMap();
 
-	/**
-	 * 
-	 */
+	//Constructors
 	CmdLineInfo(String infoString) {
 		load(infoString);
 	}
 
-	/**
-	 * @return
-	 */
+	//Methods
 	public Date getLastChangedDate() {
 		return Helper.toDate(get(KEY_LASTCHANGEDDATE));
 	}
 
-	/**
-	 * @return
-	 */
 	public SVNRevision.Number getLastChangedRevision() {
 		return Helper.toRevNum(get(KEY_LASTCHANGEDREV));
 	}
 
-	/**
-	 * @return
-	 */
 	public String getLastCommitAuthor() {
 		return get(KEY_LASTCHANGEDAUTHOR);
 	}
 
-	/**
-	 * @return
-	 */
 	public SVNNodeKind getNodeKind() {
 		if ("directory".equals(get(KEY_NODEKIND)))
 			return SVNNodeKind.DIR;
@@ -125,9 +110,6 @@
 		return SVNNodeKind.UNKNOWN;
 	}
 
-	/**
-	 * @return
-	 */
 	public String getPath() {
 		return get(KEY_PATH);
 	}
@@ -147,8 +129,10 @@
 
 	private void load(String infoString) {
 		StringTokenizer st = new StringTokenizer(infoString, Helper.NEWLINE);
-		//First, go through and take each line and throw it into a map with the key being the text to the left of the colon, and value being to the right.
-
+		//First, go through and take each line and throw
+		// it into a map with the key being the text to
+		// the left of the colon, and value being to the
+		// right.
 		while (st.hasMoreTokens()) {
 			String line = st.nextToken();
 			int middle = line.indexOf(':');
@@ -156,7 +140,5 @@
 			String value = line.substring(middle + 2);
 			infoMap.put(key, value);
 		}
-
 	}
-
 }

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineLogMessage.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineLogMessage.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineLogMessage.java	Tue Oct 28 23:07:21 2003
@@ -61,23 +61,17 @@
 import org.tigris.subversion.svnclientadapter.SVNRevision;
 
 /**
+ * <p>Implements a Log message using "svn log".</p>
  * 
- * @author philip schatz
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CmdLineLogMessage implements ISVNLogMessage {
+class CmdLineLogMessage implements ISVNLogMessage {
 
 	private SVNRevision.Number rev;
 	private String author;
 	private Date date;
 	private String msg;
 
-	/**
-	 * ------------------------------------------------------------------------
-	 * rev 49:  phil | 2003-06-30 00:14:58 -0500 (Mon, 30 Jun 2003) | 1 line
-	 *
-	 * Initial version of jabclipse added to svn. Still has hardcoded JID
-	 * ------------------------------------------------------------------------
-	 */
 	CmdLineLogMessage(StringTokenizer st) {
 		//NOTE: the leading dashes are ommitted by ClientAdapter.
 		
@@ -152,5 +146,4 @@
 	public String getMessage() {
 		return msg;
 	}
-
 }

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineProperty.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineProperty.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineProperty.java	Tue Oct 28 23:07:21 2003
@@ -57,51 +57,46 @@
 import org.tigris.subversion.svnclientadapter.ISVNProperty;
 
 /**
- * @author Philip Schatz <a href="mailto:schatz@tigris.org">schatz@tigris.org</a>
- * @since Oct 13, 2003
- * 
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CmdLineProperty implements ISVNProperty {
-	private String _Name;
-	private String _Value;
-	private String _Path;
-	private byte[] _Data;
+class CmdLineProperty implements ISVNProperty {
+	private String propName;
+	private String propValue;
+	private String path;
+	private byte[] data;
 
-	/**
-	 * 
-	 */
-	public CmdLineProperty(String name, String value, String path, byte[] data) {
-		_Name = name;
-		_Value = value;
-		_Path = path;
-		_Data = data;
+	CmdLineProperty(String name, String value, String path, byte[] data) {
+		this.propName = name;
+		this.propValue = value;
+		this.path = path;
+		this.data = data;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.svnclientadapter.ISVNProperty#getName()
 	 */
 	public String getName() {
-		return _Name;
+		return propName;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.svnclientadapter.ISVNProperty#getValue()
 	 */
 	public String getValue() {
-		return _Value;
+		return propValue;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.svnclientadapter.ISVNProperty#getPath()
 	 */
 	public String getPath() {
-		return _Path;
+		return path;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.svnclientadapter.ISVNProperty#getData()
 	 */
 	public byte[] getData() {
-		return _Data;
+		return data;
 	}
 }

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineRemoteDirEntry.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineRemoteDirEntry.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineRemoteDirEntry.java	Tue Oct 28 23:07:21 2003
@@ -67,11 +67,15 @@
 import org.tigris.subversion.svnclientadapter.SVNRevision;
 
 /**
+ * <p>
+ * Implements a DirEntry on a remote location using the
+ * "svn list" command.</p>
  * 
- * @author philip schatz
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CmdLineRemoteDirEntry implements ISVNDirEntry {
+class CmdLineRemoteDirEntry implements ISVNDirEntry {
 
+	//Fields
 	private static DateFormat df1 = new SimpleDateFormat("MMM dd hh:mm", Locale.US);
     private static DateFormat df2 = new SimpleDateFormat("MMM dd  yyyy", Locale.US);
 
@@ -82,10 +86,8 @@
 	private String lastCommitAuthor;
 	private Date lastChangedDate;
 
-	/**
-	 * @param line
-	 */
-	public CmdLineRemoteDirEntry(String baseUrl, String line) {
+	//Constructors
+	CmdLineRemoteDirEntry(String baseUrl, String line) {
 
         // see ls-cmd.c for the format used
         
@@ -121,6 +123,7 @@
 		}
 	}
 
+	//Methods
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNDirEntry#getHasProps()
 	 */

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineStatus.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineStatus.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineStatus.java	Tue Oct 28 23:07:21 2003
@@ -61,85 +61,65 @@
 import org.tigris.subversion.svnclientadapter.SVNNodeKind;
 
 /**
- * @author Phil
+ * <p>
+ * Implements a ISVNStatus using "svn status" and "svn info".</p>
+ * 
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CmdLineStatus extends CmdLineInfo implements ISVNStatus {
+class CmdLineStatus extends CmdLineInfo implements ISVNStatus {
 
-	private char flag = '?';
+	//"Constants"
 	public static final int STATUS_FILE_WIDTH = 40;
-	
-	/*
-	 * The first five columns in the output are each one character wide:
-    First column: Says if item was added, deleted, or otherwise changed
-      ' ' no modifications
-      'A' Added
-      'D' Deleted
-      'M' Modified
-      'C' Conflicted
-      'I' Ignored
-      'X' item is unversioned, but is used by an externals definition
-      '?' item is not under revision control
-      '!' item is missing (removed by non-svn command) or incomplete
-      '~' versioned item obstructed by some item of a different kind
-    Second column: Modifications of a file's or directory's properties
-      ' ' no modifications
-      'M' Modified
-      'C' Conflicted
-    Third column: Whether the working copy directory is locked
-      ' ' not locked
-      'L' locked
-    Fourth column: Scheduled commit will contain addition-with-history
-      ' ' no history scheduled with commit
-      '+' history scheduled with commit
-    Fifth column: Whether the item is switched relative to its parent
-      ' ' normal
-      'S' switched
-    The out-of-date information appears in the eighth column
-      '*' a newer revision exists on the server
-      ' ' the working copy is up to date
 
-	 *
-	 */
+	//Fields
+	private char flag = '?';
+	private char history;
 
-	public CmdLineStatus(String statusLine, String infoLine) {
+	/**
+	 * <p>
+	 * Creates a new status. Takes in 2 lines, one of the
+	 * "svn status" information, and one is the "svn info"
+	 * line.</p>
+	 * 
+	 * @param statusLine Generated from "svn status"
+	 * @param infoLine Generated from "svn info"
+	 */
+	CmdLineStatus(String statusLine, String infoLine) {
 		super(infoLine);
 		setStatus(statusLine);
 	}
 
+	//Methods
 	private void setStatus(String statusLine) {
 
 		// if the status is for a DIR then find the single line
-		if(getNodeKind() == SVNNodeKind.DIR){
+		if (getNodeKind() == SVNNodeKind.DIR) {
 			StringTokenizer st = new StringTokenizer(statusLine, Helper.NEWLINE);
 
 			while (st.hasMoreTokens()) {
 				String line = st.nextToken();
-				
+
 				String fileName = line.substring(STATUS_FILE_WIDTH, line.length());
 				File file1 = new File(fileName);
-				File file2 = new File(getPath());								
-				
-				if(file1.equals(file2)){
+				File file2 = new File(getPath());
+
+				if (file1.equals(file2)) {
 					statusLine = line;
 					break;
 				}
-			}					
+			}
 		}
 
 		char[] l = statusLine.toCharArray();
 		flag = l[0];
+		history = l[3];
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isIgnored()
 	 */
 	public boolean isIgnored() {
-		String path = super.getPath();
-		if (path == null)
-			return true;
-
-		//TODO hardcoded .svn
-		return path.endsWith(".svn") || (path.indexOf("bin") != -1);
+		return (flag == 'I');
 	}
 
 	/* (non-Javadoc)
@@ -153,30 +133,42 @@
 	 * tells if the resource has a remote counter-part
 	 * @return
 	 */
-	public boolean hasRemote()
-	{
+	public boolean hasRemote() {
 		ISVNStatus.Kind textStatus = getTextStatus();
 		return ((isManaged()) && (textStatus != ISVNStatus.Kind.ADDED));
 	}
-	
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getTextStatus()
 	 */
 	public ISVNStatus.Kind getTextStatus() {
-		if (isModified())
-			return ISVNStatus.Kind.MODIFIED;
-		if (isAdded())
-			return ISVNStatus.Kind.ADDED;
-		//TODO add other status types
-		return ISVNStatus.Kind.NONE;
+		switch (flag) {
+			case ' ' :
+				return ISVNStatus.Kind.NORMAL;
+			case 'A' :
+				return ISVNStatus.Kind.ADDED;
+			case 'D' :
+				return ISVNStatus.Kind.DELETED;
+			case 'M' :
+				return ISVNStatus.Kind.MODIFIED;
+			case 'C' :
+				return ISVNStatus.Kind.CONFLICTED;
+			case 'I' :
+				return ISVNStatus.Kind.IGNORED;
+			case '?' :
+				return ISVNStatus.Kind.UNVERSIONED;
+			case '!' :
+				return ISVNStatus.Kind.ABSENT;
+			default :
+				return ISVNStatus.Kind.NONE;
+		}
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isMerged()
 	 */
 	public boolean isMerged() {
-		// TODO Auto-generated method stub
+		// TODO : implement
 		return false;
 	}
 
@@ -184,29 +176,28 @@
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isDeleted()
 	 */
 	public boolean isDeleted() {
-		return flag == 'D';
+		return (flag == 'D');
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isModified()
 	 */
 	public boolean isModified() {
-		return flag == 'M';
+		return (flag == 'M');
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isAdded()
 	 */
 	public boolean isAdded() {
-		return flag == 'A';
+		return (flag == 'A');
 	}
 
 	/* (non-Javadoc)
 	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isCopied()
 	 */
 	public boolean isCopied() {
-		// TODO Auto-generated method stub
-		return false;
+		return (history == '+');
 	}
 
 	/* (non-Javadoc)

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineStatusUnversioned.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineStatusUnversioned.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CmdLineStatusUnversioned.java	Tue Oct 28 23:07:21 2003
@@ -51,7 +51,7 @@
  * information on the Apache Software Foundation, please see
  * <http://www.apache.org/>.
  *
- */ 
+ */
 package org.tigris.subversion.svnclientadapter.commandline;
 
 import java.util.Date;
@@ -65,137 +65,58 @@
  * <p>
  * A special status class that is used if a File/Folder is not versioned.</p>
  * 
- * @author Philip Schatz <a href="mailto:schatzp@purdue.edu">schatzp@purdue.edu</a>
- * @since Sep 13, 2003
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CmdLineStatusUnversioned implements ISVNStatus {
-
-	/**
-	 * 
-	 */
-	public CmdLineStatusUnversioned() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isIgnored()
-	 */
+class CmdLineStatusUnversioned implements ISVNStatus {
 	public boolean isIgnored() {
 		return true;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isManaged()
-	 */
 	public boolean isManaged() {
 		return false;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#hasRemote()
-	 */
 	public boolean hasRemote() {
 		return false;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getUrl()
-	 */
 	public SVNUrl getUrl() {
 		return null;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getLastChangedRevision()
-	 */
 	public SVNRevision.Number getLastChangedRevision() {
 		return null;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getLastChangedDate()
-	 */
 	public Date getLastChangedDate() {
 		return null;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getLastCommitAuthor()
-	 */
 	public String getLastCommitAuthor() {
 		return null;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getTextStatus()
-	 */
 	public ISVNStatus.Kind getTextStatus() {
-		return null;
+		return ISVNStatus.Kind.UNVERSIONED;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isMerged()
-	 */
 	public boolean isMerged() {
 		return false;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isDeleted()
-	 */
 	public boolean isDeleted() {
 		return false;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isModified()
-	 */
 	public boolean isModified() {
 		return false;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isAdded()
-	 */
 	public boolean isAdded() {
 		return false;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getRevision()
-	 */
 	public SVNRevision.Number getRevision() {
 		return SVNRevision.INVALID_REVISION;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#isCopied()
-	 */
 	public boolean isCopied() {
 		return false;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getPath()
-	 */
 	public String getPath() {
 		return null;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getNodeKind()
-	 */
 	public SVNNodeKind getNodeKind() {
-		// TODO Auto-generated method stub
-		return null;
+		return SVNNodeKind.UNKNOWN;
 	}
-
-	/* (non-Javadoc)
-	 * @see org.tigris.subversion.subclipse.client.ISVNClientStatus#getUrlCopiedFrom()
-	 */
 	public String getUrlCopiedFrom() {
-		// TODO Auto-generated method stub
 		return null;
 	}
-
 }

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CommandLine.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CommandLine.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/CommandLine.java	Tue Oct 28 23:07:21 2003
@@ -59,45 +59,44 @@
 import java.text.MessageFormat;
 
 /**
- * Provides a rudimentary interface to using the Subversion commandline client. 
- * @author philip schatz
+ * <p>
+ * Performs the gruntwork of calling "svn".
+ * Is a bare-bones interface to using the Subversion commandline client.</p>
+ *  
+ * @author Philip Schatz (schatz at tigris)
  */
-public class CommandLine {
-
+class CommandLine {
 	/*
 	 * These are the commands used to execute the methods listed
 	 * below.
 	 */
-    private static String CMD_VERSION = " --version";
-	private static String CMD_ADD = " add {0} {1}";
-	private static String CMD_CAT = " cat -r {0} {1}";
-	private static String CMD_CLEANUP = " cleanup {0}";
-	private static String CMD_COMMIT = " ci {0} -m \"{1}\"";
-	private static String CMD_COPY = " cp -r {0} -m \"{1}\" {2} {3}";
-	private static String CMD_COPY_LOCAL = " cp {0} {1}";
-	private static String CMD_CHECKOUT = " co -r {0} {1} {2}";
-	private static String CMD_DELETE = " rm {0} {1} --force";
-	private static String CMD_DIFF = " diff {0} {1}@{2} {3}@{4}";
-	private static String CMD_EXPORT = " export -r {0} {1} {2} {3}";
-	private static String CMD_IMPORT = " import {0} {1} {2} -m \"{3}\"";
-	private static String CMD_INFO = " info {0}";
-	private static String CMD_LIST = " list -v -r {0} {1}";
-	private static String CMD_LOG = " log -r {0} {1}";
-	private static String CMD_MKDIR = " mkdir -m \"{0}\" {1}";
-	private static String CMD_MKDIR_LOCAL = " mkdir {0}";
-	private static String CMD_MOVE =
-		" mv -r {0} {1} {2} {3} --force --non-interactive";
-	private static String CMD_PROPGET = " propget {0} {1}";
-	private static String CMD_PROPSET = " propset {0} \"{1}\" {2}";
-	private static String CMD_PROPSET_FILE = " propset {0} -F \"{1}\" {2}";
-	private static String CMD_REVERT = " revert {0} {1}";
-	private static String CMD_STATUS =
-		" status -v -N {0} {1} --non-interactive";
-	private static String CMD_RECURSIVE_STATUS =
-		" status -v {0} --non-interactive";
+	private static String CMD_VERSION = "--version";
+	private static String CMD_ADD = "add {0} {1}";
+	private static String CMD_CAT = "cat -r {0} {1}";
+	private static String CMD_CLEANUP = "cleanup {0}";
+	private static String CMD_COMMIT = "ci {0} -m \"{1}\"";
+	private static String CMD_COPY = "cp -r {0} -m \"{1}\" {2} {3}";
+	private static String CMD_COPY_LOCAL = "cp {0} {1}";
+	private static String CMD_CHECKOUT = "co -r {0} {1} {2}";
+	private static String CMD_DELETE = "rm {0} {1} --force";
+	private static String CMD_DIFF = "diff {0} {1}@{2} {3}@{4}";
+	private static String CMD_EXPORT = "export -r {0} {1} {2} {3}";
+	private static String CMD_IMPORT = "import {0} {1} {2} -m \"{3}\"";
+	private static String CMD_INFO = "info {0}";
+	private static String CMD_LIST = "list -v -r {0} {1}";
+	private static String CMD_LOG = "log -r {0} {1}";
+	private static String CMD_MKDIR = "mkdir -m \"{0}\" {1}";
+	private static String CMD_MKDIR_LOCAL = "mkdir {0}";
+	private static String CMD_MOVE = "mv -r {0} {1} {2} {3} --force --non-interactive";
+	private static String CMD_PROPGET = "propget {0} {1}";
+	private static String CMD_PROPSET = "propset {0} \"{1}\" {2}";
+	private static String CMD_PROPSET_FILE = "propset {0} -F \"{1}\" {2}";
+	private static String CMD_REVERT = "revert {0} {1}";
+	private static String CMD_STATUS = "status -v -N {0} {1} --non-interactive";
+	private static String CMD_RECURSIVE_STATUS = "status -v {0} --non-interactive";
 
-	private static String CMD_UPDATE = " up -r {0} {1} --non-interactive";
-	private static String AUTH_INFO = " --username \"{0}\" --password \"{1}\"";
+	private static String CMD_UPDATE = "up -r {0} {1} --non-interactive";
+	private static String AUTH_INFO = "--username \"{0}\" --password \"{1}\"";
 
 	private String CMD;
 
@@ -105,56 +104,41 @@
 	private static String pass;
 
 	//Constructors
-	public CommandLine(String svnPath) {
-		CMD = svnPath;
+	CommandLine(String svnPath) {
+		CMD = svnPath + ' ';
 	}
 
-    public String version() throws CmdLineException {
-        return exec(CMD+CMD_VERSION);
-    }
+	//Methods
+	String version() throws CmdLineException {
+		return execString(CMD_VERSION);
+	}
 
 	/**
-	 * add: Put files and directories under revision control, scheduling
-	 * them for addition to repository.  They will be added in next commit.
-	 * usage: add PATH [PATH [PATH ... ]]
-	 * 
-	 * Valid options:
-	 *   --targets arg            : pass contents of file ARG as additional args
-	 *   -N [--non-recursive]     : operate on single directory only
-	 *   -q [--quiet]             : print as little as possible
+	 * <p>
+	 * Adds an unversioned file into the repository.</p>
 	 * 
-	 * @param resource
-	 * @param recursive
+	 * @param resource Local path of resource to add.
+	 * @param recursive true if this is a directory
+	 *   and its children should be traversed
+	 *   recursively.
 	 */
-	public String add(String path, boolean recursive) throws CmdLineException {
+	String add(String path, boolean recursive) throws CmdLineException {
 		String flags = (recursive) ? "" : "-N";
-		return exec(
-			CMD + MessageFormat.format(CMD_ADD, new String[] { flags, path }));
+		return execString(MessageFormat.format(CMD_ADD, new String[] { flags, path }));
 	}
 
 	/**
-	 * 	cat: Output the content of specified files or URLs.
-	 * 	usage: cat TARGET [TARGET [TARGET ... ]]
-	 *
-	 * 	Valid options:
-	 * 	  -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 * 								 {DATE}      date instead of revision number
-	 * 								 "HEAD"      latest in repository
-	 * 								 "BASE"      base revision of item's working copy
-	 * 								 "COMMITTED" revision of item's last commit
-	 * 								 "PREV"      revision before item's last commit
-	 * 	  --username arg           : specify a username ARG
-	 * 	  --password arg           : specify a password ARG
-	 * 	  --no-auth-cache          : do not cache authentication tokens
-	 * 	  --non-interactive        : do no interactive prompting
+	 * <p>
+	 * Output the content of specified file or URL.</p>
+	 * 
+	 * @param url Either the local path to a file, or URL
+	 *   to print the contents of.
+	 * @return An stream containing the contents of the file.
 	 */
-	public InputStream cat(String url, String revision) throws CmdLineException {
+	InputStream cat(String url, String revision) throws CmdLineException {
 		Process proc =
-			execInternal(
-				CMD
-					+ MessageFormat.format(
-						CMD_CAT,
-						new String[] { revision, url })
+			execProcess(
+				MessageFormat.format(CMD_CAT, new String[] { validRev(revision), url })
 					+ getAuthInfo());
 
 		InputStream content = proc.getInputStream();
@@ -162,258 +146,124 @@
 	}
 
 	/**
-	 * <pre>
-	 * commit (ci): Send changes from your working copy to the repository.
-	 * usage: commit [PATH [PATH ... ]]
-	 * 
-	 *   Be sure to use one of -m or -F to send a log message.
-	 * 
-	 * Valid options:
-	 *   -m [--message] arg       : specify commit message "ARG"
-	 *   -F [--file] arg          : read data from file ARG
-	 *   -q [--quiet]             : print as little as possible
-	 *   -N [--non-recursive]     : operate on single directory only
-	 *   --targets arg            : pass contents of file "ARG" as additional args
-	 *   --force                  : force operation to run
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --encoding arg           : treat value as being in charset encoding ARG
-	 * </pre>
+	 * <p>
+	 * Send changes from your working copy to the 
+	 * repository.</p>
 	 *   
-	 * @param path
-	 * @param message
-	 * @throws AuthenticationException
+	 * @param path The local path to the folder(s)/file(s)
+	 *   to commit.
+	 * @param message The message associated with the
+	 *   committed resources.
+	 * @throws CmdLineException
 	 */
-	public String checkin(String path, String message)
-		throws CmdLineException {
-		return exec(
-			CMD
-				+ MessageFormat.format(
-					CMD_COMMIT,
-					new String[] { path, message })
-				+ getAuthInfo());
+	String checkin(String path, String message) throws CmdLineException {
+		return execString(
+			MessageFormat.format(CMD_COMMIT, new String[] { path, message }) + getAuthInfo());
 	}
 
 	/**
-	 * <pre>
-	 * cleanup: Recursively clean up the working copy, removing locks, resuming
-	 * unfinished operations, etc.
-	 * usage: cleanup [PATH...]
-	 * 
-	 * Valid options:
-	 *   --diff3-cmd arg          : use ARG as merge command
-	 *   --config-dir arg         : read user configuration files from directory ARG
-	 * </pre>
+	 * <p>
+	 * Recursively clean up the working copy, 
+	 * removing locks, resuming unfinished operations.</p>
 	 * 
-	 * @param path
+	 * @param path The local path to clean up.
 	 */
-	public void cleanup(String path) throws CmdLineException {
-		execInternal(
-			CMD + MessageFormat.format(CMD_CLEANUP, new String[] { path }));
+	void cleanup(String path) throws CmdLineException {
+		execVoid(MessageFormat.format(CMD_CLEANUP, new String[] { path }));
 	}
 
 	/**
-	 * checkout (co): Check out a working copy from a repository.
-	 * usage: checkout URL [URL [URL ... ]] [PATH]
-	 *   Note: If PATH is omitted, the basename of the URL will be used as
-	 *   the destination. If multiple URLs are given each will be checked
-	 *   out into a sub-directory of PATH, with the name of the sub-directory
-	 *   being the basename of the URL.
-	 * 
-	 * Valid options:
-	 *   -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 *                              {DATE}      date instead of revision number
-	 *                              "HEAD"      latest in repository
-	 *                              "BASE"      base revision of item's working copy
-	 *                              "COMMITTED" revision of item's last commit
-	 *                              "PREV"      revision before item's last commit
-	 *   -q [--quiet]             : print as little as possible
-	 *   -N [--non-recursive]     : operate on single directory only
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
+	 * <p>
+	 * Check out a working copy from a repository.</p>
 	 *
-	 * @param url
-	 * @param destination
-	 * @param revision
-	 * @param recursive
-	 * @throws AuthenticationException
-	 */
-	public String checkout(
-		String url,
-		String destination,
-		String revision,
-		boolean recursive)
+	 * @param url The URL to check out from.
+	 * @param destination The local directory to check out to.
+	 * @param revision The revision to check out.
+	 *   Defaults to <tt>"HEAD"</tt>.
+	 * @param recursive true if subdirs should be checked out recursively.
+	 * @throws CmdLineException
+	 */
+	String checkout(String url, String destination, String revision, boolean recursive)
 		throws CmdLineException {
 		String flags = (recursive) ? "" : "-N";
-		return exec(
-			CMD
-				+ MessageFormat.format(
-					CMD_CHECKOUT,
-					new String[] {
-						validRev(revision),
-						url,
-						destination,
-						flags })
+		return execString(
+			MessageFormat.format(
+				CMD_CHECKOUT,
+				new String[] { validRev(revision), url, destination, flags })
 				+ getAuthInfo());
 	}
 
 	/**
-	 * copy (cp): Duplicate something in working copy or repos, remembering history.
-	 * usage: copy SRC DST
+	 * <p>
+	 * Duplicate something in working copy or repos,
+	 * remembering history.</p>
 	 * 
-	 *   SRC and DST can each be either a working copy (WC) path or URL:
-	 *     WC  -> WC:   copy and schedule for addition (with history)
-	 *     WC  -> URL:  immediately commit a copy of WC to URL
-	 *     URL -> WC:   check out URL into WC, schedule for addition
-	 *     URL -> URL:  complete server-side copy;  used to branch & tag
+	 * <p>
+	 * <tt>src</tt> and <tt>dest</tt> can each be either a working copy (WC) path or URL.</p>
+	 * <dl>
+	 * <dt>WC -&gt; WC</dt>
+	 * <dd>copy and schedule for addition (with history)</dd>
 	 * 
-	 * Valid options:
-	 *   -m [--message] arg       : specify commit message ARG
-	 *   -F [--file] arg          : read data from file ARG
-	 *   -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 *                              {DATE}      date instead of revision number
-	 *                              "HEAD"      latest in repository
-	 *                              "BASE"      base revision of item's working copy
-	 *                              "COMMITTED" revision of item's last commit
-	 *                              "PREV"      revision before item's last commit
-	 *   -q [--quiet]             : print as little as possible
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --encoding arg           : treat value as being in charset encoding ARG
-	 */
-	public Process copy(
-		String src,
-		String dest,
-		String message,
-		String revision) throws CmdLineException {
-		return execInternal(
-			CMD
-				+ MessageFormat.format(
-					CMD_COPY,
-					new String[] { validRev(revision), message, src, dest })
+	 * <dt>WC -&gt; URL</dt>
+	 * <dd>immediately commit a copy of WC to URL</dd>
+	 * 
+	 * <dt>URL -&gt; WC</dt>
+	 * <dd>check out URL into WC, schedule for addition</dd>
+	 * 
+	 * <dt>URL -&gt; URL</dt>
+	 * <dd>complete server-side copy;  used to branch and tag</dd>
+	 * </dl>
+	 * 
+	 * @param src Local path or URL to copy from.
+	 * @param dest Local path or URL to copy to.
+	 * @param message Commit message.
+	 * @param revision Optional revision to copy from. 
+	 */
+	void copy(String src, String dest, String message, String revision)
+		throws CmdLineException {
+		execVoid(
+			MessageFormat.format(CMD_COPY, new String[] { validRev(revision), message, src, dest })
 				+ getAuthInfo());
-
 	}
-	public Process copy(String src, String dest) throws CmdLineException {
-		return execInternal(
-			CMD
-				+ MessageFormat.format(CMD_COPY_LOCAL, new String[] { src, dest })
-				+ getAuthInfo());
 
+	/**
+	 * <p>
+	 * Duplicate a resource in local file system.</p>
+	 * 
+	 * @param src Local path to copy from.
+	 * @param dest Local destination path.
+	 * @throws CmdLineException
+	 */
+	void copy(String src, String dest) throws CmdLineException {
+		execVoid(MessageFormat.format(CMD_COPY_LOCAL, new String[] { src, dest }) + getAuthInfo());
 	}
 
 	/**
-	 * delete (del, remove, rm): Remove files and directories from version control.
-	 * usage: delete [TARGET [TARGET ... ]]
-	 * 
-	 *   If run on a working copy TARGET, the item is scheduled for deletion
-	 *   upon the next commit.  Files, and directories that have not been
-	 *   committed, are immediately removed from the working copy.  The
-	 *   command will not remove TARGETs that are, or contain, unversioned
-	 *   or modified items; use the --force option to override this
-	 *   behaviour.
-	 * 
-	 *   If run on an URL, the item is deleted from the repository via an
-	 *   immediate commit.
-	 * 
-	 * Valid options:
-	 *   --force                  : force operation to run
-	 *   -m [--message] arg       : specify commit message ARG
-	 *   -F [--file] arg          : read data from file ARG
-	 *   -q [--quiet]             : print as little as possible
-	 *   --targets arg            : pass contents of file ARG as additional args
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --encoding arg           : treat value as being in charset encoding ARG
+	 * <p>
+	 * Remove files and directories from version control.</p>
 	 *   
-	 * @param target
+	 * @param target Local path or URL to remove.
+	 * @param message Associated message when deleting from
+	 *   URL.
 	 */
-	public String delete(String target, String message)
-		throws CmdLineException {
+	String delete(String target, String message) throws CmdLineException {
 		String msg = (message == null) ? "" : "-m \"" + message + "\"";
-		return exec(
-			CMD
-				+ MessageFormat.format(CMD_DELETE, new String[] { msg, target })
-				+ getAuthInfo());
+		return execString(
+			CMD + MessageFormat.format(CMD_DELETE, new String[] { msg, target }) + getAuthInfo());
 	}
 
 	/**
-	 * <pre>
-	 * diff (di): display the differences between two paths.
-	 * usage: 1. diff [-r N[:M]] [--old OLD-TGT] [--new NEW-TGT] [PATH...]
-	 *        2. diff -r N:M URL
-	 *        3. diff [-r N[:M]] URL1[@N] URL2[@M]
-	 * 
-	 *   1. Display the differences between OLD-TGT and NEW-TGT.  PATHs, if
-	 *      given, are relative to OLD-TGT and NEW-TGT and restrict the output
-	 *      to differences for those paths.  OLD-TGT and NEW-TGT may be working
-	 *      copy paths or URL[@REV].
-	 * 
-	 *      OLD-TGT defaults to the path '.' and NEW-TGT defaults to OLD-TGT.
-	 *      N defaults to "BASE" or, if OLD-TGT is an URL, to "HEAD".
-	 *      M defaults to the current working version or, if NEW-TGT is an URL,
-	 *      to "HEAD".
-	 * 
-	 *      '-r N' sets the revision of OLD-TGT to N, '-r N:M' also sets the
-	 *      revision of NEW-TGT to M.
+	 * <p>
+	 * Display the differences between two paths.</p>
 	 * 
-	 *   2. Shorthand for 'svn diff -r N:M --old=URL --new=URL'.
-	 * 
-	 *   3. Shorthand for 'svn diff [-r N[:M]] --old=URL1 --new=URL2'
-	 * 
-	 *   Use just 'svn diff' to display local modifications in a working copy
-	 * 
-	 * Valid options:
-	 *   -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 *                              {DATE}      date instead of revision number
-	 *                              "HEAD"      latest in repository
-	 *                              "BASE"      base revision of item's working copy
-	 *                              "COMMITTED" revision of item's last commit
-	 *                              "PREV"      revision before item's last commit
-	 *   --old arg                : use ARG as the older target
-	 *   --new arg                : use ARG as the newer target
-	 *   -x [--extensions] arg    : pass ARG as bundled options to GNU diff
-	 *   -N [--non-recursive]     : operate on single directory only
-	 *   --diff-cmd arg           : use ARG as diff command
-	 *   --no-diff-deleted        : do not print differences for deleted files
-	 *   --notice-ancestry        : notice ancestry when calculating differences
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --config-dir arg         : read user configuration files from directory ARG
 	 */
-	public InputStream diff(
+	InputStream diff(
 		String oldPath,
 		String oldRev,
 		String newPath,
 		String newRev,
-		boolean recurse) throws CmdLineException {
-		/*
-		Process proc =
-			execInternal(
-				CMD
-					+ MessageFormat.format(
-						CMD_DIFF,
-						new String[] {
-							recurse ? "" : "-N",
-							oldPath,
-							oldRev,
-							newPath,
-							newRev })
-					+ getAuthInfo());
-		
-		InputStream content = proc.getInputStream();
-		return content;
-		*/
+		boolean recurse)
+		throws CmdLineException {
 		String commandLine = " diff ";
 		if (!"BASE".equals(oldRev) || !"WORKING".equals(newPath)) {
 			commandLine += "-r " + oldRev;
@@ -423,92 +273,37 @@
 		commandLine += " --old " + oldPath;
 		commandLine += " --new " + newPath;
 
-		Process proc = execInternal(CMD + commandLine);
+		Process proc = execProcess(commandLine);
 		InputStream content = proc.getInputStream();
 		return content;
 	}
 
 	/**
-	 * <pre>
-	 * export: export stuff.
-	 * usage: 1. export [-r REV] URL [PATH]
-	 *        2. export PATH1 PATH2
-	 * 
-	 *   1. Exports a clean directory tree from the repository specified by
-	 *      URL, at revision REV if it is given, otherwise at HEAD, into
-	 *      PATH. If PATH is omitted, the last component of the URL is used
-	 *      for the local directory name.
-	 * 
-	 *   2. Exports a clean directory tree from the working copy specified by
-	 *      PATH1 into PATH2.  all local changes will be preserved, but files
-	 *      not under revision control will not be copied.
-	 * 
-	 * Valid options:
-	 *   -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 *                              {DATE}      date instead of revision number
-	 *                              "HEAD"      latest in repository
-	 *                              "BASE"      base revision of item's working copy
-	 *                              "COMMITTED" revision of item's last commit
-	 *                              "PREV"      revision before item's last commit
-	 *   -q [--quiet]             : print as little as possible
-	 *   --force                  : force operation to run
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --config-dir arg         : read user configuration files from directory ARG
-	 * </pre>
+	 * <p>
+	 * export files and directories from remote URL.</p>
 	 * 
 	 */
-	public void export(String url, String path, String revision, boolean force)
+	void export(String url, String path, String revision, boolean force)
 		throws CmdLineException {
-		execInternal(
-			CMD
-				+ MessageFormat.format(
-					CMD_EXPORT,
-					new String[] {
-						url,
-						path,
-						validRev(revision),
-						(force) ? "--force" : "" }));
+		execVoid(
+			MessageFormat.format(
+				CMD_EXPORT,
+				new String[] { url, path, validRev(revision), (force) ? "--force" : "" }));
 	}
 
 	/**
-	 * import: Commit an unversioned file or tree into the repository.
-	 * usage: import URL [PATH [NEW_ENTRY_IN_REPOS]]
-	 *
-	 *   Recursively commit a copy of PATH to URL.
-	 *   If no third arg, copy top-level contents of PATH into URL
-	 *   directly.  Otherwise, create NEW_ENTRY underneath URL and
-	 *   begin copy there.
-	 * 
-	 * Valid options:
-	 *   -m [--message] arg       : specify commit message "ARG"
-	 *   -F [--file] arg          : read data from file ARG
-	 *   -q [--quiet]             : print as little as possible
-	 *   -N [--non-recursive]     : operate on single directory only
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --encoding arg           : treat value as being in charset encoding ARG
+	 * <p>
+	 * Commit an unversioned file or directory into the repository.</p>
 	 * 
-	 * @param url
-	 * @param path
-	 * @param module
+	 * @param url Remote URL to import to.
+	 * @param path Local path to import from.
+	 * @param module Remote module name.
 	 * @param message optional. can be null
 	 */
-	public String importFiles(
-		String url,
-		String path,
-		String module,
-		String message)
+	String importFiles(String url, String path, String module, String message)
 		throws CmdLineException {
-		return exec(
-			CMD
-				+ MessageFormat.format(
-					CMD_IMPORT,
-					new String[] { url, path, module, message })
+		return execString(
+			MessageFormat.format(CMD_IMPORT, new String[] { url, path, module, message })
 				+ getAuthInfo());
 	}
 
@@ -525,453 +320,197 @@
 	 * @param path
 	 * @return
 	 */
-	public String info(String path) throws CmdLineException {
-		return exec(
-			CMD + MessageFormat.format(CMD_INFO, new String[] { path }));
+	String info(String path) throws CmdLineException {
+		return execString(MessageFormat.format(CMD_INFO, new String[] { path }));
 	}
 
 	/**
-	 *  list (ls): List directory entries of a URL.
-	 * 	usage: list URL [URL ... ]
-	 *
-	 * 	  If URL is a file, just file entry will be displayed.
+	 * <p>
+	 * List directory entries of a URL.</p>
 	 * 
-	 * 	Valid options:
-	 * 	  -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 * 								 {DATE}      date instead of revision number
-	 * 								 "HEAD"      latest in repository
-	 * 								 "BASE"      base revision of item's working copy
-	 * 								 "COMMITTED" revision of item's last commit
-	 * 								 "PREV"      revision before item's last commit
-	 * 	  -v [--verbose]           : print extra information
-	 * 	  -R [--recursive]         : descend recursively
-	 * 	  --username arg           : specify a username ARG
-	 * 	  --password arg           : specify a password ARG
-	 * 	  --no-auth-cache          : do not cache authentication tokens
-	 * 	  --non-interactive        : do no interactive prompting
-	 */
-	public String list(String url, String revision) throws CmdLineException {
-		return exec(
-			CMD
-				+ MessageFormat.format(CMD_LIST, new String[] { revision, url })
-				+ getAuthInfo());
+	 * @param url Remote URL.
+	 * @param revision Revision to use. can be <tt>null</tt>
+	 *   Defaults to <tt>HEAD</tt>.
+	 */
+	String list(String url, String revision) throws CmdLineException {
+		return execString(
+			MessageFormat.format(CMD_LIST, new String[] { revision, url }) + getAuthInfo());
 	}
 
 	/**
-	 *  log: Show the log messages for a set of revision(s) and/or file(s).
-	 * 	usage: log [URL] [PATH [PATH ... ]]
-	 * 	  Print the log messages for local PATHs, or for PATHs under
-	 * 	  URL, if URL is given.  If URL is given by itself, then print log
-	 * 	  messages for everything under it.  With -v, also print all affected
-	 * 	  paths with each log message.  With -q, don't print the log message
-	 * 	  body itself (note that this is compatible with -v).
-	 * 
-	 *   Each log message is printed just once, even if more than one of the
-	 * 	  affected paths for that revision were explicitly requested.  Logs
-	 * 	  cross copy history by default; use --strict to disable this.
-	 * 	  For example:
-	 *
-	 * 		svn log
-	 * 		svn log foo.c
-	 * 		svn log http://www.example.com/repo/project/foo.c
-	 * 		svn log http://www.example.com/repo/project foo.c bar.c
-	 * 
-	 * 	Valid options:
-	 * 	  -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 * 								 {DATE}      date instead of revision number
-	 * 								 "HEAD"      latest in repository
-	 * 								 "BASE"      base revision of item's working copy
-	 * 								 "COMMITTED" revision of item's last commit
-	 * 								 "PREV"      revision before item's last commit
-	 * 	  -q [--quiet]             : print as little as possible
-	 * 	  -v [--verbose]           : print extra information
-	 * 	  --targets arg            : pass contents of file ARG as additional args
-	 * 	  --strict                 : use strict semantics
-	 * 	  --incremental            : give output suitable for concatenation
-	 * 	  --xml                    : output in xml
-	 * 	  --username arg           : specify a username ARG
-	 * 	  --password arg           : specify a password ARG
-	 * 	  --no-auth-cache          : do not cache authentication tokens
-	 *	  --non-interactive        : do no interactive prompting
-	 */
-	public String log(String target, String revision) throws CmdLineException {
-		return exec(
-			CMD
-				+ MessageFormat.format(
-					CMD_LOG,
-					new String[] { validRev(revision), target })
+	 * <p>
+	 * Show the log messages for a set of revision(s) and/or file(s).</p>
+	 * 
+	 * @param target Local path or URL.
+	 * @param revision Optional revision range to get log
+	 *   messages from.
+	 */
+	String log(String target, String revision) throws CmdLineException {
+		return execString(
+			MessageFormat.format(CMD_LOG, new String[] { validRev(revision), target })
 				+ getAuthInfo());
 	}
 
 	/**
-	 * 	mkdir: Create a new directory under revision control.
-	 * 	usage: mkdir TARGET [TARGET [TARGET ... ]]
-	 *
-	 * 	  Create a directory with a name given by the final component of
-	 * 	  TARGET.  If TARGET is a working copy path the directory is scheduled
-	 * 	  for addition in the working copy.  If TARGET is an URL the directory
-	 * 	  is created in the repository via an immediate commit.  In both cases
-	 * 	  all the intermediate directories must already exist.
-	 * 
-	 * 	Valid options:
-	 * 	  -m [--message] arg       : specify commit message "ARG"
-	 * 	  -F [--file] arg          : read data from file ARG
-	 * 	  -q [--quiet]             : print as little as possible
-	 * 	  --username arg           : specify a username ARG
-	 * 	  --password arg           : specify a password ARG
-	 * 	  --no-auth-cache          : do not cache authentication tokens
-	 * 	  --non-interactive        : do no interactive prompting
-	 * 	  --encoding arg           : treat value as being in charset encoding ARG
-	 */
-	public Process mkdir(String path, String message) throws CmdLineException {
-		return execInternal(
-			CMD
-				+ MessageFormat.format(CMD_MKDIR, new String[] { message, path })
-				+ getAuthInfo());
+	 * <p>
+	 * Create a new directory under revision control.</p>
+	 * 
+	 * @param url URL to create. (contains existing url, 
+	 *   followed by "/newDirectoryName").
+	 * @param message Commit message to send.
+	 */
+	void mkdir(String url, String message) throws CmdLineException {
+		execVoid(MessageFormat.format(CMD_MKDIR, new String[] { message, url }) + getAuthInfo());
 	}
-	public Process mkdir(String localPath) throws CmdLineException{
-		return execInternal(
-			CMD
-				+ MessageFormat.format(
-					CMD_MKDIR_LOCAL,
-					new String[] { localPath }));
+	void mkdir(String localPath) throws CmdLineException {
+		execVoid(MessageFormat.format(CMD_MKDIR_LOCAL, new String[] { localPath }));
 	}
 
 	/**
-	 * move (mv, rename, ren): Move/rename something in working copy or repository.
-	 * usage: move SRC DST
-	 * 
-	 *   NOTE:  this command is equivalent to a 'copy' and 'delete'.
+	 * <p>
+	 * Move/rename something in working copy or repository.</p>
 	 * 
-	 *   SRC and DST can both be working copy (WC) paths or URLs:
-	 *     WC  -> WC:   move and schedule for addition (with history)
-	 *     URL -> URL:  complete server-side rename.
+	 * <p>
+	 * <tt>source</tt> and <tt>dest</tt> can both be working copy (WC) paths or URLs.</p>
+	 * <dl>
+	 * <dt>WC -&gt; WC</dt>
+	 * <dd>move and schedule for addition (with history)</dd>
+	 * <dt>URL -&gt; URL</dt>
+	 * <dd>complete server-side rename.</dd>
 	 * 
-	 * Valid options:
-	 *   -m [--message] arg       : specify commit message ARG
-	 *   -F [--file] arg          : read data from file ARG
-	 *   -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 *                              {DATE}      date instead of revision number
-	 *                              "HEAD"      latest in repository
-	 *                              "BASE"      base revision of item's working copy
-	 *                              "COMMITTED" revision of item's last commit
-	 *                              "PREV"      revision before item's last commit
-	 *   -q [--quiet]             : print as little as possible
-	 *   --force                  : force operation to run
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --encoding arg           : treat value as being in charset encoding ARG
-	 *   
-	 * @param source
-	 * @param dest
+	 * @param source Local path or URL to move from.
+	 * @param dest Local path or URL to move to.
+	 * @param message Optional message to send with URL.
 	 */
-	public String move(String source, String dest, String message, String revision) throws CmdLineException {
+	String move(String source, String dest, String message, String revision)
+		throws CmdLineException {
 		String messageStr = (message == null) ? "" : "-m \"" + message + "\"";
-		return exec(
-			CMD
-				+ MessageFormat.format(CMD_MOVE, new String[] { validRev(revision), source, dest, messageStr })
+		return execString(
+			MessageFormat.format(
+				CMD_MOVE,
+				new String[] { validRev(revision), source, dest, messageStr })
 				+ getAuthInfo());
 	}
 
 	/**
-	 * <pre>
-	 * propget (pget, pg): Print value of PROPNAME on files, dirs, or revisions.
-	 * usage: 1. propget PROPNAME [PATH...]
-	 *        2. propget PROPNAME --revprop -r REV [URL]
-	 * 
-	 *   1. Prints versioned prop in working copy.
-	 *   2. Prints unversioned remote prop on repos revision.
-	 * 
-	 *   By default, this subcommand will add an extra newline to the end
-	 *   of the property values so that the output looks pretty.  Also,
-	 *   whenever there are multiple paths involved, each property value
-	 *   is prefixed with the path with which it is associated.  Use
-	 *   the --strict option to disable these beautifications (useful,
-	 *   for example, when redirecting binary property values to a file).
-	 * 
-	 * Valid options:
-	 *   -R [--recursive]         : descend recursively
-	 *   -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 *                              {DATE}      date instead of revision number
-	 *                              "HEAD"      latest in repository
-	 *                              "BASE"      base revision of item's working copy
-	 *                              "COMMITTED" revision of item's last commit
-	 *                              "PREV"      revision before item's last commit
-	 *   --revprop                : operate on a revision property (use with -r)
-	 *   --strict                 : use strict semantics
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --config-dir arg         : read user configuration files from directory ARG
-	 * </pre>
+	 * <p>
+	 * Print value of <tt>propName</tt> on files, dirs, or revisions.</p>
+	 *
+	 * @param Local path of resource.
+	 * @param propName Property name whose value we wish to find.
 	 */
-	public InputStream propget(String path, String name)
-		throws CmdLineException {
+	InputStream propget(String path, String propName) throws CmdLineException {
 		Process proc =
-			execInternal(
-				CMD
-					+ MessageFormat.format(
-						CMD_PROPGET,
-						new String[] { name, path }));
+			execProcess(MessageFormat.format(CMD_PROPGET, new String[] { propName, path }));
 		return proc.getInputStream();
 	}
 
 	/**
-	 * <pre>
-	 * propset (pset, ps): Set PROPNAME to PROPVAL on files, dirs, or revisions.
-	 * 
-	 * usage: 1. propset PROPNAME [PROPVAL | -F VALFILE] PATH...
-	 *        2. propset PROPNAME --revprop -r REV [PROPVAL | -F VALFILE] [URL]
+	 * <p>
+	 * Set <tt>propName</tt> to <tt>propVal</tt> on files, dirs, or revisions.</p>
 	 * 
-	 *   1. Creates a versioned, local propchange in working copy.
-	 *   2. Creates an unversioned, remote propchange on repos revision.
-	 * 
-	 *   Note: svn recognizes the following special versioned properties
-	 *   but will store any arbitrary properties set:
-	 *     svn:ignore     - A newline separated list of file patterns to ignore.
-	 *     svn:keywords   - Keywords to be expanded.  Valid keywords are:
-	 *       URL, HeadURL             - The URL for the head version of the object.
-	 *       Author, LastChangedBy    - The last person to modify the file.
-	 *       Date, LastChangedDate    - The date/time the object was last modified.
-	 *       Rev, LastChangedRevision - The last revision the object changed.
-	 *       Id                       - A compressed summary of the previous
-	 *                                    4 keywords.
-	 *     svn:executable - If present, make the file executable. This
-	 *       property cannot be set on a directory.  A non-recursive attempt
-	 *       will fail, and a recursive attempt will set the property only
-	 *       on the file children of the directory.
-	 *     svn:eol-style  - One of 'native', 'LF', 'CR', 'CRLF'.
-	 *     svn:mime-type  - The mimetype of the file.  Used to determine
-	 *       whether to merge the file, and how to serve it from Apache.
-	 *       A mimetype beginning with 'text/' (or an absent mimetype) is
-	 *       treated as text.  Anything else is treated as binary.
-	 *     svn:externals  - A newline separated list of module specifiers,
-	 *       each of which consists of a relative directory path, optional
-	 *       revision flags, and an URL.  For example
-	 *         foo             http://example.com/repos/zig
-	 *         foo/bar -r 1234 http://example.com/repos/zag
-	 * 
-	 * Valid options:
-	 *   -F [--file] arg          : read data from file ARG
-	 *   -q [--quiet]             : print as little as possible
-	 *   -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 *                              {DATE}      date instead of revision number
-	 *                              "HEAD"      latest in repository
-	 *                              "BASE"      base revision of item's working copy
-	 *                              "COMMITTED" revision of item's last commit
-	 *                              "PREV"      revision before item's last commit
-	 *   --targets arg            : pass contents of file ARG as additional args
-	 *   -R [--recursive]         : descend recursively
-	 *   --revprop                : operate on a revision property (use with -r)
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
-	 *   --encoding arg           : treat value as being in charset encoding ARG
-	 *   --force                  : force operation to run
-	 *   --config-dir arg         : read user configuration files from directory ARG
-	 * </pre>
-	 */
-	public void propset(
-		String propName,
-		String propValue,
-		String target,
-		boolean recurse)
+	 * @param propName name of the property.
+	 * @param propValue New value to set <tt>propName</tt> to.
+	 * @param target Local path to resource.
+	 */
+	void propset(String propName, String propValue, String target, boolean recurse)
 		throws CmdLineException {
-		exec(
-			CMD
-				+ MessageFormat.format(
-					CMD_PROPSET,
-					new String[] { propName, propValue, target }));
-	}
-	public void propsetFile(
-		String propName,
-		String propFile,
-		String target,
-		boolean recurse)
+		execVoid(MessageFormat.format(CMD_PROPSET, new String[] { propName, propValue, target }));
+	}
+	/**
+	 * <p>
+	 * Sets a binary file as the value of a property.</p>
+	 * 
+	 * @param propName name of the property.
+	 * @param propFile Local path to binary file.
+	 * @param target Local path to resource.
+	 */
+	void propsetFile(String propName, String propFile, String target, boolean recurse)
 		throws CmdLineException {
-		exec(
-			CMD
-				+ MessageFormat.format(
-					CMD_PROPSET_FILE,
-					new String[] { propName, propFile, target }));
+		execVoid(
+			MessageFormat.format(CMD_PROPSET_FILE, new String[] { propName, propFile, target }));
 	}
 
 	/**
-	 * revert: Restore pristine working copy file (undo all local edits)
-	 * usage: revert PATH [PATH [PATH ... ]]
-	 * 
-	 *   Note:  this routine does not require network access, and
-	 *   resolves any conflicted states.
+	 * <p>
+	 * Restore pristine working copy file (undo all local edits)</p>
 	 * 
-	 * Valid options:
-	 *   --targets arg            : pass contents of file ARG as additional args
-	 *   -R [--recursive]         : descend recursively
-	 *   -q [--quiet]             : print as little as possible
+	 * @param paths Local paths to revert.
+	 * @param recursive <tt>true</tt> if reverting subdirectories. 
 	 */
-	public String revert(String paths, boolean recursive) throws CmdLineException {
+	String revert(String paths, boolean recursive) throws CmdLineException {
 		String recursiveFlag = (recursive) ? "-R" : "";
-		return exec(
-			CMD
-				+ MessageFormat.format(
-					CMD_REVERT,
-					new String[] { recursiveFlag, paths }));					
-	}
-
-	/**
-	 * status (stat, st): Print the status of working copy files and directories.
-	 * usage: status [PATH [PATH ... ]]
-	 * 
-	 *   With no args, print only locally modified items (no network access).
-	 *   With -u, add working revision and server out-of-date information.
-	 *   With -v, print full revision information on every item.
-	 * 
-	 * The first five columns in the output are each one character wide:
-	 *     First column: Says if item was added, deleted, or otherwise changed
-	 *       ' ' no modifications
-	 *       'A' Added
-	 *       'D' Deleted
-	 *       'M' Modified
-	 *       'C' Conflicted
-	 *       '?' item is not under revision control
-	 *       '!' item is missing and was removed via a non-svn command
-	 *       '~' versioned item obstructed by some item of a different kind
-	 *     Second column: Modifications of a file's or directory's properties
-	 *       ' ' no modifications
-	 *       'M' Modified
-	 *       'C' Conflicted
-	 *     Third column: Whether the working copy directory is locked
-	 *       ' ' not locked
-	 *       'L' locked
-	 *     Fourth column: Scheduled commit will contain addition-with-history
-	 *       ' ' no history scheduled with commit
-	 *       '+' history scheduled with commit
-	 *     Fifth column: Whether the item is switched relative to its parent
-	 *       ' ' normal
-	 *       'S' switched
-	 *     The out-of-date information appears in the eighth column
-	 *       '*' a newer revision exists on the server
-	 *       ' ' the working copy is up to date
-	 * 
-	 * Remaining fields are variable width and delimited by spaces:
-	 * 
-	 * The working revision is the next field if -u or -v is given, followed
-	 * by both the last committed revision and last committed author if -v is
-	 * given.  The working copy path is always the final field, so it can
-	 * include spaces.
-	 * 
-	 *   Example output:
-	 *     svn status wc
-	 *      M     wc/bar.c
-	 *     A  +   wc/qax.c
-	 * 
-	 *     svn status -u wc
-	 *      M           965    wc/bar.c
-	 *            *     965    wc/foo.c
-	 *     A  +         965    wc/qax.c
-	 *     Head revision:   981
-	 * 
-	 *     svn status --show-updates --verbose wc
-	 *      M           965       938     kfogel   wc/bar.c
-	 *            *     965       922    sussman   wc/foo.c
-	 *     A  +         965       687        joe   wc/qax.c
-	 *                  965       687        joe   wc/zig.c
-	 *     Head revision:   981
-	 * 
-	 * Valid options:
-	 *   -u [--show-updates]      : display update information
-	 *   -v [--verbose]           : print extra information
-	 *   -N [--non-recursive]     : operate on single directory only
-	 *   -q [--quiet]             : print as little as possible
-	 *   --no-ignore              : disregard default and svn:ignore property ignores
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
+		return execString(MessageFormat.format(CMD_REVERT, new String[] { recursiveFlag, paths }));
+	}
+
+	/**
+	 * <p>
+	 * Print the status of working copy files and directories.</p>
 	 *   
-	 * @param path
+	 * @param path Local path of resource to get status of.
+	 * @param checkUpdates Check for updates on server.
 	 */
-	public String status(String path, boolean checkUpdates)
-		throws CmdLineException {
+	String status(String path, boolean checkUpdates) throws CmdLineException {
 		String flags = (checkUpdates ? "-u" : "");
-		return exec(
-			CMD
-				+ MessageFormat.format(CMD_STATUS, new String[] { flags, path })
-				+ getAuthInfo());
+		return execString(
+			MessageFormat.format(CMD_STATUS, new String[] { flags, path }) + getAuthInfo());
 	}
-	
-	public String recursiveStatus(String path)
-		throws CmdLineException {
-		return exec(
-			CMD
-				+ MessageFormat.format(CMD_RECURSIVE_STATUS, new String[] { path })
-				+ getAuthInfo());
-	}	
 
 	/**
-	 * update (up): Bring changes from the repository into the working copy.
-	 * usage: update [PATH [PATH ... ]]
-	 * 
-	 *   If no revision given, bring working copy up-to-date with HEAD rev.
-	 *   Else synchronize working copy to revision given by -r.
-	 * 
-	 *   For each updated item a line will start with a character reporting the
-	 *   action taken.  These characters have the following meaning:
-	 * 
-	 *     A  Added
-	 *     D  Deleted
-	 *     U  Updated
-	 *     C  Conflict
-	 *     G  Merged
+	 * <p>
+	 * Obtain the status of a directory and its children
+	 * recursively.</p>
 	 * 
-	 *   A character in the first column signifies an update to the actual file,
-	 *   while updates to the file's props are shown in the second column.
+	 * @param path Local path of directory to use.
+	 * @throws CmdLineException
+	 */
+	String recursiveStatus(String path) throws CmdLineException {
+		return execString(
+			MessageFormat.format(CMD_RECURSIVE_STATUS, new String[] { path }) + getAuthInfo());
+	}
+
+	/**
+	 * <p>
+	 * Bring changes from the repository into the working copy.</p>
 	 * 
-	 * Valid options:
-	 *   -r [--revision] arg      : revision X or X:Y range.  X or Y can be one of:
-	 *                              {DATE}      date instead of revision number
-	 *                              "HEAD"      latest in repository
-	 *                              "BASE"      base revision of item's working copy
-	 *                              "COMMITTED" revision of item's last commit
-	 *                              "PREV"      revision before item's last commit
-	 *   -N [--non-recursive]     : operate on single directory only
-	 *   -q [--quiet]             : print as little as possible
-	 *   --diff3-cmd arg          : Use ARG as merge command
-	 *   --username arg           : specify a username ARG
-	 *   --password arg           : specify a password ARG
-	 *   --no-auth-cache          : do not cache authentication tokens
-	 *   --non-interactive        : do no interactive prompting
+	 * @param path Local path to possibly update.
+	 * @param revision Optional revision to update to.
 	 */
-	public String update(String path, String revision)
-		throws CmdLineException {
-		return exec(
-			CMD
-				+ MessageFormat.format(
-					CMD_UPDATE,
-					new String[] { validRev(revision), path })
+	String update(String path, String revision) throws CmdLineException {
+		return execString(
+			MessageFormat.format(CMD_UPDATE, new String[] { validRev(revision), path })
 				+ getAuthInfo());
 	}
 
-	public void setUsername(String username) {
+	/**
+	 * <p>
+	 * Sets the username used by this client.</p>
+	 * 
+	 * @param username The username to use for authentication.
+	 */
+	void setUsername(String username) {
 		user = username;
 	}
 
-	public void setPassword(String password) {
+	/**
+	 * <p>
+	 * Sets the password used by this client.</p>
+	 * 
+	 * @param password The password to use for authentication.
+	 */
+	void setPassword(String password) {
 		pass = password;
 	}
 
-	private Process execInternal(String cmd) throws CmdLineException {
+	private Process execProcess(String svnCommand) throws CmdLineException {
 		Runtime rt = Runtime.getRuntime();
 
 		/* run the process */
 		Process proc = null;
 		try {
-			proc = rt.exec(cmd);
+			proc = rt.exec(CMD + svnCommand);
 		} catch (IOException e) {
-            throw new CmdLineException(e);    
+			throw new CmdLineException(e);
 		}
 
 		return proc;
@@ -982,23 +521,27 @@
 	 * @param cmd
 	 * @return String
 	 */
-	private String exec(String cmd) throws CmdLineException {
+	private String execString(String svnCommand) throws CmdLineException {
 		String line;
 		StringBuffer sb = new StringBuffer();
 		StringBuffer sbErr = new StringBuffer();
 
-		Process proc = execInternal(cmd);
+		Process proc = execProcess(svnCommand);
 
 		return Helper.getStringOrFail(proc);
 	}
 
+	private void execVoid(String svnCommand) throws CmdLineException {
+		execString(svnCommand);
+	}
+
 	private String getAuthInfo() {
 		if (user == null || pass == null || user.length() == 0)
 			return "";
 		return MessageFormat.format(AUTH_INFO, new String[] { user, pass });
 	}
 
-	private String validRev(String revision) {
+	private static String validRev(String revision) {
 		return (revision == null || "".equals(revision)) ? "HEAD" : revision;
 	}
 

Modified: trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/Helper.java
==============================================================================
--- trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/Helper.java	(original)
+++ trunk/svnClientAdapter/src/main/org/tigris/subversion/svnclientadapter/commandline/Helper.java	Tue Oct 28 23:07:21 2003
@@ -69,17 +69,16 @@
 
 /**
  * 
- * @author philip schatz
+ * @author Philip Schatz (schatz at tigris)
  */
-public class Helper {
+class Helper {
 
-
-	public static final String NEWLINE = "\n\r";
+	static final String NEWLINE = "\n\r";
 	private static DateFormat df =
 		new SimpleDateFormat("yyyy-MM-dd hh:mm:ss Z");
 
 	/**
-	 * 
+	 * A non-instantiable class
 	 */
 	private Helper() {
 		//non-instantiable

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@subclipse.tigris.org
For additional commands, e-mail: cvs-help@subclipse.tigris.org



