You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pc...@apache.org on 2006/06/28 21:34:40 UTC

svn commit: r417856 [14/22] - in /incubator/openjpa/trunk/openjpa-lib: java/ main/ main/java/ main/java/org/apache/openjpa/lib/ant/ main/java/org/apache/openjpa/lib/conf/ main/java/org/apache/openjpa/lib/jdbc/ main/java/org/apache/openjpa/lib/log/ main...

Modified: incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/CodeFormat.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/CodeFormat.java?rev=417856&r1=415364&r2=417856&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/CodeFormat.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/CodeFormat.java Wed Jun 28 12:34:33 2006
@@ -17,684 +17,628 @@
 
 
 /**
- *	<p>Encapsulates some common Java source code formatting options.  The
- *	class can also be used as a buffer for formatted Java code.</p>
+ *  <p>Encapsulates some common Java source code formatting options.  The
+ *  class can also be used as a buffer for formatted Java code.</p>
  *
- *	@author		Abe White
+ *  @author Abe White
  */
-public final class CodeFormat
-	implements Cloneable
-{
-	private static final String _sep = System.getProperty ("line.separator");
-
-	private String	_tab					= "\t";
-	private boolean _spaceBeforeParen		= false;
-	private boolean _spaceInParen			= false;
-	private boolean _braceOnSameLine		= true;
-	private boolean _braceAtSameTabLevel	= false;
-	private boolean _scoreBeforeFieldName	= false;
-	private int		_linesBetweenSections	= 2;
-
-	private StringBuffer _buf = new StringBuffer ();
-
-
-	/**
-	 *	The number of spaces to use for tabs; 0 means to use actual tab 
-	 *	characters.  Defaults to 0.
-	 */
-	public int getTabSpaces ()
-	{
-		return (_tab.equals ("\t")) ? 0 : _tab.length ();
-	}
-
-
-	/**
-	 *	The number of spaces to use for tabs; 0 means to use actual tab 
-	 *	characters.  Defaults to 0.
-	 */
-	public void setTabSpaces (int tab)
-	{
-		if (tab == 0)
-			_tab = "\t";
-		else
-		{
-			StringBuffer tabs = new StringBuffer (tab);
-			for (int i = 0; i < tab; i++)
-				tabs.append (" ");
-			_tab = tabs.toString ();	
-		}
-	}
-
-
-	/**
-	 *	Whether to place a space before parentheses.  Defaults to false.
-	 */
-	public boolean getSpaceBeforeParen ()
-	{
-		return _spaceBeforeParen;
-	}
-
-
-	/**
-	 *	Whether to place a space before parentheses.  Defaults to false.
-	 */
-	public void setSpaceBeforeParen (boolean spaceBeforeParen)
-	{
-		_spaceBeforeParen = spaceBeforeParen;
-	}
-
-
-	/**
-	 *	Whether to place a space within parentheses.  Defaults to false.
-	 */
-	public boolean getSpaceInParen ()
-	{
-		return _spaceInParen;
-	}
-
-
-	/**
-	 *	Whether to place a space within parentheses.  Defaults to false.
-	 */
-	public void setSpaceInParen (boolean spaceInParen)
-	{
-		_spaceInParen = spaceInParen;
-	}
-
-
-	/**
-	 *	Whether to place opening braces on the same line as the 
-	 *	block declaration, or on the next line.  Defaults to same line.
-	 */
-	public boolean getBraceOnSameLine ()
-	{
-		return _braceOnSameLine;
-	}
-
-
-	/**
-	 *	Whether to place opening braces on the same line as the 
-	 *	block declaration, or on the next line.  Defaults to same line.
-	 */
-	public void setBraceOnSameLine (boolean braceOnSameLine)
-	{
-		_braceOnSameLine = braceOnSameLine;
-	}
-
-
-	/**
-	 *	Whether to place braces at the same tab level as the code within
-	 *	the block.  Defaults to false.
-	 */
-	public boolean getBraceAtSameTabLevel ()
-	{
-		return _braceAtSameTabLevel;
-	}
-
-
-	/**
-	 *	Whether to place braces at the same tab level as the code within
-	 *	the block.  Defaults to false.
-	 */
-	public void setBraceAtSameTabLevel (boolean braceAtSameTabLevel)
-	{
-		_braceAtSameTabLevel = braceAtSameTabLevel;
-	}
-
-
-	/**
-	 *	Whether to place an underscore before private field names.  Defaults
-	 *	to false.
-	 */
-	public boolean getScoreBeforeFieldName ()
-	{
-		return _scoreBeforeFieldName;
-	}
-
-
-	/**
-	 *	Whether to place an underscore before private field names.  Defaults
-	 *	to false.
-	 */
-	public void setScoreBeforeFieldName (boolean scoreBeforeFieldName)
-	{
-		_scoreBeforeFieldName = scoreBeforeFieldName;
-	}
-
-
-	/**
-	 *	The number of empty lines between code sections.  Defaults to 2.
-	 */
-	public int getLinesBetweenSections ()
-	{
-		return _linesBetweenSections;
-	}
-
-
-	/**
-	 *	The number of empty lines between sections.  Defaults to 2.
-	 */
-	public void setLinesBetweenSections (int linesBetweenSections)
-	{
-		_linesBetweenSections = linesBetweenSections;
-	}
-
-
-	/**
-	 *	Return a new line character.
-	 */
-	public String getEndl ()
-	{
-		return getEndl (1);
-	}
-
-
-	/**
-	 *	Return the given number of new line characters.
-	 */
-	public String getEndl (int num)
-	{
-		if (num == 0)
-			return "";
-		if (num == 1)
-			return _sep;
-
-		StringBuffer buf = new StringBuffer (_sep.length () * num);
-		for (int i = 0; i < num; i++)
-			buf.append (_sep);
-		return buf.toString ();
-	}
-
-
-	/**
-	 *	Return the given number of new line characters, followed by
-	 *	the given tab level indentation.
-	 */
-	public String getEndl (int num, int tabs)
-	{
-		return getEndl (num) + getTab (tabs);
-	}
-
-
-	/**
-	 *	Return {#getLinesBetweenSections} + 1 new line characters.
-	 */
-	public String getAfterSection ()
-	{
-		return getEndl (getLinesBetweenSections () + 1);
-	}
-
-
-	/**
-	 *	Open parentheses string.  Users can choose to place spaces before
-	 *	and within parentheses.
-	 */
-	public String getOpenParen (boolean methodOrIf)
-	{
-		if ((_spaceBeforeParen && methodOrIf) && _spaceInParen)
-			return " ( ";
-		if (_spaceBeforeParen && methodOrIf)
-			return " (";
-		if (_spaceInParen)
-			return "( ";
-		return "(";
-	}
-
-
-	/**
-	 *	Close parentheses string.  Users can choose to place spaces within
-	 *	parentheses.
-	 */
-	public String getCloseParen ()
-	{
-		if (_spaceInParen)
-			return " )";
-		return ")";
-	}
-
-
-	/**
-	 *	Paired parentheses for empty method parameters.  Users can choose
-	 *	to place spaces before parentheses.
-	 */
-	public String getParens ()
-	{
-		if (_spaceBeforeParen)
-			return " ()";
-		return "()";
-	}
-
-
-	/**
-	 *	Open brace string.  Users can choose to place braces on the same
-	 *	line, or on a new line, and can choose the indenting level.
-	 *	
-	 *	@param	tabLevel	the tab level of code within the brace
-	 */
-	public String getOpenBrace (int tabLevel)
-	{
-		if (_braceOnSameLine)
-			return " {";
-		if (_braceAtSameTabLevel)
-			return getEndl () + getTab (tabLevel) + "{";
-		return getEndl () + getTab (tabLevel - 1) + "{";
-	}
-
-
-	/**
-	 *	Close brace string.  Users can choose to place braces on the same
-	 *	line, or on a new line, and can choose the indenting level.
-	 *	
-	 *	@param	tabLevel	the tab level of code within the brace
-	 */
-	public String getCloseBrace (int tabLevel)
-	{
-		if (_braceAtSameTabLevel)
-			return getTab (tabLevel) + "}";
-		return getTab (tabLevel - 1) + "}";
-	}
-
-
-	/**
-	 *	Extends declaration.  Uses configuration of {@link #openBrace},
-	 *	but prints "extends" instead of a brace.
-	 */
-	public String getExtendsDec (int tabLevel)
-	{
-		if (_braceOnSameLine)
-			return " extends";
-		if (_braceAtSameTabLevel)
-			return getEndl () + getTab (tabLevel) + "extends";
-		return getEndl () + getTab (tabLevel) + "extends";
-	}
-
-
-	/**
-	 *	Implements declaration.  Uses configuration of {@link #openBrace},
-	 *	but prints "implements" instead of a brace.
-	 */
-	public String getImplementsDec (int tabLevel)
-	{
-		if (_braceOnSameLine)
-			return " implements";
-		if (_braceAtSameTabLevel)
-			return getEndl () + getTab (tabLevel) + "implements";
-		return getEndl () + getTab (tabLevel) + "implements";
-	}	
-
-
-	/**
-	 *	Throws declaration.  Uses configuration of {@link #openBrace},
-	 *	but prints "throws" instead of a brace.
-	 */
-	public String getThrowsDec (int tabLevel)
-	{
-		if (_braceOnSameLine)
-			return " throws";
-		if (_braceAtSameTabLevel)
-			return getEndl () + getTab (tabLevel) + "throws";
-		return getEndl () + getTab (tabLevel) + "throws";
-	}	
-
-
-	/**
-	 *	Tab string.  Users can choose to use spaces or tab characters.
-	 */
-	public String getTab ()
-	{
-		return getTab (1);
-	}
- 
-
-	/**
-	 *	Tab string.  Users can choose to use spaces or tab characters.
-	 *	
-	 *	@param	tabLevel	the number of tabs
-	 */
-	public String getTab (int tabLevel)
-	{
-		if (tabLevel == 0)
-			return "";
-		if (tabLevel == 1)
-			return _tab;
-
-		StringBuffer tabs = new StringBuffer (_tab.length () * tabLevel);
-		for (int i = 0; i < tabLevel; i++)
-			tabs.append (_tab);
-		return tabs.toString ();	
-	}
-
-
-	/**
-	 *	Return the field name for given suggested name, possibly adding
-	 *	leading underscore.
-	 */
-	public String getFieldName (String fieldName)
-	{
-		return (_scoreBeforeFieldName) ? "_" + fieldName : fieldName;
-	}
-
-
-	/**
-	 *	Return the internal code buffer.
-	 */
-	public StringBuffer getBuffer ()
-	{
-		return _buf;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (boolean val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (byte val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (char val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (double val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (float val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (int val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (long val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (short val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 */
-	public CodeFormat append (Object val)
-	{
-		_buf.append (val);
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getEndl()
-	 */
-	public CodeFormat endl ()
-	{
-		_buf.append (getEndl ());
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getEndl(int)
-	 */
-	public CodeFormat endl (int num)
-	{
-		_buf.append (getEndl (num));
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getEndl(int, int)
-	 */
-	public CodeFormat endl (int num, int tabs)
-	{
-		_buf.append (getEndl (num, tabs));
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getAfterSection
-	 */
-	public CodeFormat afterSection ()
-	{
-		_buf.append (getAfterSection ());
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getOpenParen
-	 */
-	public CodeFormat openParen (boolean methodOrIf)
-	{
-		_buf.append (getOpenParen (methodOrIf));
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getCloseParen
-	 */
-	public CodeFormat closeParen ()
-	{
-		_buf.append (getCloseParen ());
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getParens
-	 */
-	public CodeFormat parens ()
-	{
-		_buf.append (getParens ());
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getOpenBrace
-	 */
-	public CodeFormat openBrace (int tabLevel)
-	{
-		_buf.append (getOpenBrace (tabLevel));
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getCloseBrace
-	 */
-	public CodeFormat closeBrace (int tabLevel)
-	{
-		_buf.append (getCloseBrace (tabLevel));
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getExtendsDec
-	 */
-	public CodeFormat extendsDec (int tabLevel)
-	{
-		_buf.append (getExtendsDec (tabLevel));
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getImplementsDec
-	 */
-	public CodeFormat implementsDec (int tabLevel)
-	{
-		_buf.append (getImplementsDec (tabLevel));
-		return this;
-	}	
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getThrowsDec
-	 */
-	public CodeFormat throwsDec (int tabLevel)
-	{
-		_buf.append (getThrowsDec (tabLevel));
-		return this;
-	}	
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getTab
-	 */
-	public CodeFormat tab ()
-	{
-		_buf.append (getTab ());
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getTab
-	 */
-	public CodeFormat tab (int tabLevel)
-	{
-		_buf.append (getTab (tabLevel));
-		return this;
-	}
-
-
-	/**
-	 *	Append the given value to the internal buffer.
-	 *
-	 *	@see	#getFieldName
-	 */
-	public CodeFormat fieldName (String name)
-	{
-		_buf.append (getFieldName (name));
-		return this;
-	}
-
-
-	/**
-	 *	Clear the internal code buffer.
-	 */
-	public void clear ()
-	{
-		_buf = new StringBuffer ();
-	}
-
-
-	/**
-	 *	Return the internal buffer as a string.
-	 */
-	public String toString ()
-	{
-		return _buf.toString ();
-	}
-
-
-	/**
-	 *	Return the length of the internal buffer.
-	 */
-	public int length ()
-	{
-		return _buf.length ();
-	}
-
-
-	/**
-	 *	Make a copy of this code format object with all the same formatting
-	 *	settings.
-	 */
-	public Object clone ()
-	{
-		CodeFormat format = new CodeFormat ();
-		format._tab = _tab;
-		format._spaceBeforeParen = _spaceBeforeParen;
-		format._spaceInParen = _spaceInParen;
-		format._braceOnSameLine = _braceOnSameLine;
-		format._braceAtSameTabLevel = _braceAtSameTabLevel;
-		format._scoreBeforeFieldName = _scoreBeforeFieldName;
-		format._linesBetweenSections = _linesBetweenSections;
-		return format;
-	}
+public final class CodeFormat implements Cloneable {
+    private static final String _sep = System.getProperty("line.separator");
+    private String _tab = "\t";
+    private boolean _spaceBeforeParen = false;
+    private boolean _spaceInParen = false;
+    private boolean _braceOnSameLine = true;
+    private boolean _braceAtSameTabLevel = false;
+    private boolean _scoreBeforeFieldName = false;
+    private int _linesBetweenSections = 2;
+    private StringBuffer _buf = new StringBuffer();
+
+    /**
+     *  The number of spaces to use for tabs; 0 means to use actual tab
+     *  characters.  Defaults to 0.
+     */
+    public int getTabSpaces() {
+        return (_tab.equals("\t")) ? 0 : _tab.length();
+    }
+
+    /**
+     *  The number of spaces to use for tabs; 0 means to use actual tab
+     *  characters.  Defaults to 0.
+     */
+    public void setTabSpaces(int tab) {
+        if (tab == 0) {
+            _tab = "\t";
+        } else {
+            StringBuffer tabs = new StringBuffer(tab);
+
+            for (int i = 0; i < tab; i++)
+                tabs.append(" ");
+
+            _tab = tabs.toString();
+        }
+    }
+
+    /**
+     *  Whether to place a space before parentheses.  Defaults to false.
+     */
+    public boolean getSpaceBeforeParen() {
+        return _spaceBeforeParen;
+    }
+
+    /**
+     *  Whether to place a space before parentheses.  Defaults to false.
+     */
+    public void setSpaceBeforeParen(boolean spaceBeforeParen) {
+        _spaceBeforeParen = spaceBeforeParen;
+    }
+
+    /**
+     *  Whether to place a space within parentheses.  Defaults to false.
+     */
+    public boolean getSpaceInParen() {
+        return _spaceInParen;
+    }
+
+    /**
+     *  Whether to place a space within parentheses.  Defaults to false.
+     */
+    public void setSpaceInParen(boolean spaceInParen) {
+        _spaceInParen = spaceInParen;
+    }
+
+    /**
+     *  Whether to place opening braces on the same line as the
+     *  block declaration, or on the next line.  Defaults to same line.
+     */
+    public boolean getBraceOnSameLine() {
+        return _braceOnSameLine;
+    }
+
+    /**
+     *  Whether to place opening braces on the same line as the
+     *  block declaration, or on the next line.  Defaults to same line.
+     */
+    public void setBraceOnSameLine(boolean braceOnSameLine) {
+        _braceOnSameLine = braceOnSameLine;
+    }
+
+    /**
+     *  Whether to place braces at the same tab level as the code within
+     *  the block.  Defaults to false.
+     */
+    public boolean getBraceAtSameTabLevel() {
+        return _braceAtSameTabLevel;
+    }
+
+    /**
+     *  Whether to place braces at the same tab level as the code within
+     *  the block.  Defaults to false.
+     */
+    public void setBraceAtSameTabLevel(boolean braceAtSameTabLevel) {
+        _braceAtSameTabLevel = braceAtSameTabLevel;
+    }
+
+    /**
+     *  Whether to place an underscore before private field names.  Defaults
+     *  to false.
+     */
+    public boolean getScoreBeforeFieldName() {
+        return _scoreBeforeFieldName;
+    }
+
+    /**
+     *  Whether to place an underscore before private field names.  Defaults
+     *  to false.
+     */
+    public void setScoreBeforeFieldName(boolean scoreBeforeFieldName) {
+        _scoreBeforeFieldName = scoreBeforeFieldName;
+    }
+
+    /**
+     *  The number of empty lines between code sections.  Defaults to 2.
+     */
+    public int getLinesBetweenSections() {
+        return _linesBetweenSections;
+    }
+
+    /**
+     *  The number of empty lines between sections.  Defaults to 2.
+     */
+    public void setLinesBetweenSections(int linesBetweenSections) {
+        _linesBetweenSections = linesBetweenSections;
+    }
+
+    /**
+     *  Return a new line character.
+     */
+    public String getEndl() {
+        return getEndl(1);
+    }
+
+    /**
+     *  Return the given number of new line characters.
+     */
+    public String getEndl(int num) {
+        if (num == 0) {
+            return "";
+        }
+
+        if (num == 1) {
+            return _sep;
+        }
+
+        StringBuffer buf = new StringBuffer(_sep.length() * num);
+
+        for (int i = 0; i < num; i++)
+            buf.append(_sep);
+
+        return buf.toString();
+    }
+
+    /**
+     *  Return the given number of new line characters, followed by
+     *  the given tab level indentation.
+     */
+    public String getEndl(int num, int tabs) {
+        return getEndl(num) + getTab(tabs);
+    }
+
+    /**
+     *  Return {#getLinesBetweenSections} + 1 new line characters.
+     */
+    public String getAfterSection() {
+        return getEndl(getLinesBetweenSections() + 1);
+    }
+
+    /**
+     *  Open parentheses string.  Users can choose to place spaces before
+     *  and within parentheses.
+     */
+    public String getOpenParen(boolean methodOrIf) {
+        if ((_spaceBeforeParen && methodOrIf) && _spaceInParen) {
+            return " ( ";
+        }
+
+        if (_spaceBeforeParen && methodOrIf) {
+            return " (";
+        }
+
+        if (_spaceInParen) {
+            return "( ";
+        }
+
+        return "(";
+    }
+
+    /**
+     *  Close parentheses string.  Users can choose to place spaces within
+     *  parentheses.
+     */
+    public String getCloseParen() {
+        if (_spaceInParen) {
+            return " )";
+        }
+
+        return ")";
+    }
+
+    /**
+     *  Paired parentheses for empty method parameters.  Users can choose
+     *  to place spaces before parentheses.
+     */
+    public String getParens() {
+        if (_spaceBeforeParen) {
+            return " ()";
+        }
+
+        return "()";
+    }
+
+    /**
+     *  Open brace string.  Users can choose to place braces on the same
+     *  line, or on a new line, and can choose the indenting level.
+     *
+     *  @param tabLevel        the tab level of code within the brace
+     */
+    public String getOpenBrace(int tabLevel) {
+        if (_braceOnSameLine) {
+            return " {";
+        }
+
+        if (_braceAtSameTabLevel) {
+            return getEndl() + getTab(tabLevel) + "{";
+        }
+
+        return getEndl() + getTab(tabLevel - 1) + "{";
+    }
+
+    /**
+     *  Close brace string.  Users can choose to place braces on the same
+     *  line, or on a new line, and can choose the indenting level.
+     *
+     *  @param tabLevel        the tab level of code within the brace
+     */
+    public String getCloseBrace(int tabLevel) {
+        if (_braceAtSameTabLevel) {
+            return getTab(tabLevel) + "}";
+        }
+
+        return getTab(tabLevel - 1) + "}";
+    }
+
+    /**
+     *  Extends declaration.  Uses configuration of {@link #openBrace},
+     *  but prints "extends" instead of a brace.
+     */
+    public String getExtendsDec(int tabLevel) {
+        if (_braceOnSameLine) {
+            return " extends";
+        }
+
+        if (_braceAtSameTabLevel) {
+            return getEndl() + getTab(tabLevel) + "extends";
+        }
+
+        return getEndl() + getTab(tabLevel) + "extends";
+    }
+
+    /**
+     *  Implements declaration.  Uses configuration of {@link #openBrace},
+     *  but prints "implements" instead of a brace.
+     */
+    public String getImplementsDec(int tabLevel) {
+        if (_braceOnSameLine) {
+            return " implements";
+        }
+
+        if (_braceAtSameTabLevel) {
+            return getEndl() + getTab(tabLevel) + "implements";
+        }
+
+        return getEndl() + getTab(tabLevel) + "implements";
+    }
+
+    /**
+     *  Throws declaration.  Uses configuration of {@link #openBrace},
+     *  but prints "throws" instead of a brace.
+     */
+    public String getThrowsDec(int tabLevel) {
+        if (_braceOnSameLine) {
+            return " throws";
+        }
+
+        if (_braceAtSameTabLevel) {
+            return getEndl() + getTab(tabLevel) + "throws";
+        }
+
+        return getEndl() + getTab(tabLevel) + "throws";
+    }
+
+    /**
+     *  Tab string.  Users can choose to use spaces or tab characters.
+     */
+    public String getTab() {
+        return getTab(1);
+    }
+
+    /**
+     *  Tab string.  Users can choose to use spaces or tab characters.
+     *
+     *  @param tabLevel        the number of tabs
+     */
+    public String getTab(int tabLevel) {
+        if (tabLevel == 0) {
+            return "";
+        }
+
+        if (tabLevel == 1) {
+            return _tab;
+        }
+
+        StringBuffer tabs = new StringBuffer(_tab.length() * tabLevel);
+
+        for (int i = 0; i < tabLevel; i++)
+            tabs.append(_tab);
+
+        return tabs.toString();
+    }
+
+    /**
+     *  Return the field name for given suggested name, possibly adding
+     *  leading underscore.
+     */
+    public String getFieldName(String fieldName) {
+        return (_scoreBeforeFieldName) ? ("_" + fieldName) : fieldName;
+    }
+
+    /**
+     *  Return the internal code buffer.
+     */
+    public StringBuffer getBuffer() {
+        return _buf;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(boolean val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(byte val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(char val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(double val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(float val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(int val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(long val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(short val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     */
+    public CodeFormat append(Object val) {
+        _buf.append(val);
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getEndl()
+     */
+    public CodeFormat endl() {
+        _buf.append(getEndl());
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getEndl(int)
+     */
+    public CodeFormat endl(int num) {
+        _buf.append(getEndl(num));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getEndl(int, int)
+     */
+    public CodeFormat endl(int num, int tabs) {
+        _buf.append(getEndl(num, tabs));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getAfterSection
+     */
+    public CodeFormat afterSection() {
+        _buf.append(getAfterSection());
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getOpenParen
+     */
+    public CodeFormat openParen(boolean methodOrIf) {
+        _buf.append(getOpenParen(methodOrIf));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getCloseParen
+     */
+    public CodeFormat closeParen() {
+        _buf.append(getCloseParen());
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getParens
+     */
+    public CodeFormat parens() {
+        _buf.append(getParens());
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getOpenBrace
+     */
+    public CodeFormat openBrace(int tabLevel) {
+        _buf.append(getOpenBrace(tabLevel));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getCloseBrace
+     */
+    public CodeFormat closeBrace(int tabLevel) {
+        _buf.append(getCloseBrace(tabLevel));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getExtendsDec
+     */
+    public CodeFormat extendsDec(int tabLevel) {
+        _buf.append(getExtendsDec(tabLevel));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getImplementsDec
+     */
+    public CodeFormat implementsDec(int tabLevel) {
+        _buf.append(getImplementsDec(tabLevel));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getThrowsDec
+     */
+    public CodeFormat throwsDec(int tabLevel) {
+        _buf.append(getThrowsDec(tabLevel));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getTab
+     */
+    public CodeFormat tab() {
+        _buf.append(getTab());
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getTab
+     */
+    public CodeFormat tab(int tabLevel) {
+        _buf.append(getTab(tabLevel));
+
+        return this;
+    }
+
+    /**
+     *  Append the given value to the internal buffer.
+     *
+     *  @see #getFieldName
+     */
+    public CodeFormat fieldName(String name) {
+        _buf.append(getFieldName(name));
+
+        return this;
+    }
+
+    /**
+     *  Clear the internal code buffer.
+     */
+    public void clear() {
+        _buf = new StringBuffer();
+    }
+
+    /**
+     *  Return the internal buffer as a string.
+     */
+    public String toString() {
+        return _buf.toString();
+    }
+
+    /**
+     *  Return the length of the internal buffer.
+     */
+    public int length() {
+        return _buf.length();
+    }
+
+    /**
+     *  Make a copy of this code format object with all the same formatting
+     *  settings.
+     */
+    public Object clone() {
+        CodeFormat format = new CodeFormat();
+        format._tab = _tab;
+        format._spaceBeforeParen = _spaceBeforeParen;
+        format._spaceInParen = _spaceInParen;
+        format._braceOnSameLine = _braceOnSameLine;
+        format._braceAtSameTabLevel = _braceAtSameTabLevel;
+        format._scoreBeforeFieldName = _scoreBeforeFieldName;
+        format._linesBetweenSections = _linesBetweenSections;
+
+        return format;
+    }
 }

Added: incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/EventManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/EventManager.java?rev=417856&view=auto
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/EventManager.java (added)
+++ incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/EventManager.java Wed Jun 28 12:34:33 2006
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openjpa.lib.util;
+
+import java.util.*;
+
+
+/**
+ *  <p>Basic event manager interface.</p>
+ *
+ *  @author Abe White
+ */
+public interface EventManager {
+    /**
+     *  Add an event listener.
+     */
+    public void addListener(Object listener);
+
+    /**
+     *  Remove an event listener.
+     */
+    public boolean removeListener(Object listener);
+
+    /**
+     *  Return whether the given instance is in the list of listeners.
+     */
+    public boolean hasListener(Object listener);
+
+    /**
+     *  Return true if there are any registered listeners.
+     */
+    public boolean hasListeners();
+
+    /**
+     *  Return a read-only list of listeners.
+     */
+    public Collection getListeners();
+
+    /**
+     *  Fire the given event to all listeners, returning any exceptions.
+     */
+    public Exception[] fireEvent(Object event);
+}

Propchange: incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/EventManager.java
------------------------------------------------------------------------------
    svn:executable = *

Modified: incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/Files.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/Files.java?rev=417856&r1=415364&r2=417856&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/Files.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/main/java/org/apache/openjpa/lib/util/Files.java Wed Jun 28 12:34:33 2006
@@ -15,282 +15,303 @@
  */
 package org.apache.openjpa.lib.util;
 
-
-import java.io.*;
-import java.net.*;
-
 import org.apache.commons.lang.exception.*;
 
 import serp.util.*;
 
+import java.io.*;
+
+import java.net.*;
+
 
 /**
- *	<p>Utility operations on files.</p>
+ *  <p>Utility operations on files.</p>
  *
- *	@author		Abe White
- *	@nojavadoc
- */
-public class Files
-{
-	/**
-	 *	Backup the given file to a new file called &lt;file-name&gt;~.  If
-	 *	the file does not exist or a backup could not be created, returns null.
-	 */
-	public static File backup (File file, boolean copy)
-	{
-		if (file == null || !file.exists ())
-			return null;
-
-		// create new file object copy so we don't modify the original
-		File clone = new File (file.getAbsolutePath ());
-		File bk = new File (file.getAbsolutePath () + "~");
-		if (!clone.renameTo (bk))
-			return null;
-		if (copy)
-		{
-			try
-			{	
-				copy (bk, file);
-			}
-			catch (IOException ioe)
-			{
-				throw new NestableRuntimeException (ioe);
-			}
-		}
-		return bk;
-	}
-
-
-	/**
-	 *	Revert the given backup file to the original location.  If the given
-	 *	file's name does not end in '~', the '~' is appended before proceeding.
-	 *	If the backup file does not exist or could not be reverted, 
-	 *	returns null.
-	 */
-	public static File revert (File backup, boolean copy)
-	{
-		if (backup == null)
-			return null;
-		if (!backup.getName ().endsWith ("~"))
-			backup = new File (backup.getPath () + "~");
-		if (!backup.exists ())
-			return null;
-
-		// create new file object copy so we don't modify the original
-		String path = backup.getAbsolutePath ();
-		File clone = new File (path);
-		File orig = new File (path.substring (0, path.length () - 1));
-		if (!clone.renameTo (orig))
-			return null;
-		if (copy)
-		{
-			try
-			{	
-				copy (orig, backup);
-			}
-			catch (IOException ioe)
-			{
-				throw new NestableRuntimeException (ioe);
-			}
-		}
-		return orig;
-	}
-
-
-	/**
-	 *	Return the source file for the given class, or null if the
-	 *	source is not in the CLASSPATH.
-	 */
-	public static File getSourceFile (Class cls)
-	{
-		return getClassFile (cls, ".java");
-	}
-
-
-	/**
-	 *	Return the class file of the given class, or null if the
-	 *	class is in a jar.
- 	 */
-	public static File getClassFile (Class cls)
-	{
-		return getClassFile (cls, ".class");
-	}
-
-
-	/**
-	 *	Return the file for the class resource with the given extension.
-	 */
-	private static File getClassFile (Class cls, String ext)
-	{
-		String name = Strings.getClassName (cls);
-
-		// if it's an inner class, use the parent class name
-		int innerIdx = name.indexOf ('$');
-		if (innerIdx != -1)
-			name = name.substring (0, innerIdx);
-		
-		URL rsrc = cls.getResource (name + ext);
-		if (rsrc != null && rsrc.getProtocol ().equals ("file"))	
-			return new File (URLDecoder.decode (rsrc.getFile ()));
-		return null;
-	}
-
-
-	/**
- 	 *	Return the file for the given package.  If the given base directory 
-	 *	matches the given package structure, it will be used as-is.  If not, 
-	 *	the package structure will be added beneath the base directory.  If
-	 *	the base directory is null, the current working directory will be
-	 *	used as the base.
-	 */
-	public static File getPackageFile (File base, String pkg, boolean mkdirs)
-	{
-		if (base == null)
-			base = new File (System.getProperty ("user.dir"));
-		if (pkg == null || pkg.length () == 0)
-		{
-			if (mkdirs && !base.exists ())
-				base.mkdirs ();
-			return base;
-		}
-
-		pkg = pkg.replace ('.', File.separatorChar);
-		File file = null;
-		try
-		{
-			if (base.getCanonicalPath ().endsWith (pkg))
-				file = base;
-			else
-				file = new File (base, pkg);	
-		}
-		catch (IOException ioe)
-		{
-			throw new NestableRuntimeException (ioe);
-		}
-
-		if (mkdirs && !file.exists ())
-			file.mkdirs ();
-		return file;
-	}
-
-
-	/**
-	 *	Check the given string for a matching file.  The string is first 
-	 *	tested to see if it is an existing file path.  If it does not
-	 *	represent an existing file, it is checked as a resource name of a
-	 *	file.  If no resource exists, then it is interpreted as a path
-	 *	to a file that does not exist yet.
-	 *
-	 *	@param	name	the file path or resource name
-	 *	@param	loader	a class loader to use in resource lookup, or null
-	 *					to use the thread's context loader	
-	 */
-	public static File getFile (String name, ClassLoader loader)
-	{
-		if (name == null)
-			return null;
-
-		File file = new File (name);
-		if (file.exists ())
-			return file;
-
-		if (loader == null)
-			loader = Thread.currentThread ().getContextClassLoader ();
-		URL url = loader.getResource (name);
-		if (url != null)
-		{
-			String urlFile = url.getFile ();
-			if (urlFile != null)
-			{
-				File rsrc = new File (URLDecoder.decode (urlFile));
-				if (rsrc.exists ())
-					return rsrc;
-			}
-		}
-
-		// go back to original non-existant file path
-		return file;
-	}
-
-
-	/**
-	 *	Return a writer to the stream (stdout or stderr) or file named by the 
-	 *	given string.
-	 *
-	 *	@see	#getFile
-	 */
-	public static Writer getWriter (String file, ClassLoader loader)
-		throws IOException
-	{
-		if (file == null)
-			return null;
-		if ("stdout".equals (file))
-			return new PrintWriter (System.out);
-		if ("stderr".equals (file))
-			return new PrintWriter (System.err);
-		try
-		{
-			return new FileWriter (getFile (file, loader));
-		}
-		catch (IOException ioe)
-		{
-			throw new NestableRuntimeException (ioe);
-		}
-	}
-
-
-	/**
-	 *	Return an output stream to the stream (stdout or stderr) or file named 
-	 *	by the given string.
-	 *
-	 *	@see	#getFile
-	 */
-	public static OutputStream getOutputStream (String file, ClassLoader loader)
-	{
-		if (file == null)
-			return null;
-		if ("stdout".equals (file))
-			return System.out;
-		if ("stderr".equals (file))
-			return System.err;
-		try
-		{
-			return new FileOutputStream (getFile (file, loader));
-		}
-		catch (IOException ioe)
-		{
-			throw new NestableRuntimeException (ioe);
-		}
-	}
-
-
-	/**
-	 *	Copy a file.  Return false if <code>from</code> does not exist.
-	 */
-	public static boolean copy (File from, File to)
-		throws IOException
-	{
-		if (from == null || to == null || !from.exists ())
-			return false;
-		
-		FileInputStream in = null;
-		FileOutputStream out = null;
-		try
-		{
-			in = new FileInputStream (from);
-			BufferedInputStream inbuf = new BufferedInputStream (in);
-			out = new FileOutputStream (to);
-			BufferedOutputStream outbuf = new BufferedOutputStream (out);
-			for (int b; (b = inbuf.read ()) != -1; outbuf.write (b));
-			outbuf.flush ();
-			return true;
-		}
-		finally
-		{
-			if (in != null)
-				try { in.close (); } catch (Exception e) {}
-			if (out != null)
-				try { out.close (); } catch (Exception e) {}
-		}
-	}
+ *  @author Abe White
+ *  @nojavadoc */
+public class Files {
+    /**
+     *  Backup the given file to a new file called &lt;file-name&gt;~.  If
+     *  the file does not exist or a backup could not be created, returns null.
+     */
+    public static File backup(File file, boolean copy) {
+        if ((file == null) || !file.exists()) {
+            return null;
+        }
+
+        // create new file object copy so we don't modify the original
+        File clone = new File(file.getAbsolutePath());
+        File bk = new File(file.getAbsolutePath() + "~");
+
+        if (!clone.renameTo(bk)) {
+            return null;
+        }
+
+        if (copy) {
+            try {
+                copy(bk, file);
+            } catch (IOException ioe) {
+                throw new NestableRuntimeException(ioe);
+            }
+        }
+
+        return bk;
+    }
+
+    /**
+     *  Revert the given backup file to the original location.  If the given
+     *  file's name does not end in '~', the '~' is appended before proceeding.
+     *  If the backup file does not exist or could not be reverted,
+     *  returns null.
+     */
+    public static File revert(File backup, boolean copy) {
+        if (backup == null) {
+            return null;
+        }
+
+        if (!backup.getName().endsWith("~")) {
+            backup = new File(backup.getPath() + "~");
+        }
+
+        if (!backup.exists()) {
+            return null;
+        }
+
+        // create new file object copy so we don't modify the original
+        String path = backup.getAbsolutePath();
+        File clone = new File(path);
+        File orig = new File(path.substring(0, path.length() - 1));
+
+        if (!clone.renameTo(orig)) {
+            return null;
+        }
+
+        if (copy) {
+            try {
+                copy(orig, backup);
+            } catch (IOException ioe) {
+                throw new NestableRuntimeException(ioe);
+            }
+        }
+
+        return orig;
+    }
+
+    /**
+     *  Return the source file for the given class, or null if the
+     *  source is not in the CLASSPATH.
+     */
+    public static File getSourceFile(Class cls) {
+        return getClassFile(cls, ".java");
+    }
+
+    /**
+     *  Return the class file of the given class, or null if the
+     *  class is in a jar.
+      */
+    public static File getClassFile(Class cls) {
+        return getClassFile(cls, ".class");
+    }
+
+    /**
+     *  Return the file for the class resource with the given extension.
+     */
+    private static File getClassFile(Class cls, String ext) {
+        String name = Strings.getClassName(cls);
+
+        // if it's an inner class, use the parent class name
+        int innerIdx = name.indexOf('$');
+
+        if (innerIdx != -1) {
+            name = name.substring(0, innerIdx);
+        }
+
+        URL rsrc = cls.getResource(name + ext);
+
+        if ((rsrc != null) && rsrc.getProtocol().equals("file")) {
+            return new File(URLDecoder.decode(rsrc.getFile()));
+        }
+
+        return null;
+    }
+
+    /**
+      *  Return the file for the given package.  If the given base directory
+     *  matches the given package structure, it will be used as-is.  If not,
+     *  the package structure will be added beneath the base directory.  If
+     *  the base directory is null, the current working directory will be
+     *  used as the base.
+     */
+    public static File getPackageFile(File base, String pkg, boolean mkdirs) {
+        if (base == null) {
+            base = new File(System.getProperty("user.dir"));
+        }
+
+        if ((pkg == null) || (pkg.length() == 0)) {
+            if (mkdirs && !base.exists()) {
+                base.mkdirs();
+            }
+
+            return base;
+        }
+
+        pkg = pkg.replace('.', File.separatorChar);
+
+        File file = null;
+
+        try {
+            if (base.getCanonicalPath().endsWith(pkg)) {
+                file = base;
+            } else {
+                file = new File(base, pkg);
+            }
+        } catch (IOException ioe) {
+            throw new NestableRuntimeException(ioe);
+        }
+
+        if (mkdirs && !file.exists()) {
+            file.mkdirs();
+        }
+
+        return file;
+    }
+
+    /**
+     *  Check the given string for a matching file.  The string is first
+     *  tested to see if it is an existing file path.  If it does not
+     *  represent an existing file, it is checked as a resource name of a
+     *  file.  If no resource exists, then it is interpreted as a path
+     *  to a file that does not exist yet.
+     *
+     *  @param name        the file path or resource name
+     *  @param loader        a class loader to use in resource lookup, or null
+     *                                  to use the thread's context loader
+     */
+    public static File getFile(String name, ClassLoader loader) {
+        if (name == null) {
+            return null;
+        }
+
+        File file = new File(name);
+
+        if (file.exists()) {
+            return file;
+        }
+
+        if (loader == null) {
+            loader = Thread.currentThread().getContextClassLoader();
+        }
+
+        URL url = loader.getResource(name);
+
+        if (url != null) {
+            String urlFile = url.getFile();
+
+            if (urlFile != null) {
+                File rsrc = new File(URLDecoder.decode(urlFile));
+
+                if (rsrc.exists()) {
+                    return rsrc;
+                }
+            }
+        }
+
+        // go back to original non-existant file path
+        return file;
+    }
+
+    /**
+     *  Return a writer to the stream (stdout or stderr) or file named by the
+     *  given string.
+     *
+     *  @see #getFile
+     */
+    public static Writer getWriter(String file, ClassLoader loader)
+        throws IOException {
+        if (file == null) {
+            return null;
+        }
+
+        if ("stdout".equals(file)) {
+            return new PrintWriter(System.out);
+        }
+
+        if ("stderr".equals(file)) {
+            return new PrintWriter(System.err);
+        }
+
+        try {
+            return new FileWriter(getFile(file, loader));
+        } catch (IOException ioe) {
+            throw new NestableRuntimeException(ioe);
+        }
+    }
+
+    /**
+     *  Return an output stream to the stream (stdout or stderr) or file named
+     *  by the given string.
+     *
+     *  @see #getFile
+     */
+    public static OutputStream getOutputStream(String file, ClassLoader loader) {
+        if (file == null) {
+            return null;
+        }
+
+        if ("stdout".equals(file)) {
+            return System.out;
+        }
+
+        if ("stderr".equals(file)) {
+            return System.err;
+        }
+
+        try {
+            return new FileOutputStream(getFile(file, loader));
+        } catch (IOException ioe) {
+            throw new NestableRuntimeException(ioe);
+        }
+    }
+
+    /**
+     *  Copy a file.  Return false if <code>from</code> does not exist.
+     */
+    public static boolean copy(File from, File to) throws IOException {
+        if ((from == null) || (to == null) || !from.exists()) {
+            return false;
+        }
+
+        FileInputStream in = null;
+        FileOutputStream out = null;
+
+        try {
+            in = new FileInputStream(from);
+
+            BufferedInputStream inbuf = new BufferedInputStream(in);
+            out = new FileOutputStream(to);
+
+            BufferedOutputStream outbuf = new BufferedOutputStream(out);
+
+            for (int b; (b = inbuf.read()) != -1; outbuf.write(b))
+                ;
+
+            outbuf.flush();
+
+            return true;
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (Exception e) {
+                }
+            }
+
+            if (out != null) {
+                try {
+                    out.close();
+                } catch (Exception e) {
+                }
+            }
+        }
+    }
 }