From: <ju...@us...> - 2007-02-23 15:40:29
|
Revision: 3928 http://svn.sourceforge.net/smartfrog/?rev=3928&view=rev Author: julgui Date: 2007-02-23 07:40:26 -0800 (Fri, 23 Feb 2007) Log Message: ----------- Better exception printing Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java 2007-02-23 15:08:52 UTC (rev 3927) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java 2007-02-23 15:40:26 UTC (rev 3928) @@ -226,13 +226,15 @@ public String toString(String nm) { StringBuffer strb = new StringBuffer(); strb.append (""+ shortClassName() +": "); - strb.append ((((getMessage() == null) ? "" : getMessage()))); - if (getMessage()==null){ - strb.append ((getCause() == null) ? "" : getCauseMessage(nm)); + + if ((getMessage()!=null)&& (!((getCause().toString().equals(getMessage()))))) { + //Only print message when message != cause + strb.append ((((getMessage() == null) ? "" : getMessage()))); + strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); } else { - strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + - getCauseMessage(nm)))); + strb.append ((((getCause() == null) ) ? "" : (getCauseMessage(nm)))); } + strb.append ((((this.containsKey(REFERENCE) && (this.get(REFERENCE)!=null) &&(((Reference)this.get(REFERENCE)).size()!=0))) Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java 2007-02-23 15:08:52 UTC (rev 3927) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java 2007-02-23 15:40:26 UTC (rev 3928) @@ -323,8 +323,9 @@ if (getMessage()==null){ strb.append ((getCause() == null) ? "" : getCauseMessage(nm)); } else { - strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + - getCauseMessage(nm)))); + if (!((getCause().toString().equals(getMessage())))) { + strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); + } } strb.append ((((this.containsKey(DATA))) ? (nm+DATA+ ": " + get(DATA)) : "" )); @@ -373,9 +374,15 @@ public String toStringAll(String nm) { StringBuffer strb = new StringBuffer(); strb.append ("ALL: "+ shortClassName() +": "); - strb.append ((((getMessage() == null) ? "" : getMessage()))); - strb.append ((((getCause() == null) ) ? "" : (nm+" cause: " + - getCause()))); + + if ((getMessage()!=null)&& (!((getCause().toString().equals(getMessage()))))) { + //Only print message when message != cause + strb.append (getMessage()); + strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); + } else { + strb.append ((((getCause() == null) ) ? "" : (getCauseMessage(nm)))); + } + strb.append ((((cxt == null) || (cxt.size() == 0)) ? "" : (nm+" context: " + nm +cxt.toString()+nm))); return strb.toString(); Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java 2007-02-23 15:08:52 UTC (rev 3927) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java 2007-02-23 15:40:26 UTC (rev 3928) @@ -454,11 +454,15 @@ strb.append((((this.containsKey(DATA))) ? (nm+DATA+ ": " + get(DATA)) : "")); - //strb.append ((((getMessage() == null) ? "" : getMessage()))); - if (getMessage()==null){ - strb.append ((getCause() == null) ? nm+"Cause: " : getCauseMessage(nm)); - } else { - strb.append (nm+ "Cause: "+getMessage()); + boolean indent = !strb.toString().equals(":: "); + if ((getMessage()!=null)&& (!((getCause().toString().equals(getMessage()))))) { + //Only print message when message != cause + strb.append ((indent ) ? nm : ""); + strb.append (getMessage()); + strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); + } else { + strb.append (((((getCause() != null)&&indent) ) ? nm : "")); + strb.append ((((getCause() == null) ) ? "" : (getCauseMessage(nm)))); } } catch (Throwable thr) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2007-02-23 16:41:21
|
Revision: 3929 http://svn.sourceforge.net/smartfrog/?rev=3929&view=rev Author: julgui Date: 2007-02-23 08:40:32 -0800 (Fri, 23 Feb 2007) Log Message: ----------- Better exception printing Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java 2007-02-23 15:40:26 UTC (rev 3928) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java 2007-02-23 16:40:32 UTC (rev 3929) @@ -227,10 +227,14 @@ StringBuffer strb = new StringBuffer(); strb.append (""+ shortClassName() +": "); - if ((getMessage()!=null)&& (!((getCause().toString().equals(getMessage()))))) { - //Only print message when message != cause - strb.append ((((getMessage() == null) ? "" : getMessage()))); - strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); + if (getMessage()!=null){ + if ((getCause()!=null) && (getCause().toString().equals(getMessage()))) { + strb.append (getCauseMessage(nm)); + } else { + //Only print message when message != cause + strb.append (getMessage()); + strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); + } } else { strb.append ((((getCause() == null) ) ? "" : (getCauseMessage(nm)))); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java 2007-02-23 15:40:26 UTC (rev 3928) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java 2007-02-23 16:40:32 UTC (rev 3929) @@ -319,13 +319,16 @@ public String toString (String nm) { StringBuffer strb = new StringBuffer(); strb.append (shortClassName() +":: "); - strb.append ((((getMessage() == null) ? "" : getMessage()))); - if (getMessage()==null){ - strb.append ((getCause() == null) ? "" : getCauseMessage(nm)); - } else { - if (!((getCause().toString().equals(getMessage())))) { + if (getMessage()!=null){ + if ((getCause()!=null) && (getCause().toString().equals(getMessage()))) { + strb.append (getCauseMessage(nm)); + } else { + //Only print message when message != cause + strb.append (getMessage()); strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); } + } else { + strb.append ((((getCause() == null) ) ? "" : (getCauseMessage(nm)))); } strb.append ((((this.containsKey(DATA))) ? (nm+DATA+ ": " + get(DATA)) : "" )); Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java 2007-02-23 15:40:26 UTC (rev 3928) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java 2007-02-23 16:40:32 UTC (rev 3929) @@ -455,11 +455,16 @@ (nm+DATA+ ": " + get(DATA)) : "")); boolean indent = !strb.toString().equals(":: "); - if ((getMessage()!=null)&& (!((getCause().toString().equals(getMessage()))))) { - //Only print message when message != cause - strb.append ((indent ) ? nm : ""); - strb.append (getMessage()); - strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); + if (getMessage()!=null) { + if ((getCause()!=null) &&(getCause().toString().equals(getMessage()))) { + strb.append (((((getCause() != null)&&indent) ) ? nm : "")); + strb.append ((((getCause() == null) ) ? "" : (getCauseMessage(nm)))); + } else { + //Only print message when message != cause + strb.append ((indent ) ? nm : ""); + strb.append (getMessage()); + strb.append ((((getCause() == null) ) ? "" : (nm+"cause: " + getCauseMessage(nm)))); + } } else { strb.append (((((getCause() != null)&&indent) ) ? nm : "")); strb.append ((((getCause() == null) ) ? "" : (getCauseMessage(nm)))); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2007-02-28 11:56:03
|
Revision: 3944 http://svn.sourceforge.net/smartfrog/?rev=3944&view=rev Author: julgui Date: 2007-02-28 03:55:12 -0800 (Wed, 28 Feb 2007) Log Message: ----------- Added hascode() and equals(). Modified: sfAttributeForEqual checks for equality Method sfAttributeKeyFor checks for ==. New method sfContainsRefValue() that checks for == Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java 2007-02-28 10:58:50 UTC (rev 3943) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java 2007-02-28 11:55:12 UTC (rev 3944) @@ -128,6 +128,7 @@ * @param value value to find in table * * @return key for value or null if none + * @deprecated sfAttributeKeyFor should be used instead. */ public Object keyFor(Object value); @@ -145,16 +146,27 @@ */ public Object clone(); + /** - * Returns the first attribute which has a particular value in the table. + * Returns the first attribute which has a particular equal value in the table. * * @param value value to find in table * * @return attibute object for value or null if none */ - public Object sfAttributeFor(Object value); + public Object sfAttributeForEqual(Object value); /** + * Returns the attribute key for a given value. + * + * @param value value to look up the key for + * + * @return key for given value or null if not found + * + */ + public Object sfAttributeKeyFor(Object value); + + /** * Returns true if the context contains value. * Replaces contains() * @@ -222,17 +234,6 @@ /** - * Returns the attribute key for a given value. - * - * @param value value to look up the key for - * - * @return key for given value or null if not found - * - */ - public Object sfAttributeKeyFor(Object value); - - - /** * Replace named attribute in context. If attribute is not * present it is added to the context. * Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2007-02-28 10:58:50 UTC (rev 3943) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2007-02-28 11:55:12 UTC (rev 3944) @@ -56,23 +56,32 @@ /** * Returns the first key for which the value is the given one. - * Deprecated: replaced by sfAttributeFor(value); + * Deprecated: replaced by sfAttributeKeyFor(value); * @param value value to look up * * @return key for value or null if not found */ public Object keyFor(Object value) { - return sfAttributeFor(value); + if (!contains(value)) { + return null; + } + for (Enumeration e = keys(); e.hasMoreElements();) { + Object theKey = e.nextElement(); + if (get(theKey)==(value)) { + return theKey; + } + } + return null; } /** - * Returns the first attribute which has a particular value in the table. + * Returns the first attribute which has an equal value to "value" in the table. * * @param value value to find in table * * @return attibute object for value or null if none */ - public Object sfAttributeFor(Object value){ + public Object sfAttributeForEqual(Object value){ if (!contains(value)) { return null; } @@ -244,7 +253,7 @@ /** - * Returns the attribute key given a value. + * * Returns the first key for which the value is the given one. * * @param value value to look up key for * @@ -413,6 +422,26 @@ } /** + * Compares the specified Object with this Context Tags for equality + * + * @param o object to be compared for equality with this Context + * @return true if the specified Object is equal to this Map. + */ + public synchronized boolean equalsTags (Object o) { + if (o == attributeTags) + return true; + + if (!(o instanceof Map)) + return false; + + if (!attributeTags.equals(o)){ + return false; + } + + return true; + } + + /** * Returns a string representation of the component. This will give a * description of the component which is parseable, and deployable * again... Unless someone removed attributes which are essential to @@ -625,9 +654,8 @@ } - // /////////////////////////////////////////////////////////////////////////////////// - // reimplementation of the hash table and oreder hash table methods to deal with the tags + // reimplementation of the hash table and order hash table methods to deal with the tags // /////////////////////////////////////////////////////////////////////////////////// @@ -734,4 +762,45 @@ // this is already copying attributeTags return super.copy(); } + + + /** + * Compares the specified Object with this Context for equality, + * as per the definition in the Map interface. + * + * @param o object to be compared for equality with this Context + * @return true if the specified Object is equal to this Map. + */ + public synchronized boolean equals(Object o) { + + if (o == this) + return true; + + if (!(o instanceof Context)) + return false; + + // Compares HashMap + if (!super.equals(o)) + return false; + + + // Compares Tags + if (!((o instanceof ContextImpl) && (((ContextImpl)o).equalsTags(attributeTags)))){ + return false; + } + return true; + } + + /** + * Returns the hash code value for this Context + * + */ + public synchronized int hashCode() { + // Simple hashcode using Joshua Bloch's recommendation + int result = 17; + result = 37 * result + attributeTags.hashCode(); + result = 37 * result + super.hashCode(); + return result; + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2007-02-28 13:27:32
|
Revision: 3946 http://svn.sourceforge.net/smartfrog/?rev=3946&view=rev Author: julgui Date: 2007-02-28 05:27:29 -0800 (Wed, 28 Feb 2007) Log Message: ----------- Added hashcode and equals. New method sfContainsRefValue() Renamed sfAttributeFor to sfAttributeKeyForEqual(value) Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java 2007-02-28 13:22:01 UTC (rev 3945) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java 2007-02-28 13:27:29 UTC (rev 3946) @@ -124,7 +124,6 @@ /** * Returns the first key which has a particular value in the table. - * Deprecated: sfAttributeFor should be used instead. * @param value value to find in table * * @return key for value or null if none @@ -148,15 +147,26 @@ /** - * Returns the first attribute which has a particular equal value in the table. + * Returns the first attribute which has a particular value "equal" in the table. * * @param value value to find in table * * @return attibute object for value or null if none */ - public Object sfAttributeForEqual(Object value); + public Object sfAttributeKeyForEqual(Object value); /** + * Returns true if the context contains value reference (==). + * Replaces contains() + * @param value object to check + * + * @return true if context contains value, false otherwise + * @throws NullPointerException if the value is <code>null</code>. + */ + public boolean sfContainsRefValue(Object value); + + /** + * Returns the attribute key for a given value. * * @param value value to look up the key for @@ -167,10 +177,11 @@ public Object sfAttributeKeyFor(Object value); /** + * Returns true if the context contains value. * Replaces contains() * - * @param value object to check + * @param value object to check for equality * * @return true if context contains value, false otherwise */ Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2007-02-28 13:22:01 UTC (rev 3945) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2007-02-28 13:27:29 UTC (rev 3946) @@ -32,8 +32,7 @@ * enumeration returning methods. * */ -public class ContextImpl extends OrderedHashtable implements Context, - Serializable, PrettyPrinting, Copying { +public class ContextImpl extends OrderedHashtable implements Context, Serializable, PrettyPrinting, Copying { Map attributeTags = new HashMap(); @@ -55,40 +54,31 @@ } /** - * Returns the first key for which the value is the given one. - * Deprecated: replaced by sfAttributeKeyFor(value); + * Returns the first key for which the value is the given one (==). * @param value value to look up * * @return key for value or null if not found + * @deprecated replaced by sfAttributeKeyFor(value); */ public Object keyFor(Object value) { - if (!contains(value)) { - return null; - } - for (Enumeration e = keys(); e.hasMoreElements();) { - Object theKey = e.nextElement(); - if (get(theKey)==(value)) { - return theKey; - } - } - return null; + + return sfAttributeKeyFor(value); } - - /** - * Returns the first attribute which has an equal value to "value" in the table. + /** + * Returns the first attribute which has a particular "equal" value in the table. * * @param value value to find in table * * @return attibute object for value or null if none */ - public Object sfAttributeForEqual(Object value){ + public Object sfAttributeKeyForEqual(Object value){ if (!contains(value)) { return null; } for (Enumeration e = keys(); e.hasMoreElements();) { Object theKey = e.nextElement(); - if (get(theKey) == (value)) { + if (get(theKey).equals(value)) { return theKey; } } @@ -96,7 +86,7 @@ } /** - * Returns true if the context contains value. + * Returns true if the context contains an equal value. * Replaces contains() * @param value object to check * @@ -106,6 +96,26 @@ return containsValue(value); } + /** + * Returns true if the context contains value reference (==). + * Replaces contains() + * @param value object to check + * + * @return true if context contains value, false otherwise + * @throws NullPointerException if the value is <code>null</code>. + */ + public boolean sfContainsRefValue(Object value){ + if (value == null) { + throw new NullPointerException(); + } + for (Enumeration e = keys(); e.hasMoreElements();) { + Object theKey = e.nextElement(); + if (get(theKey) == (value)) { + return true; + } + } + return false; + } /** * Returns true if the context contains attribute. @@ -253,7 +263,7 @@ /** - * * Returns the first key for which the value is the given one. + * Returns the attribute key given a value. Uses == for the comparison * * @param value value to look up key for * @@ -262,7 +272,17 @@ // perhaps this should be synchronized... but causes problems with sfCompleteName if it is public Object sfAttributeKeyFor(Object value) { - return this.keyFor(value); + if (!contains(value)) { + return null; + } + for (Enumeration e = keys(); e.hasMoreElements();) { + Object theKey = e.nextElement(); + + if (get(theKey) == (value)) { + return theKey; + } + } + return null; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ali...@us...> - 2007-05-03 16:16:28
|
Revision: 4122 http://svn.sourceforge.net/smartfrog/?rev=4122&view=rev Author: alistair_c Date: 2007-05-03 09:16:26 -0700 (Thu, 03 May 2007) Log Message: ----------- changed exception to SmartfrogContextException in Tags and RemoteTags interfaces Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/RemoteTags.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Tags.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/RemoteTags.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/RemoteTags.java 2007-05-02 11:18:03 UTC (rev 4121) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/RemoteTags.java 2007-05-03 16:16:26 UTC (rev 4122) @@ -21,7 +21,7 @@ * * @throws SmartFrogException the attribute does not exist; */ - public void sfSetTags(Object name, Set tags) throws SmartFrogException, RemoteException; + public void sfSetTags(Object name, Set tags) throws SmartFrogContextException, RemoteException; /** * Get the TAGS for an attribute. TAGS are simply uninterpreted strings associated @@ -32,7 +32,7 @@ * * @throws SmartFrogException the attribute does not exist; */ - public Set sfGetTags(Object name) throws SmartFrogException, RemoteException; + public Set sfGetTags(Object name) throws SmartFrogContextException, RemoteException; /** * add a tag to the tag set of an attribute @@ -42,7 +42,7 @@ * * @throws SmartFrogException the attribute does not exist; */ - public void sfAddTag(Object name, String tag) throws SmartFrogException, RemoteException; + public void sfAddTag(Object name, String tag) throws SmartFrogContextException, RemoteException; /** * remove a tag from the tag set of an attribute if it exists @@ -53,7 +53,7 @@ * @throws SmartFrogException the attribute does not exist; * */ - public void sfRemoveTag(Object name, String tag) throws SmartFrogException, RemoteException; + public void sfRemoveTag(Object name, String tag) throws SmartFrogContextException, RemoteException; /** * add a tag to the tag set of an attribute @@ -63,7 +63,7 @@ * @throws SmartFrogException * the attribute does not exist; */ - public void sfAddTags(Object name, Set tags) throws SmartFrogException, RemoteException; + public void sfAddTags(Object name, Set tags) throws SmartFrogContextException, RemoteException; /** * remove a tag from the tag set of an attribute if it exists @@ -73,7 +73,7 @@ * @throws SmartFrogException * the attribute does not exist; */ - public void sfRemoveTags(Object name, Set tags) throws SmartFrogException, RemoteException; + public void sfRemoveTags(Object name, Set tags) throws SmartFrogContextException, RemoteException; /** * Return whether or not a tag is in the list of tags for an attribute @@ -84,6 +84,6 @@ * @return whether or not the attribute has that tag * @throws SmartFrogException the attribute does not exist */ - public boolean sfContainsTag(Object name, String tag) throws SmartFrogException, RemoteException; + public boolean sfContainsTag(Object name, String tag) throws SmartFrogContextException, RemoteException; } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Tags.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Tags.java 2007-05-02 11:18:03 UTC (rev 4121) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Tags.java 2007-05-03 16:16:26 UTC (rev 4122) @@ -19,7 +19,7 @@ * * @throws SmartFrogException the attribute does not exist; */ - public void sfSetTags(Object name, Set tags) throws SmartFrogException; + public void sfSetTags(Object name, Set tags) throws SmartFrogContextException; /** * Get the TAGS for an attribute. TAGS are simply uninterpreted strings associated @@ -30,7 +30,7 @@ * * @throws SmartFrogException the attribute does not exist; */ - public Set sfGetTags(Object name) throws SmartFrogException; + public Set sfGetTags(Object name) throws SmartFrogContextException; /** * add a tag to the tag set of an attribute @@ -40,7 +40,7 @@ * * @throws SmartFrogContextException the attribute does not exist; */ - public void sfAddTag(Object name, String tag) throws SmartFrogException; + public void sfAddTag(Object name, String tag) throws SmartFrogContextException; /** * remove a tag from the tag set of an attribute if it exists @@ -51,7 +51,7 @@ * @throws SmartFrogException the attribute does not exist; * */ - public void sfRemoveTag(Object name, String tag) throws SmartFrogException; + public void sfRemoveTag(Object name, String tag) throws SmartFrogContextException; /** * add a tag to the tag set of an attribute @@ -61,7 +61,7 @@ * @throws SmartFrogException * the attribute does not exist; */ - public void sfAddTags(Object name, Set tags) throws SmartFrogException; + public void sfAddTags(Object name, Set tags) throws SmartFrogContextException; /** * remove a tag from the tag set of an attribute if it exists @@ -71,7 +71,7 @@ * @throws SmartFrogException * the attribute does not exist; */ - public void sfRemoveTags(Object name, Set tags) throws SmartFrogException; + public void sfRemoveTags(Object name, Set tags) throws SmartFrogContextException; /** * Return an iterator over the tags for an attribute @@ -81,7 +81,7 @@ * * @throws SmartFrogException the attribute does not exist; */ - public Iterator sfTags(Object name) throws SmartFrogException; + public Iterator sfTags(Object name) throws SmartFrogContextException; /** * Return whether or not a tag is in the list of tags for an attribute @@ -92,5 +92,5 @@ * @return whether or not the attribute has that tag * @throws SmartFrogException the attribute does not exist */ - public boolean sfContainsTag(Object name, String tag) throws SmartFrogException; + public boolean sfContainsTag(Object name, String tag) throws SmartFrogContextException; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2007-06-14 13:26:41
|
Revision: 4325 http://svn.sourceforge.net/smartfrog/?rev=4325&view=rev Author: julgui Date: 2007-06-14 06:26:38 -0700 (Thu, 14 Jun 2007) Log Message: ----------- DefaultDumper update. Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DefaultDumper.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Dumper.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DefaultDumper.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DefaultDumper.java 2007-06-14 13:11:41 UTC (rev 4324) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DefaultDumper.java 2007-06-14 13:26:38 UTC (rev 4325) @@ -29,6 +29,8 @@ import org.smartfrog.sfcore.reference.HereReferencePart; import org.smartfrog.sfcore.prim.Dump; import org.smartfrog.sfcore.prim.Prim; +import org.smartfrog.sfcore.logging.LogSF; +import org.smartfrog.sfcore.logging.LogFactory; import java.rmi.RemoteException; import java.util.*; @@ -40,13 +42,22 @@ public class DefaultDumper implements Dump, Dumper { - Reference rootRef = null; + private Reference rootRef = null; - ComponentDescription cd = null; + private ComponentDescription cd = null; - protected Long visitingLock = new Long(1); //Lock - protected Long visitingLocks = new Long(1); //Counter + private Long visitingLock = new Long(1); //Lock + private Long visitingLocks = new Long(1); //Counter + + /** + * Special keys that are created by the runtime and that should be removed to have a deployable description. + * Value: @value + */ + private String[] sfKeysToBeRemoved = new String[] {"sfHost", "sfProcess", "sfLog", "sfBootDate","sfParseTime","sfDeployTime"}; + + /** Default timeout (@value msecs), in large distributed deployments + * it could need more time to reach the final result*/ long timeout = (1*30*15*1000L); //(2*60*1000L); @@ -54,7 +65,7 @@ try { rootRef = from.sfCompleteName(); } catch (RemoteException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + if (sfLog().isErrorEnabled()) sfLog().error(e); } } @@ -79,29 +90,51 @@ } visiting(from.sfCompleteName().toString(),numberOfChildren); Context stateCopy = (Context)((Context)state).clone(); + + //Remove non desired sf keys + for (int i=0; i< this.sfKeysToBeRemoved.length; i++){ + if (stateCopy.sfContainsAttribute(sfKeysToBeRemoved[i])) { + try { + stateCopy.sfRemoveAttribute(sfKeysToBeRemoved[i]); + } catch (SmartFrogContextException e) { + if (sfLog().isWarnEnabled()) sfLog().warn(e); + } + } + } + if (rootRef == from.sfCompleteName()){ cd = new ComponentDescriptionImpl(null,(Context)stateCopy,false); - System.out.println("New CD: "+rootRef+"\n "+from.sfCompleteName()); + //if (sfLog().isInfoEnabled()) sfLog().info("New CD: "+rootRef+"\n "+from.sfCompleteName()); } else { - System.out.println("From: "+from.sfCompleteName()); + //if (sfLog().isInfoEnabled()) sfLog().info("From: "+from.sfCompleteName()); Reference searchRef = (Reference)from.sfCompleteName().copy(); for (Enumeration e = rootRef.elements(); e.hasMoreElements();) { searchRef.removeElement((ReferencePart)e.nextElement()); } String name = ((HereReferencePart)(searchRef.lastElement())).getValue().toString(); searchRef.removeElement(searchRef.lastElement()); - try { - ComponentDescription placeHolder = (ComponentDescription)cd.sfResolve(searchRef); - ComponentDescription child =new ComponentDescriptionImpl (placeHolder,stateCopy,true); - placeHolder.sfReplaceAttribute(name, child); - } catch (SmartFrogException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - } + modifyCD(searchRef, name, stateCopy); } //System.out.println("***************************\nFrom: "+from.sfCompleteName()+"\n"+cd+"\n**************************"); visited(from.sfCompleteName().toString()); } + /** Method that updates the component description. It creates a component description for context and + * places it in whereRef named name. + * + * @param whereRef Where in CD to place the new context + * @param name attribute name + * @param contextCopy context for the new component description node + */ + public void modifyCD(Reference whereRef,String name, Context contextCopy ) { + try { + ComponentDescription placeHolder = (ComponentDescription)cd.sfResolve(whereRef); + ComponentDescription child =new ComponentDescriptionImpl(placeHolder, contextCopy,true); + placeHolder.sfReplaceAttribute(name, child); + } catch (SmartFrogException e) { + if (sfLog().isErrorEnabled()) sfLog().error(e); + } + } /** @@ -152,7 +185,7 @@ // Notify any waiting threads that an attribute was added synchronized (visitingLock) { visitingLocks= new Long (visitingLocks.longValue() + numberOfChildren.longValue()); - System.out.println("Visiting #"+visitingLocks+ " "+name); + //if (sfLog().isInfoEnabled()) sfLog().info("Visiting #"+visitingLocks+ " "+name); } } @@ -179,6 +212,7 @@ try { return "sfConfig extends {\n" + getComponentDescription(timeout).toString() + "}"; } catch (Exception e) { + if (sfLog().isWarnEnabled()) sfLog().warn(e); return e.getMessage(); } } @@ -200,7 +234,7 @@ return getCDAsString(timeout); } - /** This modifies the defult timeout used to + /** This modifies the default timeout used to * wait for the dump operation to complete. * * @param timeout @@ -210,6 +244,14 @@ } + /** This modifies the default set of sfKeys that are removed from every context. + * @param sfKeysToBeRemoved + */ + public void sfKeysToBeRemoved (String[] sfKeysToBeRemoved) { + this.sfKeysToBeRemoved = sfKeysToBeRemoved; + + } + /** * Returns a string representation of the component. This will give a * description of the component which is parseable, and deployable @@ -224,7 +266,7 @@ String cdStr = toString(timeout); return cdStr; } catch (Exception ex){ - ex.printStackTrace(); + if (sfLog().isErrorEnabled()) sfLog().error(ex); return (ex.toString()); } } @@ -242,16 +284,23 @@ } catch (SmartFrogException e) { out.write(e.getMessage()); } - out.write("\n}"); } catch (IOException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + if (sfLog().isErrorEnabled()) sfLog().error(e); } finally { try { out.close(); } catch (IOException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + if (sfLog().isErrorEnabled()) sfLog().error(e); } } } + /** + * + * @return LogSF + */ + public LogSF sfLog(){ + return LogFactory.sfGetProcessLog(); + } + } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Dumper.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Dumper.java 2007-06-14 13:11:41 UTC (rev 4324) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Dumper.java 2007-06-14 13:26:38 UTC (rev 4325) @@ -20,6 +20,8 @@ package org.smartfrog.sfcore.common; +import org.smartfrog.sfcore.reference.Reference; + import java.rmi.RemoteException; import java.rmi.Remote; @@ -28,4 +30,11 @@ void visiting(String name, Integer numberOfChildren) throws RemoteException; void visited(String name) throws RemoteException; + + void modifyCD(Reference searchRef, String name, Context stateCopy) throws RemoteException; + + public void setTimeout(long timeout) throws RemoteException; + + public void sfKeysToBeRemoved (String[] sfKeysToBeRemoved) throws RemoteException; + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2007-07-10 16:52:50
|
Revision: 4620 http://svn.sourceforge.net/smartfrog/?rev=4620&view=rev Author: steve_l Date: 2007-07-10 09:52:43 -0700 (Tue, 10 Jul 2007) Log Message: ----------- SFOS-270: Improve logging of deploy times. SFOS-271: Add a way to deploy but not start a component Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java Added Paths: ----------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionLoad.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java 2007-07-10 15:26:50 UTC (rev 4619) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java 2007-07-10 16:52:43 UTC (rev 4620) @@ -22,7 +22,6 @@ import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.prim.TerminationRecord; import org.smartfrog.sfcore.processcompound.ProcessCompound; -import org.smartfrog.sfcore.parser.Phases; import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.componentdescription.ComponentDescriptionImpl; import org.smartfrog.sfcore.reference.Reference; @@ -37,30 +36,50 @@ * Deploy a component */ public class ActionDeploy extends ConfigurationAction { - public static final String KEY_LANGUAGE = "#language"; + /** + * Parses, deploys and starts "sfConfig" from a resource to the target process compound rethrows an exception if it fails, + * after trying to clean up. This method will check if parent is a rootProcess and it so, it will register "url" as + * a root component that will start its own liveness. + * + * @param url URL of resource to parse + * @param appName name of the application + * @param parent parent for the new component. If null if will use 'target'. + * @param target the target process compound to request deployment + * @param c a context of additional attributes that should be set before deployment + * @param deployReference reference to resolve in ComponentDescription. If ref is null the whole result + * ComponentDescription is returned. + * @return Prim Reference to deployed component + * @throws SmartFrogException failure in some part of the process + * @throws RemoteException In case of network/rmi error + */ + public static Prim Deploy(String url, String appName, Prim parent, Compound target, + Context c, Reference deployReference) throws SmartFrogException, RemoteException { + return Deploy(url,appName,parent,target,c,deployReference,true); + } /** - * Parses and deploys "sfConfig" from a resource to the target process - * compound rethrows an exception if it fails, after trying to clean up. - * This method will check if parent is a rootProcess and it so, it will - * register "url" as a root component that will start its own liveness. - * - * @param url URL of resource to parse - * @param appName name of the application - * @param parent parent for the new component. If null if will use 'target'. - * @param target the target process compound to request deployment - * @param c a context of additional attributes that should be set before - * deployment + * Parses, deploys and optionally starts "sfConfig" from a resource to the target process + * compound rethrows an exception if it fails, after trying to clean up. + * This method will check if parent is a rootProcess and it so, it will + * register "url" as a root component that will start its own liveness. + * + * @param url URL of resource to parse + * @param appName name of the application + * @param parent parent for the new component. If null if will use 'target'. + * @param target the target process compound to request deployment + * @param context a context of additional attributes that should be set before + * deployment * @param deployReference reference to resolve in ComponentDescription. * If ref is null the whole result ComponentDescription is returned. + * @param start flag to set to true to start the component after deploying it by calling sfDeploy and sfStart * @return Prim Reference to deployed component * * @throws SmartFrogException failure in some part of the process * @throws RemoteException In case of network/rmi error */ - public static Prim Deploy(String url, String appName,Prim parent, Compound target, - Context c, Reference deployReference) throws SmartFrogException, RemoteException { + protected static Prim Deploy(String url, String appName, Prim parent, Compound target, + Context context, Reference deployReference, boolean start) throws SmartFrogException, RemoteException { //First thing first: system gets initialized //Protect system if people use this as entry point @@ -71,111 +90,133 @@ } - Prim comp = null; - Phases top; - //To calculate how long it takes to deploy a description - long deployTime = 0; - long parseTime = 0; + Prim comp = null; + //To calculate how long it takes to deploy a description + long beginTime; + long deployTime = 0; + long startTime = 0; + long parseTime; -// if (Logger.logStackTrace) { - deployTime = System.currentTimeMillis(); -// } - if (c==null) c = new ContextImpl(); + beginTime = System.currentTimeMillis(); + if (context == null) { + context = new ContextImpl(); + } - // Checks if 'parent' is a processCompound. If parent is a process compound - // the parentage is made null and it is registered as an attribute, not a - // child, so it is a root component and starts is own liveness - if ((parent!=null)&&(parent instanceof ProcessCompound)){ - // This component will be a root component - parent=null; + // Checks if 'parent' is a processCompound. If parent is a process compound + // the parentage is made null and it is registered as an attribute, not a + // child, so it is a root component and starts is own liveness + if ((parent != null) && (parent instanceof ProcessCompound)) { + // This component will be a root component + parent = null; - } else if ((parent!=null)&&(parent instanceof Compound)&&(appName==null)){ - //From ProcessCompoundImpl. Creates name for unnamed components... + } else if ((parent != null) && (parent instanceof Compound) && (appName == null)) { + //From ProcessCompoundImpl. Creates name for unnamed components... // appName = SmartFrogCoreKeys.SF_UNNAMED + (new Date()).getTime() + "_" + // ProcessCompoundImpl.registrationNumber++; - } - // This is needed so that the root component is properly named - // when registering with the ProcessCompound - if ((parent==null)&&(appName!=null)) c.put("sfProcessComponentName", appName); + } + // This is needed so that the root component is properly named + // when registering with the ProcessCompound + if ((parent == null) && (appName != null)) { + context.put("sfProcessComponentName", appName); + } - // The processCompound/Compound is used to do the deployment! - if ((parent!=null)&&(parent instanceof Compound)){ - target = (Compound)parent; - } + // The processCompound/Compound is used to do the deployment! + if ((parent != null) && (parent instanceof Compound)) { + target = (Compound) parent; + } //select the language first from the context, then from the URL itself String language; - language=(String) c.get(KEY_LANGUAGE); + language=(String) context.get(SmartFrogCoreKeys.KEY_LANGUAGE); if(language==null) { language=url; } - try { - ComponentDescription cd; - try { - cd = ComponentDescriptionImpl.sfComponentDescription(url,language,null,deployReference); -// if (Logger.logStackTrace) { - parseTime = System.currentTimeMillis()-deployTime; - deployTime = System.currentTimeMillis(); -// } - } catch (SmartFrogException sfex) { - if (sfex instanceof SmartFrogDeploymentException) - throw sfex; - else - throw new SmartFrogDeploymentException( - "deploying description '"+url+"' for '"+appName+"'", + + ComponentDescription cd; + try { + cd = ComponentDescriptionImpl.sfComponentDescription(url, language, null, deployReference); + parseTime = System.currentTimeMillis(); + + } catch (SmartFrogException sfex) { + if (sfex instanceof SmartFrogDeploymentException) { + throw sfex; + } else { + throw new SmartFrogDeploymentException( + "deploying description '" + url + "' for '" + appName + "'", sfex, comp, - c); - } + context); + } + } + try { + comp = target.sfDeployComponentDescription(appName, parent, cd, context); + if (start) { + try { + comp.sfDeploy(); + deployTime = System.currentTimeMillis(); + } catch (Throwable thr) { + if (thr instanceof SmartFrogLifecycleException) { + throw (SmartFrogLifecycleException) SmartFrogLifecycleException.forward(thr); + } + throw SmartFrogLifecycleException.sfDeploy("", thr, null); + } - comp = target.sfDeployComponentDescription(appName, parent, cd, c); - - try { - comp.sfDeploy(); - } catch (Throwable thr){ - if (thr instanceof SmartFrogLifecycleException){ - throw (SmartFrogLifecycleException) SmartFrogLifecycleException.forward(thr); + try { + comp.sfStart(); + startTime = System.currentTimeMillis(); + } catch (Throwable thr) { + if (thr instanceof SmartFrogLifecycleException) { + throw (SmartFrogLifecycleException) thr; + } + throw SmartFrogLifecycleException.sfStart("", thr, null); + } + } + } catch (Throwable e) { + //if the component is non null, get the name of the component + //and then terminate it abnormally + if (comp != null) { + Reference compName = null; + try { + compName = comp.sfCompleteName(); } - throw SmartFrogLifecycleException.sfDeploy("",thr,null); - } - try { - comp.sfStart(); - } catch (Throwable thr){ - if (thr instanceof SmartFrogLifecycleException){ - throw (SmartFrogLifecycleException) SmartFrogLifecycleException.forward(thr); + catch (Exception ignored) { } - throw SmartFrogLifecycleException.sfStart("",thr,null); + try { + comp.sfTerminate(TerminationRecord.abnormal("Deployment Failure: " + e, compName)); + } catch (Exception ignored) { + } } - } catch (Throwable e) { - if (comp != null) { - Reference compName = null; - try { - compName = comp.sfCompleteName(); - } - catch (Exception ex) { - } - try { - comp.sfTerminate(TerminationRecord.abnormal("Deployment Failure: " + e, compName)); - } catch (Exception ex) {} - } - throw ((SmartFrogException) SmartFrogException.forward(e)); + throw (SmartFrogException.forward(e)); } -// if (Logger.logStackTrace) { - deployTime = System.currentTimeMillis()-deployTime; - try { - comp.sfAddAttribute("sfParseTime",new Long(parseTime)); - comp.sfAddAttribute("sfDeployTime",new Long(deployTime)); - } catch (Exception ex){ - //ignored, this is only information - } -// } - return comp; + //finally, attach times + addTime(comp, SmartFrogCoreKeys.SF_TIME_PARSE, parseTime - beginTime); + addTime(comp, SmartFrogCoreKeys.SF_TIME_DEPLOY, deployTime -parseTime); + addTime(comp, SmartFrogCoreKeys.SF_TIME_START, startTime - deployTime); + return comp; } /** + * Add a time to the component; ignore any exceptions + * @param comp compoent to add + * @param name key name + * @param time time to add + */ + private static void addTime(Prim comp, String name, long time) { + try { + if(time>=0) { + comp.sfAddAttribute(name, new Long(time)); + } + } catch (SmartFrogRuntimeException ignored) { + + } catch (RemoteException ignored) { + + } + } + + /** * Deploy Action. * * @param targetP target where to execute the configuration command @@ -216,12 +257,7 @@ } } - prim = Deploy(configuration.getUrl(), - name, - parent, - targetP, - configuration.getContext(), - configuration.getDeployReference()); + prim = doDeploy(configuration, name, parent, targetP); } catch (SmartFrogException sex){ configuration.setResult(ConfigurationDescriptor.Result.FAILED,null,sex); @@ -234,4 +270,35 @@ return prim; } + /** + * Override point; call the deployment operations + * @param configuration configuration to deploy + * @param name name of the component + * @param parent parent flag + * @param targetP target + * @return + * @throws SmartFrogException + * @throws RemoteException + */ + protected Prim doDeploy(ConfigurationDescriptor configuration, String name, Prim parent, ProcessCompound targetP) throws SmartFrogException, RemoteException { + Prim prim; + prim = Deploy(configuration.getUrl(), + name, + parent, + targetP, + configuration.getContext(), + configuration.getDeployReference(), + getStartFlag(configuration)); + return prim; + } + + /** + * Override point: get the start flag for this configuration. The default always returns true. + * @param configuration the configuration which is being deployed + * @return true if the configuration should start. + */ + protected boolean getStartFlag(ConfigurationDescriptor configuration) { + return true; + } + } Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionLoad.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionLoad.java (rev 0) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionLoad.java 2007-07-10 16:52:43 UTC (rev 4620) @@ -0,0 +1,42 @@ +/** (C) Copyright 2007 Hewlett-Packard Development Company, LP + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + For more information: www.smartfrog.org + + */ +package org.smartfrog.sfcore.common; + +/** + * A variant of ActionDeploy that can be used to load but not start an + * application. This is used by the testharness. + * created 10-Jul-2007 15:48:18 + */ + +public class ActionLoad extends ActionDeploy { + + + /** + * Override point: get the start flag for this configuration. + * This override always returns false. + * + * @param configuration the configuration which is being deployed + * @return false. + */ + protected boolean getStartFlag(ConfigurationDescriptor configuration) { + return false; + } + +} Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2007-07-10 15:26:50 UTC (rev 4619) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2007-07-10 16:52:43 UTC (rev 4620) @@ -56,24 +56,26 @@ private Action() { } - final static public String ACT_DEPLOY = "DEPLOY"; - final static public int DEPLOY = 0; - final static public String ACT_TERMINATE = "TERMINATE"; - final static public int TERMINATE = 1; - final static public String ACT_UNDEFINED = "UNDEFINED"; - final static public int UNDEFINED = 2; - final static public String ACT_DETACH= "DETACH"; - final static public int DETACH = 3; - final static public String ACT_DETaTERM = "DETaTERM"; - final static public int DETaTERM = 4; - final static public String ACT_PING = "PING"; - final static public int PING = 5; - final static public String ACT_PARSE = "PARSE"; - final static public int PARSE = 6; - final static public String ACT_DIAGNOSTICS = "DIAGNOSTICS"; - final static public int DIAGNOSTICS = 7; - final static public String ACT_UPDATE = "UPDATE"; - final static public int UPDATE = 8; + public static final String ACT_DEPLOY = "DEPLOY"; + public static final int DEPLOY = 0; + public static final String ACT_TERMINATE = "TERMINATE"; + public static final int TERMINATE = 1; + public static final String ACT_UNDEFINED = "UNDEFINED"; + public static final int UNDEFINED = 2; + public static final String ACT_DETACH= "DETACH"; + public static final int DETACH = 3; + public static final String ACT_DETaTERM = "DETaTERM"; + public static final int DETaTERM = 4; + public static final String ACT_PING = "PING"; + public static final int PING = 5; + public static final String ACT_PARSE = "PARSE"; + public static final int PARSE = 6; + public static final String ACT_DIAGNOSTICS = "DIAGNOSTICS"; + public static final int DIAGNOSTICS = 7; + public static final String ACT_UPDATE = "UPDATE"; + public static final int UPDATE = 8; + public static final String ACT_LOAD = "LOAD"; + public static final int LOAD = 9; static public String[] type= { ACT_DEPLOY, @@ -84,7 +86,9 @@ ACT_PING, ACT_PARSE, ACT_DIAGNOSTICS, - ACT_UPDATE}; + ACT_UPDATE, + ACT_LOAD + }; } @@ -136,10 +140,10 @@ private Result() { } - final static public int SUCCESSFUL=0; - final static public int FAILED=1; - final static public int UNDEFINED=2; - final static public int UNKNOWN=3; + public static final int SUCCESSFUL=0; + public static final int FAILED=1; + public static final int UNDEFINED=2; + public static final int UNKNOWN=3; static String[] type= {"SUCCESSFUL", "FAILED", "UNDEFINED", @@ -540,7 +544,7 @@ * ex. foo * ex. "HOST localhost:foo" * ex. 'HOST localhost:foo' - * - ACTION: possible actions: DEPLOY, TERMINATE, DETACH, DETaTERM, PING, PARSE, DIAGNOSTICS, UPDATE + * - ACTION: possible actions: DEPLOY, TERMINATE, DETACH, DETaTERM, PING, PARSE, DIAGNOSTICS, UPDATE, LOAD * - url: description used by ACTION * ex. /home/sf/foo.sf * ex. "c:\sf\foo.sf" @@ -564,13 +568,11 @@ *</pre> * @see Action * @throws SmartFrogInitException failure in some part of the process - * - // TODO fix this text for JavaDocs */ public ConfigurationDescriptor (String deploymentURL) throws SmartFrogInitException { try { originalSFACT = deploymentURL; - if (SFSystem.sfLog().isDebugEnabled()){SFSystem.sfLog().debug("Parsing SFACT: ["+originalSFACT+"]"); } + if (SFSystem.sfLog().isDebugEnabled()){SFSystem.sfLog().debug("Parsing SFACT: ["+originalSFACT+"]"); } if (deploymentURL==null) { throw new SmartFrogInitException("Deployment URL: null"); @@ -855,6 +857,9 @@ case Action.UPDATE: action = new ActionUpdate(); break; + case Action.LOAD: + action = new ActionLoad(); + break; default: throw new SmartFrogInitException("Action type unknown"); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java 2007-07-10 15:26:50 UTC (rev 4619) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java 2007-07-10 16:52:43 UTC (rev 4620) @@ -323,4 +323,31 @@ * Value {@value} */ public static final String SF_FINAL= "sfFinal"; + + + /** + * Time attribute set in ActionDeploy deployment + * + * Value {@value} + */ + String SF_TIME_PARSE = "sfParseTime"; + /** + * Time attribute set in ActionDeploy deployment + * + * Value {@value} + */ + String SF_TIME_DEPLOY = "sfDeployTime"; + + /** + * Time attribute set in ActionDeploy deployment + * + * Value {@value} + */ + String SF_TIME_START = "sfStartTime"; + + /** + * The language attribute, which can be set/found from the context. + * {@value} + */ + String KEY_LANGUAGE = "#language"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2007-07-12 10:35:25
|
Revision: 4637 http://svn.sourceforge.net/smartfrog/?rev=4637&view=rev Author: steve_l Date: 2007-07-12 03:35:23 -0700 (Thu, 12 Jul 2007) Log Message: ----------- SFOS-270: Improve logging of deploy times. Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java 2007-07-12 09:27:34 UTC (rev 4636) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java 2007-07-12 10:35:23 UTC (rev 4637) @@ -31,6 +31,7 @@ import java.rmi.RemoteException; +import java.util.Date; /** * Deploy a component @@ -192,6 +193,7 @@ } //finally, attach times + addAttributeQuietly(comp, SmartFrogCoreKeys.SF_TIME_STARTED_AT, new Date(beginTime).toString()); addTime(comp, SmartFrogCoreKeys.SF_TIME_PARSE, parseTime - beginTime); addTime(comp, SmartFrogCoreKeys.SF_TIME_DEPLOY, deployTime -parseTime); addTime(comp, SmartFrogCoreKeys.SF_TIME_START, startTime - deployTime); @@ -202,13 +204,23 @@ * Add a time to the component; ignore any exceptions * @param comp compoent to add * @param name key name - * @param time time to add + * @param time time to add; if <=0 the attribute is not added */ private static void addTime(Prim comp, String name, long time) { + if (time >= 0) { + addAttributeQuietly(comp, name, new Long(time)); + } + } + + /** + * Add an an attribute, do not report any problems + * @param comp component + * @param name attribute name + * @param value object to add + */ + private static void addAttributeQuietly(Prim comp, String name, Object value) { try { - if(time>=0) { - comp.sfAddAttribute(name, new Long(time)); - } + comp.sfAddAttribute(name, value); } catch (SmartFrogRuntimeException ignored) { } catch (RemoteException ignored) { @@ -276,9 +288,9 @@ * @param name name of the component * @param parent parent flag * @param targetP target - * @return - * @throws SmartFrogException - * @throws RemoteException + * @return the deployed prim + * @throws SmartFrogException for deployment problems + * @throws RemoteException for network problems */ protected Prim doDeploy(ConfigurationDescriptor configuration, String name, Prim parent, ProcessCompound targetP) throws SmartFrogException, RemoteException { Prim prim; Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java 2007-07-12 09:27:34 UTC (rev 4636) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java 2007-07-12 10:35:23 UTC (rev 4637) @@ -344,8 +344,15 @@ * Value {@value} */ String SF_TIME_START = "sfStartTime"; - + /** + * Time this component was started + * + * Value {@value} + */ + String SF_TIME_STARTED_AT = "sfStartedAtTime"; + + /** * The language attribute, which can be set/found from the context. * {@value} */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2007-08-07 00:20:31
|
Revision: 4919 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=4919&view=rev Author: julgui Date: 2007-08-06 17:19:43 -0700 (Mon, 06 Aug 2007) Log Message: ----------- New -t option to terminate successful deployments when using multiple deployment and one of them fails. Not finished yet. SFOS-382 Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2007-08-06 20:23:43 UTC (rev 4918) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2007-08-07 00:19:43 UTC (rev 4919) @@ -25,6 +25,8 @@ import org.smartfrog.sfcore.reference.Reference; import org.smartfrog.sfcore.prim.Prim; +import org.smartfrog.sfcore.prim.TerminationRecord; + import java.util.Hashtable; import java.rmi.RemoteException; import java.io.IOException; @@ -161,6 +163,20 @@ public Object resultObject = null; /** + * A result can be terminated if during a set of deployments one of them + * fails, this is related to -t (terminate) option and it can only be applied + * to DEPLOY actions. + */ + public boolean isResultTerminated = false; + /** + * Indicates if the termination of a result object was succesful. + */ + public boolean isResultTerminatedSuccessfully=true; + + /** possible result termination error message */ + public String resultTerminationMessage=null; + + /** * Result message for action */ private String resultMessage = null; @@ -405,7 +421,7 @@ result= messageError.toString(); } if ((Logger.logStackTrace)|| - (((resultMessage != null) || (resultException != null)) && (resultType != Result.SUCCESSFUL))) { + (((resultMessage != null) || (resultException != null)) && ((resultType != Result.SUCCESSFUL)|| isResultTerminated))) { messageError = new StringBuffer(); messageError.append(lineSeparator); messageError.append("Result:"); @@ -428,6 +444,13 @@ messageError.append("'"); } } + if (isResultTerminated) { + messageError.append(lineSeparator); + messageError.append("* Result termination "); + if (isResultTerminatedSuccessfully) messageError.append(" succeeded"); + else messageError.append(" failed"); + if (resultTerminationMessage!=null) messageError.append("; Message: "+resultTerminationMessage); + } if (originalSFACT!=null && Logger.logStackTrace) { messageError.append(lineSeparator); messageError.append("* Command line SFACT: '"); @@ -938,6 +961,27 @@ return resultObject; } + /** Terminates result object ONLY a result exists and it was deployed by this configuration descriptor using + * a DEPLOY action. The success of the termination intent will be stored in {@link #isResultTerminatedSuccessfully} + * @return true if it tried to terminate result, false it it did not try + */ + public boolean terminateDeployedResult (){ + if ((resultObject!=null)&& (resultObject instanceof Prim) && + (getActionType() == Action.DEPLOY) && !isResultTerminated){ + try { + this.isResultTerminated=true; + ((Prim)resultObject).sfTerminate(new TerminationRecord(TerminationRecord. + NORMAL, + "Multiple deployment failed", null)); + } catch (RemoteException ex) { + this.resultTerminationMessage = ex.toString(); + } + return true; + } + + return false; + } + /** * get the name of this component * @return String component name Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java 2007-08-06 20:23:43 UTC (rev 4918) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java 2007-08-07 00:19:43 UTC (rev 4919) @@ -48,7 +48,7 @@ /** Usage string for SFSystem. */ private static final String USAGE = "\n" + - " Usage: SFSystem [-a SFACT] [-f SFREF] [-e] [-d] [-headless]\n" + + " Usage: SFSystem [-a SFACT] [-f SFREF] [-t] [-e] [-d] [-headless]\n" + " or: SFSystem -?\n"; /** Help string for SFSystem. */ @@ -94,8 +94,8 @@ " ex4: Get diagnostics report for \"sfDefault\" component running in remote daemon\n" + " 'rootProcess:sfDefault':DIAGNOSTICS:::remoteHostName:\n" + "\n" + - " -f SFREF: file with a set of SmartFrog Action Descriptors (SFACT)" + - "\n" + + " -f SFREF: file with a set of SmartFrog Action Descriptors (SFACT)" +"\n" + + " -t (terminate): Terminate successfull deployments if one of the listed (with -a or -f) deployments failed." + "\n" + " -e (exit): The daemon will terminate after finishing the deployment." + "\n" + " -d or -diagnostics: print information that might be helpful to diagnose or report problems." + "\n" + " " + OPTION_HEADLESS + ": the process will run in headless mode\n" + @@ -119,6 +119,9 @@ /** Vector for configurationDescriptors to be deployed. */ public Vector cfgDescriptors = new Vector(); + /** Terminate sucessful deployments in case of a deployment failure. */ + public boolean terminateOnDeploymentFailure = false; + /** Flag indicating the exit status of the application. */ public boolean exit = false; @@ -170,6 +173,8 @@ } else if ("-d".equals(currentArg) || "-diagnostics".equals(currentArg)) { //diagnostics diagnostics = true; + } else if ("-t".equals(currentArg)) { + this.terminateOnDeploymentFailure = true; } else if ("-e".equals(currentArg)) { //exit after the operation(s) exit = true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2007-09-12 16:57:59
|
Revision: 5095 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=5095&view=rev Author: steve_l Date: 2007-09-12 09:57:56 -0700 (Wed, 12 Sep 2007) Log Message: ----------- SFOS-428 Eclipse whines about a lot of minor things -spelling corrections and remove some unneeded casts -fix potential NPEs Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumperCDImpl.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/JarUtil.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SFByteArray.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogLivenessException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2007-09-12 16:56:24 UTC (rev 5094) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2007-09-12 16:57:56 UTC (rev 5095) @@ -472,10 +472,10 @@ /** * Generates a user friendly message for certain exceptions. * @param thr Exception - * @param lineSeparator the line separartor to be used in the message + * @param separatorString the line separator to be used in the message * @return String Exception message */ - private String parseException (Throwable thr, String lineSeparator){ + private String parseException (Throwable thr, String separatorString){ StringBuffer messageError = new StringBuffer(); if (thr instanceof SmartFrogException){ //messageError.append(((SmartFrogException)thr).toString("\n ")); @@ -503,7 +503,7 @@ messageError.append(thr.toString()); } } - return messageError.toString().replaceAll("\n",lineSeparator); + return messageError.toString().replaceAll("\n",separatorString); } /** Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java 2007-09-12 16:56:24 UTC (rev 5094) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java 2007-09-12 16:57:56 UTC (rev 5095) @@ -370,7 +370,7 @@ StringBuffer reportPC = new StringBuffer(); Diagnostics.header(out, "sfContext host ProcessCompound"); out.append("+++++++++++++++++++++++++++++++++++++++++++"); - doReportPrim (reportPC,(Prim)pc); + doReportPrim (reportPC,pc); out.append(reportPC.toString().replaceAll("\n","\n ")); out.append("\n+++++++++++++++++++++++++++++++++++++++++++\n"); } catch (Exception ex2) { @@ -381,15 +381,15 @@ /** * Report specific Compound information. * @param out StringBuffer - * @param prim Compound + * @param compound Compound */ - private static void doReportCompound(StringBuffer out, Compound prim) { + private static void doReportCompound(StringBuffer out, Compound compound) { Enumeration enu = null; StringBuffer childrenInfo = new StringBuffer(); Prim child = null; try { Diagnostics.header(out, "sfChildren"); - for (enu = ( (Compound) prim).sfChildren(); enu.hasMoreElements(); ) { + for (enu = compound.sfChildren(); enu.hasMoreElements(); ) { try { child = (Prim) enu.nextElement(); childrenInfo.append("- "); @@ -438,28 +438,29 @@ private static void doReportSystemProperties(StringBuffer out) { Properties sysprops = null; try { - sysprops = System.getProperties(); - } catch (SecurityException e) { - out.append("Access to System.getProperties() blocked " + - "by a security manager");out.append("\n"); - } + sysprops = System.getProperties(); - Vector keysVector = new Vector(); - for (Enumeration keys = sysprops.propertyNames(); keys.hasMoreElements();) { - keysVector.add((String) keys.nextElement()); - } - // Order keys - keysVector= JarUtil.sort(keysVector); + Vector<String> keysVector = new Vector<String>(); + for (Enumeration keys = sysprops.propertyNames(); keys.hasMoreElements();) { + keysVector.add((String) keys.nextElement()); + } + // Order keys + keysVector= JarUtil.sort(keysVector); - for (Enumeration keys = keysVector.elements(); keys.hasMoreElements();) { - String key = (String) keys.nextElement(); - String value = ""; - try { - if (!(key.trim().equals(""))) value = System.getProperty(key); - } catch (SecurityException e) { - value = "Access to this property blocked by a security manager"; - } - out.append(key + " : " + value);out.append("\n"); + + for(String key:keysVector) { + String value = ""; + try { + if (!(key.trim().equals(""))) value = System.getProperty(key); + } catch (SecurityException e) { + value = "Access to this property blocked by a security manager"; + } + out.append(key).append(" : ").append(value); + out.append("\n"); + } + } catch (SecurityException e) { + out.append("Access to System.getProperties() blocked " + + "by a security manager\n"); } } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumperCDImpl.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumperCDImpl.java 2007-09-12 16:56:24 UTC (rev 5094) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumperCDImpl.java 2007-09-12 16:57:56 UTC (rev 5095) @@ -108,7 +108,7 @@ //Create new CD if not created yet and inspecting root ref if ((cd==null) && rootRef.equals(from)) { - cd = new ComponentDescriptionImpl(null,(Context)stateCopy,false); + cd = new ComponentDescriptionImpl(null,stateCopy,false); return; } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/JarUtil.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/JarUtil.java 2007-09-12 16:56:24 UTC (rev 5094) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/JarUtil.java 2007-09-12 16:57:56 UTC (rev 5095) @@ -260,11 +260,11 @@ if (size == -1) { size = ((Integer)htSizes.get(ze.getName())).intValue(); } - byte[] b = new byte[(int)size]; + byte[] b = new byte[size]; int rb = 0; int chunk = 0; while (((int)size - rb) > 0) { - chunk = zis.read(b, rb, (int)size - rb); + chunk = zis.read(b, rb, size - rb); if (chunk == -1) { break; } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java 2007-09-12 16:56:24 UTC (rev 5094) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java 2007-09-12 16:57:56 UTC (rev 5095) @@ -256,7 +256,9 @@ throw SmartFrogException.forward(e); } finally { try { - file.close(); + if(file!=null) { + file.close(); + } } catch (Exception ex) { SFSystem.sfLog().ignore(ex); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SFByteArray.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SFByteArray.java 2007-09-12 16:56:24 UTC (rev 5094) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SFByteArray.java 2007-09-12 16:57:56 UTC (rev 5095) @@ -85,7 +85,7 @@ * @param array the data */ public SFByteArray(byte[] array) { - this.array = (byte[])(array.clone()); + this.array = (array.clone()); } /** @@ -101,7 +101,7 @@ * @return internal array of data */ public byte[] byteArray() { - return (byte[])array.clone(); + return array.clone(); } /** Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogLivenessException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogLivenessException.java 2007-09-12 16:56:24 UTC (rev 5094) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogLivenessException.java 2007-09-12 16:57:56 UTC (rev 5095) @@ -33,16 +33,6 @@ */ public class SmartFrogLivenessException extends SmartFrogRuntimeException implements Serializable { - /** Attribute name for reference in exceptioncontext. */ - public static final String REFERENCE = "reference"; - - /** Attribute name for source in exceptioncontext. */ - public static final String SOURCE = "source"; - - /** Attribute name for data in exceptioncontext. */ - public static final String DATA = "data"; - - /** * Constructs a SmartFrogLivenessException with message. * Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java 2007-09-12 16:56:24 UTC (rev 5094) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java 2007-09-12 16:57:56 UTC (rev 5095) @@ -417,8 +417,8 @@ */ public String toString(String nm) { StringBuffer strb = null; + strb = new StringBuffer(); try { - strb = new StringBuffer(); strb.append (shortClassName() +":: "); strb.append(((this.containsKey(REFERENCE)&&(this.get(REFERENCE)!=null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2007-09-12 17:07:25
|
Revision: 5100 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=5100&view=rev Author: steve_l Date: 2007-09-12 10:05:47 -0700 (Wed, 12 Sep 2007) Log Message: ----------- SFOS-430 StringComparator is toplevel in JarUtil Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/JarUtil.java Added Paths: ----------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/StringComparator.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/JarUtil.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/JarUtil.java 2007-09-12 17:01:30 UTC (rev 5099) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/JarUtil.java 2007-09-12 17:05:47 UTC (rev 5100) @@ -300,35 +300,5 @@ } } -/** - * Description of the Class - * - *@author julgui - *created 04 October 2001 - */ -class StringComparator implements Comparator, Serializable { - - /** - * Description of the Method - * - *@param o1 Description of Parameter - *@param o2 Description of Parameter - *@return Description of the Returned Value - */ - public int compare( - Object o1, Object o2) { - if (!(o1 instanceof String)) { - throw new ClassCastException(); - } - if (!(o2 instanceof String)) { - throw new ClassCastException(); - } - - int result = ((String)o1). - compareTo(((String)o2)); - return result * (-1); - } - //end compare() -} //end class TheComparator Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/StringComparator.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/StringComparator.java (rev 0) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/StringComparator.java 2007-09-12 17:05:47 UTC (rev 5100) @@ -0,0 +1,54 @@ +/** (C) Copyright 2007 Hewlett-Packard Development Company, LP + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +For more information: www.smartfrog.org + +*/ +package org.smartfrog.sfcore.common; + +import java.util.Comparator; +import java.io.Serializable; + +/** + * Description of the Class + * + *@author julgui + *created 04 October 2001 + */ +class StringComparator implements Comparator, Serializable { + + /** + * Description of the Method + * + *@param o1 Description of Parameter + *@param o2 Description of Parameter + *@return Description of the Returned Value + */ + public int compare( + Object o1, Object o2) { + if (!(o1 instanceof String)) { + throw new ClassCastException(); + } + if (!(o2 instanceof String)) { + throw new ClassCastException(); + } + + int result = ((String)o1). + compareTo(((String)o2)); + return result * (-1); + } + //end compare() +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2007-09-20 15:44:51
|
Revision: 5149 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=5149&view=rev Author: julgui Date: 2007-09-20 08:44:46 -0700 (Thu, 20 Sep 2007) Log Message: ----------- New DUMP CLI action. Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ErrorMessageBundle.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/MessageKeys.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java Added Paths: ----------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDump.java Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDump.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDump.java (rev 0) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDump.java 2007-09-20 15:44:46 UTC (rev 5149) @@ -0,0 +1,122 @@ +/** (C) Copyright 2004 Hewlett-Packard Development Company, LP + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + For more information: www.smartfrog.org + + */ +package org.smartfrog.sfcore.common; + +import org.smartfrog.sfcore.processcompound.ProcessCompound; +import org.smartfrog.sfcore.processcompound.SFProcess; +import org.smartfrog.sfcore.prim.Prim; +import org.smartfrog.SFSystem; + +import java.rmi.RemoteException; +import java.io.Serializable; +import java.io.StringWriter; +import java.io.PrintWriter; + +/** + * Ping a component + */ +public class ActionDump extends ConfigurationAction implements Serializable { + /** + * ping message. {@value} + */ + public static final String DUMP_MESSAGE = "Dump time :"; + + /** + * this has to be implemented by subclasses; execute a configuration command + * against a specified target + * + * @param targetP target where to execute the configuration command + * @param configuration configuration command to be executed + * @return Object Reference to parsed component + * @throws SmartFrogException failure in some part of the process + * @throws RemoteException In case of network/rmi error + */ + public Object execute(ProcessCompound targetP, + ConfigurationDescriptor configuration) + throws SmartFrogException, + RemoteException { + try { + if (targetP == null) { + targetP = SFProcess.sfSelectTargetProcess(configuration.getHost(),configuration.getSubProcess()); + } + long time= dump(configuration.getName(), targetP); + configuration.setSuccessfulResult(); + configuration.setResult(ConfigurationDescriptor.Result.SUCCESSFUL,DUMP_MESSAGE+(time/1000.0)+" seconds",null); + return new Long(time); + } catch (SmartFrogException sex) { + configuration.setResult(ConfigurationDescriptor.Result.FAILED,null,sex); + throw sex; + } catch (RemoteException rex) { + configuration.setResult(ConfigurationDescriptor.Result.FAILED,null,rex); + throw rex; + } + + } + + /** + * Dump a component description from a live system + * @param componentName name of component; if null, we assume the processcompound + * itself is the target + * @param targetP process to resolve against + * @return long time (in milliseconds) the ping took. + * @throws SmartFrogException failure in some part of the process + * @throws RemoteException In case of network/rmi error + */ + private long dump (String componentName, ProcessCompound targetP) throws SmartFrogException, RemoteException { + Prim targetC; + + if (componentName == null) { + targetC = targetP; + } else { + targetC = (Prim) targetP.sfResolveWithParser(componentName); + } + long start,finish; + start=System.currentTimeMillis(); + StringBuffer message=new StringBuffer(); + String name = "error no name"; + try { + name = targetC.sfCompleteName().toString(); + } catch (RemoteException e) { + if (SFSystem.sfLog().isWarnEnabled()) SFSystem.sfLog().warn(e); + } + //Only works for Prims. + if (targetC instanceof Prim) { + try { + Prim objPrim = ((Prim)targetC); + message.append ("\n*************** State for "+ name+" *****************\n"); + Dumper dumper = new DumperCDImpl(objPrim); + objPrim.sfDumpState(dumper.getDumpVisitor()); + message.append (dumper.toString()); + name = (objPrim).sfCompleteName().toString(); + message.append ("\n*************** End state for "+ name+" *****************\n"); + } catch (Exception ex) { + if (SFSystem.sfLog().isErrorEnabled()) SFSystem.sfLog().error (ex); + StringWriter sw = new StringWriter(); + PrintWriter pr = new PrintWriter(sw,true); + ex.printStackTrace(pr); + pr.close(); + message.append("\n Error: "+ex.toString()+"\n"+sw.toString()); + } + } + finish = System.currentTimeMillis(); + SFSystem.sfLog().out(message); + return finish-start; + } +} Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2007-09-20 15:22:24 UTC (rev 5148) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2007-09-20 15:44:46 UTC (rev 5149) @@ -83,6 +83,8 @@ public static final int UPDATE = 8; public static final String ACT_LOAD = "LOAD"; public static final int LOAD = 9; + public static final String ACT_DUMP = "DUMP"; + public static final int DUMP = 10; static public String[] type= { ACT_DEPLOY, @@ -94,7 +96,8 @@ ACT_PARSE, ACT_DIAGNOSTICS, ACT_UPDATE, - ACT_LOAD + ACT_LOAD, + ACT_DUMP }; } @@ -396,6 +399,13 @@ getResultMessage()); } break; + case ConfigurationDescriptor.Action.DUMP: { + result = MessageUtil.formatMessage(MSG_DUMP_SUCCESS, + name, + getHostsString(), + getResultMessage()); + } + break; case ConfigurationDescriptor.Action.PARSE: { result = "Parsed :"+getUrl() + lineSeparator + getContextAttribute(ATTR_PARSE_REPORT).toString(); @@ -1001,6 +1011,9 @@ case Action.LOAD: action = new ActionLoad(); break; + case Action.DUMP: + action = new ActionDump(); + break; default: throw new SmartFrogInitException("Action type unknown"); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ErrorMessageBundle.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ErrorMessageBundle.java 2007-09-20 15:22:24 UTC (rev 5148) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ErrorMessageBundle.java 2007-09-20 15:44:46 UTC (rev 5149) @@ -106,6 +106,7 @@ { MSG_UPDATE_SUCCESS , "Successfully updated: {0}"}, { MSG_TERMINATE_SUCCESS , "Successfully terminated: {0}"}, { MSG_PING_SUCCESS , "\"{0}\" was successfully contacted in \"{1}\". {2}"}, + { MSG_DUMP_SUCCESS , "\"{0}\" was successfully contacted and configuratin read in \"{1}\". {2}"}, { MSG_DETACH_SUCCESS , "Successfully detached component: {0}"}, { MSG_DETACH_TERMINATE_SUCCESS , "Successfully detatched and terminated: {0}"}, { MSG_UNHANDLED_EXCEPTION , "Unhandled exception: "}, Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/MessageKeys.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/MessageKeys.java 2007-09-20 15:22:24 UTC (rev 5148) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/MessageKeys.java 2007-09-20 15:44:46 UTC (rev 5149) @@ -219,6 +219,11 @@ public static String MSG_PING_SUCCESS = "MSG_PING_SUCCESS"; /** + * Message key: successful dump of components. + */ + public static String MSG_DUMP_SUCCESS = "MSG_DUMP_SUCCESS"; + + /** * Message key: successful detachment of components. */ public static String MSG_DETACH_SUCCESS = "MSG_DETACH_SUCCESS"; Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java 2007-09-20 15:22:24 UTC (rev 5148) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/OptionSet.java 2007-09-20 15:44:46 UTC (rev 5149) @@ -67,7 +67,7 @@ " ex. \"HOST localhost:foo\"\n" + " ex. 'HOST localhost:foo'\n" + " - ACTION: defines the action to be taken on the named component\n"+ - " possible actions: DEPLOY, UPDATE, TERMINATE, DETACH, DETaTERM, PING, PARSE, DIAGNOSTICS\n" + + " possible actions: DEPLOY, UPDATE, TERMINATE, DETACH, DETaTERM, PING, PARSE, DIAGNOSTICS, DUMP\n" + " - SFREF: SmartFrog description (if needed) to be used by ACTION\n" + " Currently only required by DEPLOY\n"+ " ex. /home/sf/foo.sf\n" + @@ -94,6 +94,8 @@ " counterEx3:DEPLOY:org/smartfrog/examples/counter/example2.sf:\"testLevel1:counterToSucceed\":localhost:\n" + " ex4: Get diagnostics report for \"sfDefault\" component running in remote daemon\n" + " 'rootProcess:sfDefault':DIAGNOSTICS:::remoteHostName:\n" + + " ex5. Dump description for local sfDaemon\n" + + " rootProcess:DUMP:::localhost:\n" + "\n" + " -f SFREF: file with a set of SmartFrog Action Descriptors (SFACT)" +"\n" + " -t (terminate): Terminate successfull deployments if one of the listed (with -a or -f) deployments failed." + "\n" + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2007-09-26 12:09:36
|
Revision: 5176 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=5176&view=rev Author: julgui Date: 2007-09-26 05:09:31 -0700 (Wed, 26 Sep 2007) Log Message: ----------- New thread dump to sfDiagnostics. SFOS-456 SF-146 Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java Added Paths: ----------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ThreadDump.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java 2007-09-26 12:07:51 UTC (rev 5175) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java 2007-09-26 12:09:31 UTC (rev 5176) @@ -51,12 +51,8 @@ import java.io.IOException; import java.io.PrintStream; import java.rmi.RemoteException; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Enumeration; -import java.util.Properties; -import java.util.TimeZone; -import java.util.Vector; +import java.util.*; + import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.security.SFClassLoader; @@ -301,6 +297,9 @@ header(out, "Locale information"); doReportLocale(out); + header(out, "Thread Dump"); + doReportThreadDump(out); + doReportPrim(out, prim); header(out, "System properties"); @@ -459,12 +458,39 @@ out.append("\n"); } } catch (SecurityException e) { - out.append("Access to System.getProperties() blocked " + - "by a security manager\n"); + out.append("Access to System.getProperties() blocked by a security manager\n"); } } + /** + * Report specific information to local process compound. + * @param out StringBuffer + */ + private static void doReportThreadDump(StringBuffer out) { + try { + ThreadDump td = new ThreadDump(); + StringBuffer reportTD = new StringBuffer(); + out.append("+++ Threads - [nane (id), state, priority, isDaemon, thread group]\n"); + for (Thread thread : td.getThreads()){ + out.append( thread.getName()+" ("+thread.getId()+")"+ + ", "+thread.getState()+", "+thread.getPriority()+", "+thread.isDaemon()+ + ", "+thread.getThreadGroup()+"\n"); + } + out.append("\n+++ Traces - [name (id), stack trace \n"); + Map<Thread, StackTraceElement[]> traces = td.getTraces(); + for (Thread thread : traces.keySet()){ + out.append(thread.getName()+" ("+thread.getId()+")"+"\n"); + for (StackTraceElement threadTraceLine :traces.get(thread)){ + out.append(" "+ threadTraceLine+"\n"); + } + } + } catch (Exception ex2) { + out.append(" Error:" + ex2.getMessage() + "\n"); + } + } + + /** * Report a summary of system properties. * @param out the stream to print the properties to. Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ThreadDump.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ThreadDump.java (rev 0) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ThreadDump.java 2007-09-26 12:09:31 UTC (rev 5176) @@ -0,0 +1,40 @@ +package org.smartfrog.sfcore.common; + +/** + * Utility class used to dump threads in ordered form based on the article: + * http://www.javaspecialists.eu/archive/Issue132.html + */ +import java.io.Serializable; +import java.util.*; + +public class ThreadDump implements Serializable { + private final Map<Thread, StackTraceElement[]> traces; + + public ThreadDump() { + traces = new TreeMap<Thread, StackTraceElement[]>(THREAD_COMP); + traces.putAll(Thread.getAllStackTraces()); + } + + public Collection<Thread> getThreads() { + return traces.keySet(); + } + + public Map<Thread, StackTraceElement[]> getTraces() { + return traces; + } + + /** + * Compare the threads by name and id. + */ + private static final Comparator<Thread> THREAD_COMP = new Comparator<Thread>() { + public int compare(Thread o1, Thread o2) { + int result = o1.getName().compareTo(o2.getName()); + if (result == 0) { + Long id1 = o1.getId(); + Long id2 = o2.getId(); + return id1.compareTo(id2); + } + return result; + } + }; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2007-11-07 18:46:02
|
Revision: 5464 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=5464&view=rev Author: julgui Date: 2007-11-07 10:45:58 -0800 (Wed, 07 Nov 2007) Log Message: ----------- SFOS-538 New feature to warn about possibly duplicated jars in classpath or codebase. Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Logger.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/logger.sf Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java 2007-11-07 17:19:07 UTC (rev 5463) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java 2007-11-07 18:45:58 UTC (rev 5464) @@ -52,6 +52,8 @@ import java.io.PrintStream; import java.rmi.RemoteException; import java.util.*; +import java.util.regex.Pattern; +import java.util.regex.Matcher; import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.security.SFClassLoader; @@ -148,56 +150,87 @@ outPS.print(out); } - /** - * Print a report to the given StringBuffer. - * @param out the StringBuffer to print the report to. - * @param cd the SmartFrog component description where to extract info from. - * Derived from Ant Diagnostics class - */ - public static void doReport(StringBuffer out, ComponentDescription cd) { - out.append("\n------- SF CD diagnostics report -------"); - header(out, "Implementation Version"); - out.append(org.smartfrog.Version.versionString()); - out.append("\n"); - out.append(org.smartfrog.Version.copyright()); - out.append("\n"); - out.append("Build date: "); - out.append(org.smartfrog.Version.buildDate()); - out.append("\n"); + private static void doReportCommon(StringBuffer out) { + header(out, "Implementation Version"); + out.append(org.smartfrog.Version.versionString()); + out.append("\n"); + out.append(org.smartfrog.Version.copyright()); + out.append("\n"); + out.append("Build date: "); + out.append(org.smartfrog.Version.buildDate()); + out.append("\n"); - header(out, "System properties summary"); - doReportSummary(out); + header(out, "System properties summary"); + doReportSummary(out); - header(out, "Temp dir"); - doReportTempDir(out); + header(out, "Temp dir"); + doReportTempDir(out); - header(out, "Network"); - doReportLocalNetwork(out); - out.append("\n"); - doReportRemoteNetwork(out,Logger.testURI); - out.append("\n"); + header(out, "Network"); + doReportLocalNetwork(out); + out.append("\n"); + doReportRemoteNetwork(out, Logger.testURI); + out.append("\n"); - header(out, "ClassPath"); - doReportClassPath(out); + header(out, "ClassPath"); + doReportClassPath(out); - header(out, "CodeBase"); - doReportClassPath(out); + header(out, "ClassPath repeats"); + doReportClassPathRepeats(out); - header(out, "Locale information"); - doReportLocale(out); - doReportCD(out, cd); + header(out, "CodeBase"); + doReportCodeBase(out); + + header(out, "CodeBase repeats"); + doReportCodeBaseRepeats(out); - header(out, "System properties"); - doReportSystemProperties(out); + header(out, "Locale information"); + doReportLocale(out); + } - header(out, org.smartfrog.Version.versionString()); - out.append("\n"); + + /** + * Print a report to the given StringBuffer. + * @param out the StringBuffer to print the report to. + * @param object prim/componentdescription the SmartFrog component where to extract info from. + * Derived from Ant Diagnostics class + */ + public static void doReport(StringBuffer out, Object object) { + + if (object instanceof Prim) { + out.append("\n------- SF diagnostics report -------"); + } else if (object instanceof ComponentDescription) { + out.append("\n------- SF CD diagnostics report -------"); + } else { + out.append("\n------- SF (unknown) diagnostics report -------"); } + doReportCommon(out); + + if (object instanceof Prim) { + doReportPrim(out, (Prim) object); + } else if (object instanceof ComponentDescription) { + doReportCD(out, (ComponentDescription) object); + } else { + header (out, " WARNING: no SF object to report"); + } + + header(out, "System Thread Dump"); + doReportThreadDump(out); + + header(out, "System properties"); + doReportSystemProperties(out); + + header(out, org.smartfrog.Version.versionString() ); + out.append("\n"); + + } + + /** * Report specific Prim information. * @param out StringBuffer @@ -257,61 +290,8 @@ } } - /** - * Print a report to the given StringBuffer. - * @param out the StringBuffer to print the report to. - * @param prim the SmartFrog component where to extract info from. - * Derived from Ant Diagnostics class - */ - public static void doReport(StringBuffer out, Prim prim) { - out.append("\n------- SF diagnostics report -------"); - header(out, "Implementation Version"); - out.append(org.smartfrog.Version.versionString()); - out.append("\n"); - out.append(org.smartfrog.Version.copyright()); - out.append("\n"); - out.append("Build date: "); - out.append(org.smartfrog.Version.buildDate()); - out.append("\n"); - - header(out, "System properties summary"); - doReportSummary(out); - - header(out, "Temp dir"); - doReportTempDir(out); - - header(out, "Network"); - doReportLocalNetwork(out); - out.append("\n"); - doReportRemoteNetwork(out,Logger.testURI); - out.append("\n"); - - header(out, "ClassPath"); - doReportClassPath(out); - - header(out, "CodeBase"); - doReportCodeBase(out); - out.append("\n"); - - header(out, "Locale information"); - doReportLocale(out); - - doReportPrim(out, prim); - - header(out, "Thread Dump"); - doReportThreadDump(out); - - header(out, "System properties"); - doReportSystemProperties(out); - - header(out, org.smartfrog.Version.versionString() ); - out.append("\n"); - - } - - /** * Report specific Prim information. * @param out StringBuffer @@ -667,7 +647,7 @@ if (codebaseString!=null) { out.append(""+codebaseString.replace(System.getProperty("path.separator").charAt(0), '\n')); } else { - out.append(""+"Not defined, using default"); + out.append(""+"Not defined, using default\n"); } } @@ -787,4 +767,34 @@ + cal.get(Calendar.SECOND)) * 1000 + cal.get(Calendar.MILLISECOND)));out.append("\n"); } + + /** + * Report a listing of classpath used in the current vm. + * @param out the stream to print the properties report to. + */ + private static void doReportClassPathRepeats(StringBuffer out) { + String[] words = Logger.testJarRepeat; + String classpath[] = (System.getProperty("java.class.path")).split(System.getProperty("path.separator")); + StringBuffer message = Logger.getRepeatsMessage(words, classpath); + if (message !=null) out.append(message.toString()); + out.append("\n"); + } + + /** + * Report a listing of classpath used in the current vm. + * @param out the stream to print the properties report to. + */ + private static void doReportCodeBaseRepeats(StringBuffer out) { + String[] words = Logger.testJarRepeat; + StringBuffer message = null; + String codebaseproperty = System.getProperty(org.smartfrog.sfcore.security.SFClassLoader.SF_CODEBASE_PROPERTY); + if (codebaseproperty != null) { + String codebase[] = codebaseproperty.split(System.getProperty("path.separator")); + message = Logger.getRepeatsMessage(words, codebase); + if (message !=null) out.append(message.toString()); + } + out.append("\n"); + } + + } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Logger.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Logger.java 2007-11-07 17:19:07 UTC (rev 5463) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Logger.java 2007-11-07 18:45:58 UTC (rev 5464) @@ -24,6 +24,9 @@ import org.smartfrog.sfcore.componentdescription.ComponentDescriptionImpl; import org.smartfrog.sfcore.componentdescription.ComponentDescription; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + /** * Class used to store some flags used for log reporting. */ @@ -31,7 +34,11 @@ /** Used as default value in diagnostics for remote host {@value} */ public static final String SMARTFROG_URL = "http://www.smartfrog.org/"; + /** Used as default value in diagnostics for repeat jars {@value} */ + public static final String SMARTFROG_JAR = "smartfrog-"; + public static final String SFSERVICES_JAR = "sfServices"; + /** Property name for Logger class * Value {@value} * */ @@ -49,6 +56,9 @@ /** String name for optional attribute "{@value}". */ public final static String ATR_TEST_URI = "testURI"; + /** String name for optional attribute "{@value}". */ + public final static String ATR_TEST_JAR_REPEAT = "testJarRepeat"; + /** Property to enable stack trace. The default value is overridden by the * value specified in default.ini file. */ @@ -71,6 +81,11 @@ /** Property to define a list of remote hosts for remote network test . The default value can be overridden by the * value specified in default.ini file. */ + public static String[] testJarRepeat = {SMARTFROG_JAR, SFSERVICES_JAR}; + + /** Property to define a list of remote hosts for remote network test . The default value can be overridden by the + * value specified in default.ini file. + */ public static String[] testURI = {SMARTFROG_URL}; private static boolean initialized = false; @@ -96,6 +111,7 @@ processCompoundDiagReport = configuration.sfResolve(ATR_LOG_PC_DIAG_REPORT,processCompoundDiagReport,false); testNetwork = configuration.sfResolve(ATR_TEST_NETWORK,testNetwork,false); testURI = configuration.sfResolve(ATR_TEST_URI,testURI,false); + testJarRepeat = configuration.sfResolve(ATR_TEST_JAR_REPEAT,testJarRepeat,false); } } catch (Exception ex){ if (SFSystem.sfLog().isErrorEnabled()) { SFSystem.sfLog().error(ex); } @@ -112,9 +128,31 @@ if (logLiveness && (SFSystem.sfLog().isWarnEnabled())) { SFSystem.sfLog().warn(MessageUtil.formatMessage(MSG_WARNING_LIVENESS_ENABLED)); } + reportRepeatedJars(); + } /** + * Warn of repeated .jars + */ + private static void reportRepeatedJars() { + try { + // Check for repeated Jar files in classpath + String[] words = Logger.testJarRepeat; + String classpath[] = (System.getProperty("java.class.path")).split(System.getProperty("path.separator")); + StringBuffer message = Logger.getRepeatsMessage(words, classpath); + if (message !=null) SFSystem.sfLog().warn("Possible problem with classpath: \n"+message.toString()); + // Check for repeated Jar files in code base + String codebaseproperty = System.getProperty(org.smartfrog.sfcore.security.SFClassLoader.SF_CODEBASE_PROPERTY); + if (codebaseproperty != null) { + String codebase[] = codebaseproperty.split(System.getProperty("path.separator")); + message = Logger.getRepeatsMessage(words, codebase); + if (message !=null) SFSystem.sfLog().warn("Possible problem with codebase: "+message.toString()); + } + } catch (Throwable thr) { /*ignore*/ } + } + + /** * Return the intializaed status of Logger * @return boolean */ @@ -122,4 +160,45 @@ return initialized; } + public static StringBuffer getRepeatsMessage(String[] words, String[] codebase) { + String repeats; + StringBuffer message = null; + for (String word : words) { + repeats = checkRepeatedWords(word, codebase); + if (repeats !=null) { + if (message == null) message = new StringBuffer(); + message.append(repeats); + } + } + return message; + } + + + /** + * + * Method to search for repeted number of words in a String + * + * @param word Word to match + * @param content array of strings to search + * @return resultMessage list of lines where the word was found or NULL 1 or less found. + */ + public static String checkRepeatedWords (String word, String[] content) { + String regex = word; + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(""); // Create Matcher + StringBuffer strb = new StringBuffer(); + int count = 0; + + for (String line : content) { + m.reset(line); + while (m.find()) { + strb.append("\n "+line); + count++; + } + } + if (count >1) { + return (count + " occurrences for "+word + strb.toString()+"\n"); + } else return null; + } + } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/logger.sf =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/logger.sf 2007-11-07 17:19:07 UTC (rev 5463) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/logger.sf 2007-11-07 18:45:58 UTC (rev 5464) @@ -24,4 +24,5 @@ // processCompoundDiagReport false; // testNetwork true; //testURI [|"http://www.smartfrog.org"|]; + testJarRepeat [|"smartfrog-","sfServices","sfExamples","sf-anubis"|] } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pau...@us...> - 2008-01-31 10:00:09
|
Revision: 5827 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=5827&view=rev Author: paul_murray Date: 2008-01-31 01:59:56 -0800 (Thu, 31 Jan 2008) Log Message: ----------- Wrapped tags Set data structure with a ReadOnlySetWrapper in ContextImpl to avoid copy each time the tags are obtained Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java Added Paths: ----------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlySetWrapper.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2008-01-30 17:45:00 UTC (rev 5826) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2008-01-31 09:59:56 UTC (rev 5827) @@ -16,7 +16,7 @@ For more information: www.smartfrog.org -*/ + */ package org.smartfrog.sfcore.common; @@ -34,9 +34,10 @@ */ public class ContextImpl extends OrderedHashtable implements Context, Serializable, PrettyPrinting, Copying { - Map attributeTags = new HashMap(); + Map attributeTags = new HashMap(); + Map attributeTagsWrappers = new HashMap(); - /** + /** * Creates an empty context with default capacity. */ public ContextImpl() { @@ -64,7 +65,7 @@ return sfAttributeKeyFor(value); } - /** + /** * Returns the first attribute which has a particular "equal" value in the table. * * @param value value to find in table @@ -93,23 +94,23 @@ * @return true if context contains value, false otherwise */ public boolean sfContainsValue(Object value){ - return containsValue(value); + return containsValue(value); } - /** + /** * Returns true if the context contains value reference (==). * Replaces contains() * @param value object to check * * @return true if context contains value, false otherwise - * @throws NullPointerException if the value is <code>null</code>. + * @throws NullPointerException if the value is <code>null</code>. */ public boolean sfContainsRefValue(Object value){ - if (value == null) { - throw new NullPointerException(); - } - for (Enumeration e = keys(); e.hasMoreElements();) { - Object theKey = e.nextElement(); + if (value == null) { + throw new NullPointerException(); + } + for (Enumeration e = keys(); e.hasMoreElements();) { + Object theKey = e.nextElement(); if (get(theKey) == (value)) { return true; } @@ -125,7 +126,7 @@ * @return true if context contains key, false otherwise */ public boolean sfContainsAttribute(Object attribute){ - return containsKey(attribute); + return containsKey(attribute); } @@ -167,7 +168,7 @@ Object result = this.get(name); if (result == null) { throw new SmartFrogContextException( - MessageUtil.formatMessage(MessageKeys.MSG_NOT_FOUND_ATTRIBUTE, name)); + MessageUtil.formatMessage(MessageKeys.MSG_NOT_FOUND_ATTRIBUTE, name)); } return result; } @@ -175,104 +176,104 @@ - /** - * Adds an attribute to this context under given name. - * - * @param name name of attribute - * @param value value of attribute - * - * @return previous value for name or null if none - * - * @throws SmartFrogContextException when name or value are null or name already used - */ - public synchronized Object sfAddAttribute(Object name, Object value) - throws SmartFrogContextException{ - if ((name == null) || (value == null)) { - if (name == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MessageKeys.MSG_NULL_DEF_METHOD, "'name'", - "sfAddAttribute") ); - } - if (value == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MessageKeys.MSG_NULL_DEF_METHOD, "'value'", - "sfAddAttribute name:'"+name+"'")); - } + /** + * Adds an attribute to this context under given name. + * + * @param name name of attribute + * @param value value of attribute + * + * @return previous value for name or null if none + * + * @throws SmartFrogContextException when name or value are null or name already used + */ + public synchronized Object sfAddAttribute(Object name, Object value) + throws SmartFrogContextException{ + if ((name == null) || (value == null)) { + if (name == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MessageKeys.MSG_NULL_DEF_METHOD, "'name'", + "sfAddAttribute") ); + } + if (value == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MessageKeys.MSG_NULL_DEF_METHOD, "'value'", + "sfAddAttribute name:'"+name+"'")); + } - return null; - } + return null; + } - if (this.containsKey(name)) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MessageKeys.MSG_REPEATED_ATTRIBUTE, name)); + if (this.containsKey(name)) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MessageKeys.MSG_REPEATED_ATTRIBUTE, name)); - } + } - return this.put(name, value); - } + return this.put(name, value); + } - /** - * Removes an attribute from this context. - * - * @param name of attribute to be removed - * - * @return removed attribute value if successfull or null if not - * - * @throws SmartFrogContextException when name is null - */ - public synchronized Object sfRemoveAttribute(Object name) - throws SmartFrogContextException{ - if (name == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'name'", - "sfRemoveAttribute")); - } - return this.remove(name); - } + /** + * Removes an attribute from this context. + * + * @param name of attribute to be removed + * + * @return removed attribute value if successfull or null if not + * + * @throws SmartFrogContextException when name is null + */ + public synchronized Object sfRemoveAttribute(Object name) + throws SmartFrogContextException{ + if (name == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'name'", + "sfRemoveAttribute")); + } + return this.remove(name); + } - /** - * Replace named attribute in context. If attribute is not - * present it is added to the context. - * - * @param name of attribute to replace - * @param value value to add or replace - * - * @return the old value if present, null otherwise - * - * @throws SmartFrogContextException when name or value are null - */ - public synchronized Object sfReplaceAttribute(Object name, Object value) - throws SmartFrogContextException { - if ((name == null) || (value == null)) { - if (name == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'name'", - "sfReplaceAttribute")); - } - if (value == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'value'", - "sfReplaceAttribute")); - } + /** + * Replace named attribute in context. If attribute is not + * present it is added to the context. + * + * @param name of attribute to replace + * @param value value to add or replace + * + * @return the old value if present, null otherwise + * + * @throws SmartFrogContextException when name or value are null + */ + public synchronized Object sfReplaceAttribute(Object name, Object value) + throws SmartFrogContextException { + if ((name == null) || (value == null)) { + if (name == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'name'", + "sfReplaceAttribute")); + } + if (value == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'value'", + "sfReplaceAttribute")); + } - return null; - } + return null; + } - return this.put(name, value); - } + return this.put(name, value); + } - /** - * Returns the attribute key given a value. Uses == for the comparison - * - * @param value value to look up key for - * - * @return key for attribute value or null if none - */ + /** + * Returns the attribute key given a value. Uses == for the comparison + * + * @param value value to look up key for + * + * @return key for attribute value or null if none + */ - // perhaps this should be synchronized... but causes problems with sfCompleteName if it is - public Object sfAttributeKeyFor(Object value) { - if (!contains(value)) { + // perhaps this should be synchronized... but causes problems with sfCompleteName if it is + public Object sfAttributeKeyFor(Object value) { + if (!contains(value)) { return null; } for (Enumeration e = keys(); e.hasMoreElements();) { @@ -283,164 +284,176 @@ } } return null; - } + } + /** + * Set the TAGS for an attribute. TAGS are simply uninterpreted strings associated + * with each attribute. + * + * @param name attribute key for tags + * @param tags a set of tags + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfSetTags(Object name, Set tags) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for setting tags"); + Set s = (Set)attributeTags.get(name); + if( s == null ) { + s = Collections.synchronizedSet(new HashSet()); + attributeTags.put(name, s); + attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); + s.addAll(tags); + } else { + s.clear(); + s.addAll(tags); + } + } - /** - * Set the TAGS for an attribute. TAGS are simply uninterpreted strings associated - * with each attribute. - * - * @param name attribute key for tags - * @param tags a set of tags - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfSetTags(Object name, Set tags) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for setting tags"); + /** + * Get the TAGS for an attribute. TAGS are simply uninterpreted strings associated + * with each attribute. + * + * @param name attribute key for tags + * @return the set of tags + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized Set sfGetTags(Object name) throws SmartFrogContextException { + if ( name==null || !containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for getting tags"); + Set s = (ReadOnlySetWrapper)attributeTagsWrappers.get(name); + if( s == null ) { + Set tags = Collections.synchronizedSet(new HashSet()); + attributeTags.put(name, tags); + s = ReadOnlySetWrapper.wrap(tags); + attributeTagsWrappers.put(name, s); + return s; + } else { + return s; + } + } - Set s = Collections.synchronizedSet(new HashSet()); - s.addAll(tags); - attributeTags.put(name, s); - } + /** + * add a tag to the tag set of an attribute + * + * @param name attribute key for tags + * @param tag a tag to add to the set + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfAddTag(Object name, String tag) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for adding tags"); + Set s = (Set)attributeTags.get(name); + if ( s == null ) { // add it + s = Collections.synchronizedSet(new HashSet()); + attributeTags.put(name, s); + attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); + s.add(tag); + } else { + s.add(tag); + } + } - /** - * Get the TAGS for an attribute. TAGS are simply uninterpreted strings associated - * with each attribute. - * - * @param name attribute key for tags - * @return the set of tags - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized Set sfGetTags(Object name) throws SmartFrogContextException { - if ( name==null || !containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for getting tags"); - if (attributeTags.containsKey(name)) { // return a copy - Set s = new HashSet(); - s.addAll((Set)attributeTags.get(name)); - return s; - } else { //return an empty set as it has not been set yet - return new HashSet(); - } - } + /** + * remove a tag from the tag set of an attribute if it exists + * + * @param name attribute key for tags + * @param tag a tag to remove from the set + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfRemoveTag(Object name, String tag) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for removing tags"); + Set s = (Set)attributeTags.get(name); + if ( s == null ) { + // do nothing - its not there + } else { + s.remove(tag); + } + } - /** - * add a tag to the tag set of an attribute - * - * @param name attribute key for tags - * @param tag a tag to add to the set - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfAddTag(Object name, String tag) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for adding tags"); - if (attributeTags.containsKey(name)) { // add it - Set s = (Set)attributeTags.get(name); - s.add(tag); - } else { //create a new set and add it - Set s = Collections.synchronizedSet(new HashSet()); - s.add(tag); - attributeTags.put(name, s); - } - } + /** + * add a tag to the tag set of an attribute + * + * @param name attribute key for tags + * @param tags a set of tags to add to the set + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfAddTags(Object name, Set tags) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for adding tags"); + Set s = (Set)attributeTags.get(name); + if( s == null ) { + s = Collections.synchronizedSet(new HashSet()); + attributeTags.put(name, s); + attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); + s.addAll(tags); + } else { + s.addAll(tags); + } + } - /** - * remove a tag from the tag set of an attribute if it exists - * - * @param name attribute key for tags - * @param tag a tag to remove from the set - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfRemoveTag(Object name, String tag) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for removing tags"); - if (attributeTags.containsKey(name)) { // remove it - Set s = (Set)attributeTags.get(name); - s.remove(tag); - if (s.size() == 0) attributeTags.remove(name); - } else { // do nothing as it isn't there! - } - } + /** + * remove a tag from the tag set of an attribute if it exists + * + * @param name attribute key for tags + * @param tags a set of tags to remove from the set + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfRemoveTags(Object name, Set tags) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for removing tags"); + Set s = (Set)attributeTags.get(name); + if ( s == null ) { + // do nothing - its not there + } else { + s.removeAll(tags); + } + } + /** + * Return an iterator over the tags for an attribute + * + * @param name the name of the attribute + * @return an iterator over the tags + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public Iterator sfTags(Object name) throws SmartFrogContextException { + Iterator iter; + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for iterating over tags"); + Set s = (Set)attributeTags.get(name); + if( s == null ) { + s = Collections.synchronizedSet(new HashSet()); + attributeTags.put(name, s); + attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); + return s.iterator(); + } else { + return s.iterator(); + } + } - /** - * add a tag to the tag set of an attribute - * - * @param name attribute key for tags - * @param tags a set of tags to add to the set - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfAddTags(Object name, Set tags) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for adding tags"); - if (attributeTags.containsKey(name)) { // add it - Set s = (Set)attributeTags.get(name); - s.addAll(tags); - } else { //create a new set and add it - Set s = Collections.synchronizedSet(new HashSet()); - s.addAll(tags); - attributeTags.put(name, s); - } - } + /** + * Return whether or not a tag is in the list of tags for an attribute + * + * @param name the name of the attribute + * @param tag the tag to chack + * + * @return whether or not the attribute has that tag + * @throws SmartFrogContextException the attribute does not exist + */ + public boolean sfContainsTag(Object name, String tag) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for validating tag's existance"); + Set s = (Set)attributeTags.get(name); + return (s == null ) ? false : s.contains(tag); + } - /** - * remove a tag from the tag set of an attribute if it exists - * - * @param name attribute key for tags - * @param tags a set of tags to remove from the set - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfRemoveTags(Object name, Set tags) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for removing tags"); - if (attributeTags.containsKey(name)) { // remove it - Set s = (Set)attributeTags.get(name); - s.removeAll(tags); - if (s.size() == 0) attributeTags.remove(name); - } else { // do nothing as it isn't there! - } - } - /** - * Return an iterator over the tags for an attribute - * - * @param name the name of the attribute - * @return an iterator over the tags - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public Iterator sfTags(Object name) throws SmartFrogContextException { - Iterator iter; - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for iterating over tags"); - if (attributeTags.containsKey(name)) { // return set iterator - Set s = (Set)attributeTags.get(name); - iter = s.iterator(); - } else { // return iterator on empty set - Set s = new HashSet(); - iter = s.iterator(); - } - return iter; - } - - /** - * Return whether or not a tag is in the list of tags for an attribute - * - * @param name the name of the attribute - * @param tag the tag to chack - * - * @return whether or not the attribute has that tag - * @throws SmartFrogContextException the attribute does not exist - */ - public boolean sfContainsTag(Object name, String tag) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for validating tag's existance"); - return sfGetTags(name).contains(tag); - } - /** * Compares the specified Object with this Context Tags for equality * @@ -448,11 +461,11 @@ * @return true if the specified Object is equal to this Map. */ public synchronized boolean equalsTags (Object o) { - if (o == attributeTags) - return true; + if (o == attributeTags) + return true; - if (!(o instanceof Map)) - return false; + if (!(o instanceof Map)) + return false; if (!attributeTags.equals(o)){ return false; @@ -542,21 +555,21 @@ * @throws IOException failure while writing */ protected void writeTagsOn(Writer ps, int indent, Object key) throws IOException { - if (attributeTags.containsKey(key)) { - try { - if (sfGetTags(key).size() > 0) { - ps.write("[ "); - for (Iterator i = sfTags(key); i.hasNext();) { - ps.write(i.next().toString() + " "); + if (attributeTags.containsKey(key)) { + try { + if (sfGetTags(key).size() > 0) { + ps.write("[ "); + for (Iterator i = sfTags(key); i.hasNext();) { + ps.write(i.next().toString() + " "); + } + ps.write("] "); } - ps.write("] "); - } - } catch (SmartFrogContextException e) { - // shouldn't happen... - } - } + } catch (SmartFrogContextException e) { + // shouldn't happen... + } + } } - /** + /** * Writes given attribute key on a writer. * * @param ps writer to write on @@ -587,10 +600,10 @@ } catch (IOException ex) { throw ex; } catch (java.lang.StackOverflowError thr) { - StringBuffer msg = new StringBuffer("Failed to pretty print value. Possible cause: cyclic reference."); - msg.append("Cause:#<0># "); - msg.append(thr.getCause().toString()); - throw new java.io.IOException(msg.toString()); + StringBuffer msg = new StringBuffer("Failed to pretty print value. Possible cause: cyclic reference."); + msg.append("Cause:#<0># "); + msg.append(thr.getCause().toString()); + throw new java.io.IOException(msg.toString()); } } else { writeBasicValueOn(ps, indent, value); @@ -688,6 +701,7 @@ public void clear() { super.clear(); attributeTags.clear(); + attributeTagsWrappers.clear(); } /** @@ -701,6 +715,7 @@ public Object remove(Object key) { Object r = super.remove(key); attributeTags.remove(key); + attributeTagsWrappers.remove(key); return r; } @@ -720,6 +735,7 @@ Object key = orderedKeys.remove(index); Object value = super.remove(index); attributeTags.remove(key); + attributeTagsWrappers.remove(key); return value; } @@ -734,11 +750,19 @@ * @return the initial key, or null if it wasn't in the table */ public Object rename(Object key1, Object key2) { + // if the same don't do anything + if( key1.equals(key2) ) { + return key1; + } + super.rename(key1, key2); + // safe because key1 != key2 if (attributeTags.containsKey(key1)) { - attributeTags.put(key2, attributeTags.get(key1)); - attributeTags.remove(key1); + attributeTags.put(key2, attributeTags.get(key1)); + attributeTags.remove(key1); + attributeTagsWrappers.put(key2, attributeTagsWrappers.get(key1)); + attributeTagsWrappers.remove(key1); } return key1; @@ -753,36 +777,39 @@ public Object clone() { - Object ret = super.clone(); - Map m = new HashMap(); - for (Iterator i = attributeTags.keySet().iterator(); i.hasNext(); ) { - Object key = i.next(); - Set s = (Set) attributeTags.get(key); - Set sc = Collections.synchronizedSet(new HashSet()); - sc.addAll(s); - m.put(key, sc); - } - ((ContextImpl) ret).attributeTags = m; + Object ret = super.clone(); + Map m = new HashMap(); + Map w = new HashMap(); + for (Iterator i = attributeTags.keySet().iterator(); i.hasNext(); ) { + Object key = i.next(); + Set s = (Set) attributeTags.get(key); + Set sc = Collections.synchronizedSet(new HashSet()); + sc.addAll(s); + m.put(key, sc); + w.put(key, ReadOnlySetWrapper.wrap(sc)); + } + ((ContextImpl) ret).attributeTags = m; + ((ContextImpl) ret).attributeTagsWrappers = w; return ret; } - /** - * Does a deep copy of the hashtable. Values in the hashtable which - * understand the Copying interface get copied properly. If the Values - * cannot be copied, the basic SF values (numbers, strings, booleans, are - * each properly dealt with. Other values are copied using serialize/deserialize - * if they implement serialization - note that because of this transient data will - * not be copied. It also copies the attributeTags. - * - * This overrides the one in OrderedHashtable. - * - * @return copy of hashtable - */ - public Object copy() { - // note that since the super method uses clone, - // this is already copying attributeTags - return super.copy(); - } + /** + * Does a deep copy of the hashtable. Values in the hashtable which + * understand the Copying interface get copied properly. If the Values + * cannot be copied, the basic SF values (numbers, strings, booleans, are + * each properly dealt with. Other values are copied using serialize/deserialize + * if they implement serialization - note that because of this transient data will + * not be copied. It also copies the attributeTags. + * + * This overrides the one in OrderedHashtable. + * + * @return copy of hashtable + */ + public Object copy() { + // note that since the super method uses clone, + // this is already copying attributeTags + return super.copy(); + } /** @@ -795,14 +822,14 @@ public synchronized boolean equals(Object o) { if (o == this) - return true; + return true; if (!(o instanceof Context)) - return false; + return false; // Compares HashMap if (!super.equals(o)) - return false; + return false; // Compares Tags Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlySetWrapper.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlySetWrapper.java (rev 0) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlySetWrapper.java 2008-01-31 09:59:56 UTC (rev 5827) @@ -0,0 +1,128 @@ +/** (C) Copyright 1998-2008 Hewlett-Packard Development Company, LP + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +For more information: www.smartfrog.org + +*/ +package org.smartfrog.sfcore.common; + +import java.io.ObjectStreamException; +import java.io.Serializable; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +/** + * ReadOnlySetWrapper can be used to wrap any object that implements + * the Set interface to convert it into a read-only version. It + * implements all the Set methods except those that change the + * composition of the set. Methods to add or remove objects from + * the set return UnsurpportedOperationException. + * + * The wrapper that is used to wrap null will behave as an empty set. + */ +public class ReadOnlySetWrapper implements Set, Serializable { + + private static final Set nullSet = new HashSet(); + + private Set impl; + + private ReadOnlySetWrapper(Set set) { + setImpl(set); + } + + public static Set wrap(Set set) { + return new ReadOnlySetWrapper(set); + } + + public void setImpl(Set set) { + if( set == null ) { + impl = nullSet; + } else { + impl = set; + } + } + + public Set getImpl() { + return impl; + } + + public boolean add(Object o) { + throw new UnsupportedOperationException(); + } + + public boolean addAll(Collection c) { + throw new UnsupportedOperationException(); + } + + public void clear() { + throw new UnsupportedOperationException(); + } + + public boolean contains(Object o) { + return impl.contains(o); + } + + public boolean containsAll(Collection c) { + return impl.containsAll(c); + } + + public boolean equals(Object o) { + return impl.equals(o); + } + + public int hashCode() { + return impl.hashCode(); + } + + public boolean isEmpty() { + return impl.isEmpty(); + } + + public Iterator iterator() { + return impl.iterator(); + } + + public boolean remove(Object o) { + throw new UnsupportedOperationException(); + } + + public boolean removeAll(Collection c) { + throw new UnsupportedOperationException(); + } + + public boolean retainAll(Collection c) { + throw new UnsupportedOperationException(); + } + + public int size() { + return impl.size(); + } + + public Object[] toArray() { + return impl.toArray(); + } + + public Object[] toArray(Object[] a) { + return impl.toArray(a); + } + + public String toString() { + return impl.toString(); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2008-02-27 22:49:28
|
Revision: 6045 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=6045&view=rev Author: steve_l Date: 2008-02-27 14:49:23 -0800 (Wed, 27 Feb 2008) Log Message: ----------- fix various IDE complaints, sort out imports and javadocs. move some lists and the like into java5 typed containers. Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDetach.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDetachAndTerminate.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDiagnostics.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDump.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionTerminate.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionUpdate.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/BaseClassLoader.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationAction.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumpVisitorImpl.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumperCDImpl.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Logger.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/MessageKeys.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ParseOptionSet.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/RemoteTags.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/RemoteTagsComponent.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SFByteArray.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SFMarshalledObject.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SFNull.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SFTempValue.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogCoreKeys.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogDeploymentException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogExtractedException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogLifecycleException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogLogException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogResolutionException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SmartFrogUpdateException.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/StringComparator.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Tags.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/TagsComponent.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/URLClassLoader.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDeploy.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -19,17 +19,17 @@ */ package org.smartfrog.sfcore.common; +import org.smartfrog.SFSystem; +import org.smartfrog.sfcore.componentdescription.ComponentDescription; +import org.smartfrog.sfcore.componentdescription.ComponentDescriptionImpl; +import org.smartfrog.sfcore.compound.Compound; import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.prim.TerminationRecord; import org.smartfrog.sfcore.processcompound.ProcessCompound; -import org.smartfrog.sfcore.componentdescription.ComponentDescription; -import org.smartfrog.sfcore.componentdescription.ComponentDescriptionImpl; +import org.smartfrog.sfcore.reference.HereReferencePart; import org.smartfrog.sfcore.reference.Reference; import org.smartfrog.sfcore.reference.ReferencePart; -import org.smartfrog.sfcore.reference.HereReferencePart; -import org.smartfrog.sfcore.compound.Compound; - import java.rmi.RemoteException; import java.util.Date; @@ -85,7 +85,7 @@ //First thing first: system gets initialized //Protect system if people use this as entry point try { - org.smartfrog.SFSystem.initSystem(); + SFSystem.initSystem(); } catch (Exception ex) { throw SmartFrogException.forward(ex); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDetach.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDetach.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDetach.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -19,9 +19,11 @@ */ package org.smartfrog.sfcore.common; +import org.smartfrog.SFSystem; +import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.processcompound.ProcessCompound; -import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.processcompound.SFProcess; + import java.rmi.RemoteException; /** @@ -43,7 +45,7 @@ //First thing first: system gets initialized //Protect system if people use this as entry point try { - org.smartfrog.SFSystem.initSystem(); + SFSystem.initSystem(); } catch (Exception ex) { throw SmartFrogException.forward(ex); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDetachAndTerminate.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDetachAndTerminate.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDetachAndTerminate.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -19,10 +19,11 @@ */ package org.smartfrog.sfcore.common; +import org.smartfrog.SFSystem; +import org.smartfrog.sfcore.prim.Prim; +import org.smartfrog.sfcore.prim.TerminationRecord; import org.smartfrog.sfcore.processcompound.ProcessCompound; import org.smartfrog.sfcore.processcompound.SFProcess; -import org.smartfrog.sfcore.prim.TerminationRecord; -import org.smartfrog.sfcore.prim.Prim; import java.rmi.RemoteException; @@ -52,7 +53,7 @@ //First thing first: system gets initialized //Protect system if people use this as entry point try { - org.smartfrog.SFSystem.initSystem(); + SFSystem.initSystem(); } catch (Exception ex) { throw SmartFrogException.forward(ex); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDiagnostics.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDiagnostics.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDiagnostics.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -19,10 +19,12 @@ */ package org.smartfrog.sfcore.common; +import org.smartfrog.SFSystem; +import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.processcompound.ProcessCompound; -import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.reference.Reference; + import java.rmi.RemoteException; /** @@ -45,7 +47,7 @@ //First thing first: system gets initialized //Protect system if people use this as entry point try { - org.smartfrog.SFSystem.initSystem(); + SFSystem.initSystem(); } catch (Exception ex) { throw SmartFrogException.forward(ex); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDump.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDump.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionDump.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -19,15 +19,15 @@ */ package org.smartfrog.sfcore.common; +import org.smartfrog.SFSystem; +import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.processcompound.ProcessCompound; import org.smartfrog.sfcore.processcompound.SFProcess; -import org.smartfrog.sfcore.prim.Prim; -import org.smartfrog.SFSystem; -import java.rmi.RemoteException; +import java.io.PrintWriter; import java.io.Serializable; import java.io.StringWriter; -import java.io.PrintWriter; +import java.rmi.RemoteException; /** * Ping a component @@ -96,24 +96,22 @@ } catch (RemoteException e) { if (SFSystem.sfLog().isWarnEnabled()) SFSystem.sfLog().warn(e); } - //Only works for Prims. - if (targetC instanceof Prim) { - try { - Prim objPrim = ((Prim)targetC); - message.append ("\n*************** State for "+ name+" *****************\n"); - Dumper dumper = new DumperCDImpl(objPrim); - objPrim.sfDumpState(dumper.getDumpVisitor()); - message.append (dumper.toString()); - name = (objPrim).sfCompleteName().toString(); - message.append ("\n*************** End state for "+ name+" *****************\n"); - } catch (Exception ex) { - if (SFSystem.sfLog().isErrorEnabled()) SFSystem.sfLog().error (ex); - StringWriter sw = new StringWriter(); - PrintWriter pr = new PrintWriter(sw,true); - ex.printStackTrace(pr); - pr.close(); - message.append("\n Error: "+ex.toString()+"\n"+sw.toString()); + try { + message.append("\n*************** State for " + name + " *****************\n"); + Dumper dumper = new DumperCDImpl(targetC); + targetC.sfDumpState(dumper.getDumpVisitor()); + message.append(dumper.toString()); + name = (targetC).sfCompleteName().toString(); + message.append("\n*************** End state for " + name + " *****************\n"); + } catch (Exception ex) { + if (SFSystem.sfLog().isErrorEnabled()) { + SFSystem.sfLog().error(ex); } + StringWriter sw = new StringWriter(); + PrintWriter pr = new PrintWriter(sw, true); + ex.printStackTrace(pr); + pr.close(); + message.append("\n Error: " + ex.toString() + "\n" + sw.toString()); } finish = System.currentTimeMillis(); SFSystem.sfLog().out(message); Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionTerminate.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionTerminate.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionTerminate.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -19,10 +19,11 @@ */ package org.smartfrog.sfcore.common; +import org.smartfrog.SFSystem; +import org.smartfrog.sfcore.prim.Prim; +import org.smartfrog.sfcore.prim.TerminationRecord; import org.smartfrog.sfcore.processcompound.ProcessCompound; import org.smartfrog.sfcore.processcompound.SFProcess; -import org.smartfrog.sfcore.prim.Prim; -import org.smartfrog.sfcore.prim.TerminationRecord; import java.rmi.RemoteException; @@ -47,7 +48,7 @@ //First thing first: system gets initialized //Protect system if people use this as entry point try { - org.smartfrog.SFSystem.initSystem(); + SFSystem.initSystem(); } catch (Exception ex) { throw SmartFrogException.forward(ex); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionUpdate.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionUpdate.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ActionUpdate.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -19,14 +19,14 @@ */ package org.smartfrog.sfcore.common; +import org.smartfrog.SFSystem; +import org.smartfrog.sfcore.componentdescription.ComponentDescription; +import org.smartfrog.sfcore.componentdescription.ComponentDescriptionImpl; import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.prim.Update; import org.smartfrog.sfcore.processcompound.ProcessCompound; -import org.smartfrog.sfcore.componentdescription.ComponentDescription; -import org.smartfrog.sfcore.componentdescription.ComponentDescriptionImpl; import org.smartfrog.sfcore.reference.Reference; - import java.rmi.RemoteException; /** @@ -44,29 +44,30 @@ * * @param url URL of resource to parse * @param component reference for the component to update. + * @param context context, may be null * @param deployReference reference to resolve in ComponentDescription. * If ref is null the whole result ComponentDescription is returned. * @return Prim Reference to deployed component * @throws SmartFrogException * failure in some part of the process - * @throws java.rmi.RemoteException In case of network/rmi error + * @throws RemoteException In case of network/rmi error */ public static Update update(String url, Update component, - Context c, Reference deployReference) throws SmartFrogException, RemoteException { + Context context, Reference deployReference) throws SmartFrogException, RemoteException { //First thing first: system gets initialized //Protect system if people use this as entry point try { - org.smartfrog.SFSystem.initSystem(); + SFSystem.initSystem(); } catch (Exception ex) { throw SmartFrogException.forward(ex); } - if (c == null) c = new ContextImpl(); + if (context == null) context = new ContextImpl(); //select the language first from the context, then from the URL itself String language; - language = (String) c.get(KEY_LANGUAGE); + language = (String) context.get(KEY_LANGUAGE); if (language == null) { language = url; } @@ -95,7 +96,8 @@ * @return Object Reference to deployed component * @throws SmartFrogException * failure in some part of the process - * @throws java.rmi.RemoteException In case of network/rmi error + * @throws RemoteException In case of network/rmi error + * @throws SmartFrogException for execution problems */ public Object execute(ProcessCompound targetP, ConfigurationDescriptor configuration) throws SmartFrogException, RemoteException { Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/BaseClassLoader.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/BaseClassLoader.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/BaseClassLoader.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -32,7 +32,7 @@ */ public class BaseClassLoader extends ClassLoader { /** table of loaded classes */ - private Hashtable classes = new Hashtable(); + private Hashtable<String, Class> classes = new Hashtable<String, Class>(); /** * Constructor. @@ -120,7 +120,7 @@ */ protected Class findClass(String className) throws ClassNotFoundException { // Check our local cache of classes - Class result = (Class) classes.get(className); + Class result = classes.get(className); if (result == null) { // Check with the primordial class loader Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationAction.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationAction.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationAction.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -19,11 +19,13 @@ */ package org.smartfrog.sfcore.common; +import org.smartfrog.SFSystem; import org.smartfrog.sfcore.processcompound.ProcessCompound; import org.smartfrog.sfcore.processcompound.SFProcess; +import java.io.EOFException; +import java.net.SocketException; import java.rmi.RemoteException; -import org.smartfrog.SFSystem; /** * This code contains the methods to do things from configurations. @@ -128,7 +130,7 @@ if (resultMultiHostObj==null) {resultMultiHostObj = "";} String resultMultiHost = resultMultiHostObj +"; "+ resultMessage; configuration.setContextAttribute("ResultMultihost", resultMultiHost); - } catch (java.lang.Exception exception) { + } catch ( Exception exception) { exception.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } @@ -160,8 +162,8 @@ if (!rootProcess) throw ex; //TODO: Check exception handling - if ((ex.getCause() instanceof java.net.SocketException) || - (ex.getCause() instanceof java.io.EOFException)) { + if ((ex.getCause() instanceof SocketException) || + (ex.getCause() instanceof EOFException)) { //Logger.log(MessageUtil.formatMessage(MessageKeys.MSG_SF_TERMINATED)); //if (SFSystem.sfLog().isTraceEnabled()) { // SFSystem.sfLog().trace(MessageUtil.formatMessage(MessageKeys.MSG_SF_TERMINATED)); Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ConfigurationDescriptor.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -22,27 +22,22 @@ package org.smartfrog.sfcore.common; import org.smartfrog.SFSystem; - -import org.smartfrog.sfcore.reference.Reference; +import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.prim.TerminationRecord; +import org.smartfrog.sfcore.processcompound.ProcessCompound; +import org.smartfrog.sfcore.reference.Reference; -import java.util.Hashtable; -import java.util.LinkedList; -import java.util.List; -import java.util.Arrays; -import java.rmi.RemoteException; import java.io.IOException; -import java.net.UnknownHostException; -import java.rmi.ConnectException; - -import org.smartfrog.sfcore.processcompound.ProcessCompound; -import org.smartfrog.sfcore.componentdescription.ComponentDescription; - import java.io.LineNumberReader; +import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; -import java.io.PrintWriter; +import java.net.UnknownHostException; +import java.rmi.ConnectException; +import java.rmi.RemoteException; +import java.util.Arrays; +import java.util.Hashtable; /** * Creating a Configuration Descriptor with options @@ -86,7 +81,7 @@ public static final String ACT_DUMP = "DUMP"; public static final int DUMP = 10; - static public String[] type= { + public static String[] type= { ACT_DEPLOY, ACT_TERMINATE, ACT_UNDEFINED, @@ -154,7 +149,7 @@ public static final int FAILED=1; public static final int UNDEFINED=2; public static final int UNKNOWN=3; - static String[] type= {"SUCCESSFUL", + public static String[] type= {"SUCCESSFUL", "FAILED", "UNDEFINED", "UNKNOWN"}; @@ -814,7 +809,7 @@ * of the field. It previously removes " or ' * @param token token marks the beginning of the field * @return String last field from TempURL marked by token - * @throws java.lang.Exception failure in some part of the process + * @throws Exception failure in some part of the process */ private String getAndCutLastFieldTempURL( String token) throws Exception{ String field = null; @@ -1214,7 +1209,9 @@ * @return String hostname */ public String getHost() { - if ((hostsList == null)||(hostsList.length==0)) return null; + if ((hostsList == null) || (hostsList.length == 0)) { + return null; + } return hostsList[0]; } @@ -1223,9 +1220,14 @@ * @return String hostname/s */ public String getHostsString() { - if (hostsList == null) return null; - if (hostsList.length==1) return hostsList[0]; - else return Arrays.toString(hostsList); + if (hostsList == null) { + return null; + } + if (hostsList.length == 1) { + return hostsList[0]; + } else { + return Arrays.toString(hostsList); + } } /** @@ -1233,6 +1235,7 @@ * with the format [...,...,...] * This creates a list of one host only. * @param hostsString hostname/hostnames + * @throws SmartFrogInitException if the string could not be parsed */ public void setHost(String hostsString) throws SmartFrogInitException { if (hostsString==null || isEmpty(hostsString)) return; @@ -1250,7 +1253,13 @@ } - public String[] getHostList (String hostUrlString) throws SmartFrogInitException{ + /** + * Crack the host list + * @param hostUrlString a list of hosts or a single host + * @return an array containing one or more hosts + * @throws SmartFrogInitException if the string could not be parsed + */ + public String[] getHostList (String hostUrlString) throws SmartFrogInitException { String[] hostList = null; if (hostUrlString.startsWith("[")){ if (!hostUrlString.endsWith("]")) throw new SmartFrogInitException( "Error parsing HOST_URLString in: "+ hostUrlString +", missing ']'"); Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Context.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -1,41 +1,42 @@ /** (C) Copyright 1998-2004 Hewlett-Packard Development Company, LP -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -For more information: www.smartfrog.org + For more information: www.smartfrog.org -*/ + */ package org.smartfrog.sfcore.common; +import java.io.Serializable; import java.util.Enumeration; import java.util.Iterator; -import java.io.Serializable; /** * Defines the context interface used by Components. Context implementations - * need to respect the ordering and copying requirements imposed by - * Components. + * need to respect the ordering and copying requirements imposed by Components. * * @see Copying */ public interface Context extends Tags, PrettyPrinting, Copying, Serializable { + /** - * Returns true if the context contains value. - * Deprecated: replaced by sfContainsValue() + * Returns true if the context contains value. Deprecated: replaced by + * sfContainsValue() + * * @param value object to check * * @return true if context contains value, false otherwise @@ -43,8 +44,9 @@ public boolean contains(Object value); /** - * Returns true if the context contains the key. - * Deprecated: replaced by sfContainsAttribute() + * Returns true if the context contains the key. Deprecated: replaced by + * sfContainsAttribute() + * * @param key to check * * @return true if context contains key, false otherwise @@ -52,11 +54,11 @@ public boolean containsKey(Object key); /** - * Returns the values of the context. - * Deprecated: replaced by sfValues(); + * Returns the values of the context. Deprecated: replaced by sfValues(); + * * @return enumeration over the values of the context * - * @see java.util.Enumeration + * @see Enumeration */ public Enumeration elements(); @@ -78,8 +80,9 @@ public boolean isEmpty(); /** - * Returns an enumeration over the keys of the context. - * Deprecated: replaced by sfAttributes(); + * Returns an enumeration over the keys of the context. Deprecated: replaced + * by sfAttributes(); + * * @return enumeration */ public Enumeration keys(); @@ -88,7 +91,7 @@ /** * Adds an object value under given key to context. * - * @param key key of addition + * @param key key of addition * @param value value of addition * * @return the previous value under key, or null if none @@ -124,9 +127,11 @@ /** * Returns the first key which has a particular value in the table. + * * @param value value to find in table * * @return key for value or null if none + * * @deprecated sfAttributeKeyFor should be used instead. */ public Object keyFor(Object value); @@ -147,7 +152,8 @@ /** - * Returns the first attribute which has a particular value "equal" in the table. + * Returns the first attribute which has a particular value "equal" in the + * table. * * @param value value to find in table * @@ -156,30 +162,28 @@ public Object sfAttributeKeyForEqual(Object value); /** - * Returns true if the context contains value reference (==). - * Replaces contains() + * Returns true if the context contains value reference (==). Replaces + * contains() + * * @param value object to check * * @return true if context contains value, false otherwise - * @throws NullPointerException if the value is <code>null</code>. + * + * @throws NullPointerException if the value is <code>null</code>. */ public boolean sfContainsRefValue(Object value); /** - * Returns the attribute key for a given value. * * @param value value to look up the key for * * @return key for given value or null if not found - * */ public Object sfAttributeKeyFor(Object value); /** - - * Returns true if the context contains value. - * Replaces contains() + * Returns true if the context contains value. Replaces contains() * * @param value object to check for equality * @@ -189,8 +193,7 @@ /** - * Returns true if the context contains attribute. - * Replaces containsKey() + * Returns true if the context contains attribute. Replaces containsKey() * * @param attribute to check * @@ -200,36 +203,35 @@ /** - * Returns an iterator over the attribute names of the context. - * The remove operation of this Iterator won't affect - * the contents of Context - + * Returns an iterator over the attribute names of the context. The remove + * operation of this Iterator won't affect the contents of Context + * * @return iterator */ - public Iterator sfAttributes(); + public Iterator sfAttributes(); /** - * Returns an iterator over the values of the context. - * The remove operation of this Iterator won't affect - * the contents of Context + * Returns an iterator over the values of the context. The remove operation + * of this Iterator won't affect the contents of Context + * * @return iterator */ - public Iterator sfValues(); + public Iterator sfValues(); - /** - * Add an attribute to context. Values should be - * marshallable types if they are to be referenced remotely at run-time. - * If an attribute with this name already exists it is <em>not</em> - * replaced. + /** + * Add an attribute to context. Values should be marshallable types if they + * are to be referenced remotely at run-time. If an attribute with this name + * already exists it is <em>not</em> replaced. * - * @param name name of attribute + * @param name name of attribute * @param value object to be added in context * * @return value if successfull, null otherwise * * @throws SmartFrogContextException when name or value are null */ - public Object sfAddAttribute(Object name, Object value)throws SmartFrogContextException; + public Object sfAddAttribute(Object name, Object value) + throws SmartFrogContextException; /** * Remove named attribute from component context. Non present attribute @@ -241,14 +243,15 @@ * * @throws SmartFrogContextException when name is null */ - public Object sfRemoveAttribute(Object name) throws SmartFrogContextException; + public Object sfRemoveAttribute(Object name) + throws SmartFrogContextException; /** - * Replace named attribute in context. If attribute is not - * present it is added to the context. + * Replace named attribute in context. If attribute is not present it is + * added to the context. * - * @param name of attribute to replace + * @param name of attribute to replace * @param value attribute value to replace or add * * @return the old value if present, null otherwise @@ -256,7 +259,7 @@ * @throws SmartFrogContextException when name or value are null */ public Object sfReplaceAttribute(Object name, Object value) - throws SmartFrogContextException; + throws SmartFrogContextException; /** * Find an attribute in this context. @@ -267,7 +270,8 @@ * * @throws SmartFrogContextException failed to find attribute */ - public Object sfResolveAttribute (Object name) throws SmartFrogContextException; + public Object sfResolveAttribute(Object name) + throws SmartFrogContextException; } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -1,4 +1,4 @@ -/** (C) Copyright 1998-2004 Hewlett-Packard Development Company, LP +/** (C) Copyright 1998-2008 Hewlett-Packard Development Company, LP This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,8 +20,19 @@ package org.smartfrog.sfcore.common; -import java.util.*; -import java.io.*; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Serializable; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Vector; /** @@ -366,7 +377,7 @@ */ public synchronized void sfRemoveTag(Object name, String tag) throws SmartFrogContextException { if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for removing tags"); + throw new SmartFrogContextException("Attribute " + name + " does not exist for removing tags"); Set s = (Set)attributeTags.get(name); if ( s == null ) { // do nothing - its not there @@ -385,7 +396,7 @@ */ public synchronized void sfAddTags(Object name, Set tags) throws SmartFrogContextException { if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for adding tags"); + throw new SmartFrogContextException("Attribute " + name + " does not exist for adding tags"); Set s = (Set)attributeTags.get(name); if( s == null ) { s = Collections.synchronizedSet(new HashSet()); Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Diagnostics.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -40,11 +40,13 @@ package org.smartfrog.sfcore.common; +import org.smartfrog.Version; import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.compound.Compound; import org.smartfrog.sfcore.prim.Prim; import org.smartfrog.sfcore.processcompound.ProcessCompound; import org.smartfrog.sfcore.processcompound.SFProcess; +import org.smartfrog.sfcore.security.SFClassLoader; import org.smartfrog.sfcore.security.SFSecurity; import java.io.File; @@ -150,12 +152,12 @@ private static void doReportCommon(StringBuffer out) { header(out, "Implementation Version"); - out.append(org.smartfrog.Version.versionString()); + out.append(Version.versionString()); out.append("\n"); - out.append(org.smartfrog.Version.copyright()); + out.append(Version.copyright()); out.append("\n"); out.append("Build date: "); - out.append(org.smartfrog.Version.buildDate()); + out.append(Version.buildDate()); out.append("\n"); header(out, "System properties summary"); @@ -222,7 +224,7 @@ header(out, "System properties"); doReportSystemProperties(out); - header(out, org.smartfrog.Version.versionString() ); + header(out, Version.versionString() ); out.append("\n"); } @@ -236,7 +238,7 @@ */ public static void doShortReport(StringBuffer out, Object object) { doReportCommon(out); - header(out, org.smartfrog.Version.versionString() ); + header(out, Version.versionString() ); out.append("\n"); } @@ -735,7 +737,7 @@ tempFile = File.createTempFile("sfDiag","txt",tempDirectory); //do some writing to it fileout = new FileOutputStream(tempFile); - byte buffer[]=new byte[1024]; + byte[] buffer=new byte[1024]; for(int i=0;i<32;i++) { fileout.write(buffer); } @@ -807,7 +809,7 @@ private static void doReportCodeBaseRepeats(StringBuffer out) { String[] words = Logger.testJarRepeat; StringBuffer message = null; - String codebaseproperty = System.getProperty(org.smartfrog.sfcore.security.SFClassLoader.SF_CODEBASE_PROPERTY); + String codebaseproperty = System.getProperty(SFClassLoader.SF_CODEBASE_PROPERTY); if (codebaseproperty != null) { String codebase[] = codebaseproperty.split(System.getProperty("path.separator")); message = Logger.getRepeatsMessage(words, codebase); Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumpVisitorImpl.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumpVisitorImpl.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumpVisitorImpl.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -20,14 +20,14 @@ package org.smartfrog.sfcore.common; +import org.smartfrog.sfcore.compound.Compound; import org.smartfrog.sfcore.prim.Dump; import org.smartfrog.sfcore.prim.Prim; -import org.smartfrog.sfcore.compound.Compound; import org.smartfrog.sfcore.reference.Reference; +import java.io.Serializable; import java.rmi.RemoteException; import java.util.Enumeration; -import java.io.Serializable; /** @@ -38,10 +38,9 @@ static final long serialVersionUID = -812223322957783371L; //Reference to the class collecting results from visits - private Dumper dumper = null; + private transient Dumper dumper = null; public DumpVisitorImpl (Dumper dumper){ - super(); this.dumper = dumper; } /** @@ -51,7 +50,7 @@ * @param state state of component (application specific) * @param from source of this call * - * @throws java.rmi.RemoteException In case of Remote/nework error + * @throws RemoteException In case of Remote/nework error */ public void dumpState(Object state, Prim from) throws RemoteException { //System.out.println(" - DumpState from1: "+from.sfCompleteName()); Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumperCDImpl.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumperCDImpl.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/DumperCDImpl.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -22,25 +22,22 @@ import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.componentdescription.ComponentDescriptionImpl; - -import org.smartfrog.sfcore.reference.Reference; -import org.smartfrog.sfcore.reference.ReferencePart; -import org.smartfrog.sfcore.reference.HereReferencePart; -import org.smartfrog.sfcore.prim.Prim; -import org.smartfrog.sfcore.prim.Dump; import org.smartfrog.sfcore.logging.LogFactory; import org.smartfrog.sfcore.logging.LogSF; +import org.smartfrog.sfcore.prim.Dump; +import org.smartfrog.sfcore.prim.Prim; +import org.smartfrog.sfcore.reference.HereReferencePart; +import org.smartfrog.sfcore.reference.Reference; +import org.smartfrog.sfcore.reference.ReferencePart; -import java.rmi.RemoteException; -import java.rmi.MarshalledObject; -import java.rmi.server.RemoteObject; -import java.util.Date; -import java.util.Enumeration; import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.io.Serializable; import java.io.Writer; +import java.rmi.RemoteException; +import java.rmi.server.UnicastRemoteObject; +import java.util.Date; +import java.util.Enumeration; /** * @since 3.11.001 @@ -71,7 +68,7 @@ public DumperCDImpl(Prim from){ try { - java.rmi.server.UnicastRemoteObject.exportObject(this); + UnicastRemoteObject.exportObject(this); rootRef = from.sfCompleteName(); } catch (RemoteException e) { if (sfLog().isErrorEnabled()) sfLog().error(e); @@ -93,15 +90,17 @@ * @param from Owner of context to place in CD * @param stateCopy context for the new component description node */ - public void modifyCD(Reference from, Context stateCopy ) throws Exception, RemoteException { + public void modifyCD(Reference from, Context stateCopy ) throws Exception { try { //Remove non re-deployable keys - for (int i=0; i< sfKeysToBeRemoved.length; i++){ - if (stateCopy.sfContainsAttribute(sfKeysToBeRemoved[i])) { + for (String aSfKeysToBeRemoved : sfKeysToBeRemoved) { + if (stateCopy.sfContainsAttribute(aSfKeysToBeRemoved)) { try { - stateCopy.sfRemoveAttribute(sfKeysToBeRemoved[i]); + stateCopy.sfRemoveAttribute(aSfKeysToBeRemoved); } catch (SmartFrogContextException e) { - if (sfLog().isWarnEnabled()) sfLog().warn(e); + if (sfLog().isWarnEnabled()) { + sfLog().warn(e); + } } } } @@ -152,7 +151,7 @@ * @return The string representation of the description * * @throws Exception attribute not found after timeout - * @throws RemoteException if there is any network or remote error + * @throws SmartFrogException if there is any network or remote error * */ public ComponentDescription getComponentDescription ( long waitTimeout) throws SmartFrogException { @@ -265,7 +264,7 @@ /** This modifies the default set of sfKeys that are removed from every context. * @todo once the visits are started this method should not allow any updates. In any case, * the updates are ignored once the visits start - * @param keysToBeRemoved + * @param keysToBeRemoved keys to pull */ public void sfKeysToBeRemoved (String[] keysToBeRemoved) { this.sfKeysToBeRemoved = keysToBeRemoved; @@ -310,7 +309,7 @@ try { ComponentDescription componentDescription = getComponentDescription(timeout); componentDescription.setEager(true); - ((PrettyPrinting)componentDescription).writeOn(out, 1); + componentDescription.writeOn(out, 1); } catch (SmartFrogException e) { out.write(e.getMessage()); } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Logger.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Logger.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/Logger.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -21,11 +21,12 @@ package org.smartfrog.sfcore.common; import org.smartfrog.SFSystem; +import org.smartfrog.sfcore.componentdescription.ComponentDescription; import org.smartfrog.sfcore.componentdescription.ComponentDescriptionImpl; -import org.smartfrog.sfcore.componentdescription.ComponentDescription; +import org.smartfrog.sfcore.security.SFClassLoader; +import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.regex.Matcher; /** * Class used to store some flags used for log reporting. @@ -46,18 +47,18 @@ //Configuration parameters /** String name for optional attribute "{@value}". */ - public final static String ATR_LOG_STACK_TRACE = "logStackTrace"; + public static final String ATR_LOG_STACK_TRACE = "logStackTrace"; /** String name for optional attribute "{@value}". */ - public final static String ATR_LOG_LIVENESS = "logLiveness"; + public static final String ATR_LOG_LIVENESS = "logLiveness"; /** String name for optional attribute "{@value}". */ - public final static String ATR_LOG_PC_DIAG_REPORT = "processCompoundDiagReport"; + public static final String ATR_LOG_PC_DIAG_REPORT = "processCompoundDiagReport"; /** String name for optional attribute "{@value}". */ - public final static String ATR_TEST_NETWORK = "testNetwork"; + public static final String ATR_TEST_NETWORK = "testNetwork"; /** String name for optional attribute "{@value}". */ - public final static String ATR_TEST_URI = "testURI"; + public static final String ATR_TEST_URI = "testURI"; /** String name for optional attribute "{@value}". */ - public final static String ATR_TEST_JAR_REPEAT = "testJarRepeat"; + public static final String ATR_TEST_JAR_REPEAT = "testJarRepeat"; /** Property to enable stack trace. The default value is overridden by the * value specified in default.ini file. @@ -139,15 +140,21 @@ try { // Check for repeated Jar files in classpath String[] words = Logger.testJarRepeat; - String classpath[] = (System.getProperty("java.class.path")).split(System.getProperty("path.separator")); + String[] classpath = (System.getProperty("java.class.path")).split(System.getProperty("path.separator")); StringBuffer message = Logger.getRepeatsMessage(words, classpath); - if (message !=null) SFSystem.sfLog().warn("Possible problem with classpath: \n"+message.toString()); + if (message !=null) { + SFSystem.sfLog().warn("Possible problem with classpath: \n"+message.toString()); + } // Check for repeated Jar files in code base - String codebaseproperty = System.getProperty(org.smartfrog.sfcore.security.SFClassLoader.SF_CODEBASE_PROPERTY); + String codebaseproperty = System.getProperty(SFClassLoader.SF_CODEBASE_PROPERTY); if (codebaseproperty != null) { - String codebase[] = codebaseproperty.split(System.getProperty("path.separator")); - message = Logger.getRepeatsMessage(words, codebase); - if (message !=null) SFSystem.sfLog().warn("Possible problem with codebase: "+message.toString()); + String[] codebase = codebaseproperty.split(System.getProperty( + "path.separator")); + message = Logger.getRepeatsMessage(words, codebase); + if (message != null) { + SFSystem.sfLog() + .warn("Possible problem with codebase: " + message.toString()); + } } } catch (Throwable thr) { /*ignore*/ } } @@ -160,15 +167,18 @@ return initialized; } - public static StringBuffer getRepeatsMessage(String[] words, String[] codebase) { + public static StringBuffer getRepeatsMessage(String[] words, + String[] codebase) { String repeats; StringBuffer message = null; for (String word : words) { - repeats = checkRepeatedWords(word, codebase); - if (repeats !=null) { - if (message == null) message = new StringBuffer(); - message.append(" "+repeats); - } + repeats = checkRepeatedWords(word, codebase); + if (repeats != null) { + if (message == null) { + message = new StringBuffer(); + } + message.append(" " + repeats); + } } return message; } @@ -198,7 +208,9 @@ } if (count >1) { return (count + " occurrences for "+word + strb.toString()+"\n"); - } else return null; + } else { + return null; + } } } Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/MessageKeys.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/MessageKeys.java 2008-02-27 14:44:39 UTC (rev 6044) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/MessageKeys.java 2008-02-27 22:49:23 UTC (rev 6045) @@ -29,370 +29,370 @@ /** * Message key: receiving deploy request after the component is terminated. */ - public static String MSG_DEPLOY_COMP_TERMINATED + String MSG_DEPLOY_COMP_TERMINATED = "MSG_DEPLOY_COMP_TERMINATED"; /** * Message key: receiving deploy request after the component is terminated. */ - public static String MSG_INJECTION_FAILED + String MSG_INJECTION_FAILED = "MSG_INJECTION_FAILED"; /** * Message key: receiving deploy request after the component is terminated. */ - public static String MSG_INJECTION_SETFIELD_FAILED + String MSG_INJECTION_SETFIELD_FAILED = "MSG_INJECTION_SETFILED_FAILED"; /** * Message key: receiving deploy request after the component is terminated. */ - public static String MSG_INJECTION_SETMETHOD_FAILED + String MSG_INJECTION_SETMETHOD_FAILED = "MSG_INJECTION_SETMETHOD_FAILED"; /** * Message key: receiving deploy request after the component is terminated. */ - public static String MSG_INJECTION_VALUE_FAILED + String MSG_INJECTION_VALUE_FAILED = "MSG_INJECTION_VALUE_FAILED"; /** * Message key: receiving start request after the component is terminated. */ - public static String MSG_START_COMP_TERMINATED + String MSG_START_COMP_TERMINATED = "MSG_START_COMP_TERMINATED"; /** * Message key: file cannot be found. */ - public static String MSG_FILE_NOT_FOUND = "MSG_FILE_NOT_FOUND"; + String MSG_FILE_NOT_FOUND = "MSG_FILE_NOT_FOUND"; /** * Message key: Compound has a non-replacable attribute. */ - public static String MSG_NON_REP_ATTRIB = "MSG_NON_REP_ATTRIB"; + String MSG_NON_REP_ATTRIB = "MSG_NON_REP_ATTRIB"; /** * Message key: Attribute 'name' already present. */ - public static String MSG_REPEATED_ATTRIBUTE = "MSG_REPEATED_ATTRIBUTE"; + String MSG_REPEATED_ATTRIBUTE = "MSG_REPEATED_ATTRIBUTE"; /** * Message key: An object is null in a method call. */ - public static String MSG_NULL_DEF_METHOD = "MSG_NULL_DEF_METHOD"; + String MSG_NULL_DEF_METHOD = "MSG_NULL_DEF_METHOD"; /** * Message key: class cannot be found. */ - public static String MSG_CLASS_NOT_FOUND = "MSG_CLASS_NOT_FOUND"; + String MSG_CLASS_NOT_FOUND = "MSG_CLASS_NOT_FOUND"; /** * Message key: class cannot be instantiated. */ - public static String MSG_INSTANTIATION_ERROR = "MSG_INSTANTIATION_ERROR"; + String MSG_INSTANTIATION_ERROR = "MSG_INSTANTIATION_ERROR"; /** * Message key: class has illegal access on method. */ - public static String MSG_ILLEGAL_ACCESS = "MSG_ILLEGAL_ACCESS"; + String MSG_ILLEGAL_ACCESS = "MSG_ILLEGAL_ACCESS"; /** * Message key: class has invocation target error. */ - public static String MSG_INVOCATION_TARGET = "MSG_INVOCATION_TARGET"; + String MSG_INVOCATION_TARGET = "MSG_INVOCATION_TARGET"; /** * Message key: method not found. */ - public static String MSG_METHOD_NOT_FOUND = "MSG_METHOD_NOT_FOUND"; + String MSG_METHOD_NOT_FOUND = "MSG_METHOD_NOT_FOUND"; /** * Message key: input stream is null. */ - public static String MSG_INPUTSTREAM_NULL = "MSG_INPUTSTREAM_NULL"; + String MSG_INPUTSTREAM_NULL = "MSG_INPUTSTREAM_NULL"; /** * Message key: failed to find parent location. */ - public static String MSG_PARENT_LOCATION_FAILED = "MSG_PARENT_LOCATION_FAILED"; + String MSG_PARENT_LOCATION_FAILED = "MSG_PARENT_LOCATION_FAILED"; /** * Message key: failed to contact parent. */ - public static String MSG_FAILED_TO_CONTACT_PARENT = "MSG_FAILED_TO_CONTACT_PARENT"; + String MSG_FAILED_TO_CONTACT_PARENT = "MSG_FAILED_TO_CONTACT_PARENT"; /** * Message key: failure in deploywith phase. */ - public static String MSG_DEPLOYWITH_PHASE_FAILED = "MSG_DEPLOYWITH_PHASE_FAILED"; + String MSG_DEPLOYWITH_PHASE_FAILED = "MSG_DEPLOYWITH_PHASE_FAILED"; /** * Message key: failure in object registration. */ - public static String MSG_OBJECT_REGISTRATION_FAILED = "MSG_OBJECT_REGISTRATION_FAILED"; + String MSG_OBJECT_REGISTRATION_FAILED = "MSG_OBJECT_REGISTRATION_FAILED"; /** * Message key: failure in starting liveness thread. */ - public static String MSG_LIVENESS_START_FAILED = "MSG_LIVENESS_START_FAILED"; + String MSG_LIVENESS_START_FAILED = "MSG_LIVENESS_START_FAILED"; /** * Message key: failure in hook action. */ - public static String MSG_HOOK_ACTION_FAILED = "MSG_HOOK_ACTION_FAILED"; + String MSG_HOOK_ACTION_FAILED = "MSG_HOOK_ACTION_FAILED"; /** * Message key: unable to start a component randomly. */ - public static String MSG_RANDM_ERR = "MSG_RANDM_ERR"; + String MSG_RANDM_ERR = "MSG_RANDM_ERR"; /** * Message key: found invalid object type. */ - public static String MSG_INVALID_OBJECT_TYPE = "MSG_INVALID_OBJECT_TYPE"; + String MSG_INVALID_OBJECT_TYPE = "MSG_INVALID_OBJECT_TYPE"; /** * Message key: url is null. */ - public static String MSG_NULL_URL = "MSG_NULL_URL"; + String MSG_NULL_URL = "MSG_NULL_URL"; /** * Message key: Loading url. */ - public static String MSG_LOADING_URL = "MSG_LOADING_URL"; + String MSG_LOADING_URL = "MSG_LOADING_URL"; /** * Message key: unable to locate language in url. */ - public static String MSG_LANG_NOT_FOUND = "MSG_LANG_NOT_FOUND"; + String MSG_LANG_NOT_FOUND = "MSG_LANG_NOT_FOUND"; /** * Message key: unable to locate file or url. */ - public static String MSG_URL_NOT_FOUND = "MSG_URL_NOT_FOUND"; + String MSG_URL_NOT_FOUND = "MSG_URL_NOT_FOUND"; /** * Message key: error in deployment of url . */ - public static String MSG_ERR_DEPLOY_FROM_URL = "MSG_ERR_DEPLOY_FROM_URL"; + String MSG_ERR_DEPLOY_FROM_URL = "MSG_ERR_DEPLOY_FROM_URL"; /** * Message key: stack trace follows. */ - public static String MSG_STACKTRACE_FOLLOWS = "MSG_STACKTRACE_FOLLOWS"; + String MSG_STACKTRACE_FOLLOWS = "MSG_STACKTRACE_FOLLOWS"; /** * Message key: continuing with other deployment. */ - public static String MSG_CONT_OTHER_DEPLOY = "MSG_CONT_OTHER_DEPLOY"; + String MSG_CONT_OTHER_DEPLOY = "MSG_CONT_OTHER_DEPLOY"; /** * Message key: error during termination. */ - public static String MSG_ERR_TERM = "MSG_ERR_TERM"; + String MSG_ERR_TERM = "MSG_ERR_TERM"; /** * Message key: parser error. */ - public static String MSG_ERR_PARSE = "MSG_ERR_PARSE"; + String MSG_ERR_PARSE = "MSG_ERR_PARSE"; /** * Message key: parser error while resolving phases. */ - public static String MSG_ERR_RESOLVE_PHASE = "MSG_ERR_RESOLVE_PHASE"; + String MSG_ERR_RESOLVE_PHASE = "MSG_ERR_RESOLVE_PHASE"; /** * Message key: smartfrog ready. */ - public static String MSG_SF_READY = "MSG_SF_READY"; + String MSG_SF_READY = "MSG_SF_READY"; /** * Message key: smartfrog dead. */ - public static String MSG_SF_DEAD = "MSG_SF_DEAD"; + String MSG_SF_DEAD = "MSG_SF_DEAD"; /** * Message key: smartfrog daemon terminated. */ - public static String MSG_SF_TERMINATED = "MSG_SF_TERMINATED"; + String MSG_SF_TERMINATED = "MSG_SF_TERMINATED"; /** * Message key: error in starting smartfrog daemon. */ - public static String MSG_ERR_SF_RUNNING = "MSG_ERR_SF_RUNNING"; + String MSG_ERR_SF_RUNNING = "MSG_ERR_SF_RUNNING"; /** * Message key: unable to locate host. */ - public static String MSG_UNKNOWN_HOST = "MSG_UNKNOWN_HOST"; + String MSG_UNKNOWN_HOST = "MSG_UNKNOWN_HOST"; /** * Message key: unable to connect to daemon. */ - public static String MSG_CONNECT_ERR = "MSG_CONNECT_ERR"; + String MSG_CONNECT_ERR = "MSG_CONNECT_ERR"; /** * Message key: unable to connect to daemon. */ - public static String MSG_REMOTE_CONNECT_ERR = "MSG_REMOTE_CONNECT_ERR"; + String MSG_REMOTE_CONNECT_ERR = "MSG_REMOTE_CONNECT_ERR"; /** * Message key: deployment successful. */ - public static String MSG_DEPLOY_SUCCESS = "MSG_DEPLOY_SUCCESS"; + String MSG_DEPLOY_SUCCESS = "MSG_DEPLOY_SUCCESS"; /** * Message key: update successful. */ - public static String MSG_UPDATE_SUCCESS = "MSG_UPDATE_SUCCESS"; + String MSG_UPDATE_SUCCESS = "MSG_UPDATE_SUCCESS"; /** * Message key: successful termination of components. */ - public static String MSG_TERMINATE_SUCCESS = "MSG_TERMINATE_SUCCESS"; + String MSG_TERMINATE_SUCCESS = "MSG_TERMINATE_SUCCESS"; /** * Message key: successful ping of components. */ - public static String MSG_PING_SUCCESS = "MSG_PING_SUCCESS"; + String MSG_PING_SUCCESS = "MSG_PING_SUCCESS"; /** * Message key: successful dump of components. */ - public static String MSG_DUMP_SUCCESS = "MSG_DUMP_SUCCESS"; + String MSG_DUMP_SUCCESS = "MSG_DUMP_SUCCESS"; /** * Message key: successful detachment of components. */ - public static String MSG_DETACH_SUCCESS = "MSG_DETACH_SUCCESS"; + String MSG_DETACH_SUCCESS = "MSG_DETACH_SUCCESS"; /** * Message key: successful detachment and termination of components. */ - public static String MSG_DETACH_TERMINATE_SUCCESS = "MSG_DETACH_TERMINATE_SUCCESS"; + String MSG_DETACH_TERMINATE_SUCCESS = "MSG_DETACH_TERMINATE_SUCCESS"; /** * Message key: liveness trace logging enabled */ - public static String MSG_WARNING_LIVENESS_ENABLED = "MSG_WARNING_LIVENESS_ENABLED"; + String MSG_WARNING_LIVENESS_ENABLED = "MSG_WARNING_LIVENESS_ENABLED"; /** * Message key: stack trace logging enabled. */ - public static String MSG_WARNING_STACKTRACE_ENABLED = "MSG_WARNING_STACKTRACE_ENABLED"; + String MSG_WARNING_STACKTRACE_ENABLED = "MSG_WARNING_STACKTRACE_ENABLED"; /** * Message key: stack trace logging disabled. */ - public static String MSG_WARNING_STACKTRACE_DISABLED = "MSG_WARNING_STACKTRACE_DISABLED"; + String MSG_WARNING_STACKTRACE_DISABLED = "MSG_WARNING_STACKTRACE_DISABLED"; // Resolution Exception Messages starts /** * Message key: unresolved reference. */ - public static String MSG_UNRESOLVED_REFERENCE = "MSG_UNRESOLVED_REFERENCE"; - public static String MSG_UNRESOLVED_REFERENCE_IN = "MSG_UNRESOLVED_REFERENCE_IN"; + String MSG_UNRESOLVED_REFERENCE = "MSG_UNRESOLVED_REFERENCE"; + String MSG_UNRESOLVED_REFERENCE_IN = "MSG_UNRESOLVED_REFERENCE_IN"; /** * Message key: reference not found. */ - public static String MSG_NOT_FOUND_REFERENCE = "MSG_NOT_FOUND_REFERENCE"; + String MSG_NOT_FOUND_REFERENCE = "MSG_NOT_FOUND_REFERENCE"; /** * Message key: attribute not found. */ - public static String MSG_NOT_FOUND_ATTRIBUTE = "MSG_NOT_FOUND_ATTRIBUTE"; + String MSG_NOT_FOUND_ATTRIBUTE = "MSG_NOT_FOUND_ATTRIBUTE"; /** * Message key: reference with no value. */ - public static String MSG_NOT_VALUE_REFERENCE = "MSG_NOT_VALUE_REFERENCE"; + String MSG_NOT_VALUE_REFERENCE ... [truncated message content] |
From: <ali...@us...> - 2008-03-28 15:23:56
|
Revision: 6269 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=6269&view=rev Author: alistair_c Date: 2008-03-28 08:23:44 -0700 (Fri, 28 Mar 2008) Log Message: ----------- Modified Paths: -------------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlySetWrapper.java Added Paths: ----------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlyIterator.java Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2008-03-28 14:21:11 UTC (rev 6268) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ContextImpl.java 2008-03-28 15:23:44 UTC (rev 6269) @@ -45,821 +45,822 @@ */ public class ContextImpl extends OrderedHashtable implements Context, Serializable, PrettyPrinting, Copying { - protected Map attributeTags = new HashMap(); - protected Map attributeTagsWrappers = new HashMap(); + protected Map attributeTags = new HashMap(); + protected Map attributeTagsWrappers = new HashMap(); - /** - * Creates an empty context with default capacity. - */ - public ContextImpl() { - } + /** + * Creates an empty context with default capacity. + */ + public ContextImpl() { + } - /** - * Constructs a context with initial capacity and a load trigger for - * expansion. - * - * @param cap initial capacity - * @param load load capacity trigger - */ - public ContextImpl(int cap, float load) { - super(cap, load); - } + /** + * Constructs a context with initial capacity and a load trigger for + * expansion. + * + * @param cap initial capacity + * @param load load capacity trigger + */ + public ContextImpl(int cap, float load) { + super(cap, load); + } - /** - * Returns the first key for which the value is the given one (==). - * @param value value to look up - * - * @return key for value or null if not found - * @deprecated replaced by sfAttributeKeyFor(value); - */ - public Object keyFor(Object value) { + /** + * Returns the first key for which the value is the given one (==). + * @param value value to look up + * + * @return key for value or null if not found + * @deprecated replaced by sfAttributeKeyFor(value); + */ + public Object keyFor(Object value) { - return sfAttributeKeyFor(value); - } - /** - * Returns the first attribute which has a particular "equal" value in the table. - * - * @param value value to find in table - * - * @return attibute object for value or null if none - */ - public Object sfAttributeKeyForEqual(Object value){ - if (!contains(value)) { - return null; - } - for (Enumeration e = keys(); e.hasMoreElements();) { - Object theKey = e.nextElement(); + return sfAttributeKeyFor(value); + } + /** + * Returns the first attribute which has a particular "equal" value in the table. + * + * @param value value to find in table + * + * @return attibute object for value or null if none + */ + public Object sfAttributeKeyForEqual(Object value){ + if (!contains(value)) { + return null; + } + for (Enumeration e = keys(); e.hasMoreElements();) { + Object theKey = e.nextElement(); - if (get(theKey).equals(value)) { - return theKey; - } - } - return null; - } + if (get(theKey).equals(value)) { + return theKey; + } + } + return null; + } - /** - * Returns true if the context contains an equal value. - * Replaces contains() - * @param value object to check - * - * @return true if context contains value, false otherwise - */ - public boolean sfContainsValue(Object value){ - return containsValue(value); - } + /** + * Returns true if the context contains an equal value. + * Replaces contains() + * @param value object to check + * + * @return true if context contains value, false otherwise + */ + public boolean sfContainsValue(Object value){ + return containsValue(value); + } - /** - * Returns true if the context contains value reference (==). - * Replaces contains() - * @param value object to check - * - * @return true if context contains value, false otherwise - * @throws NullPointerException if the value is <code>null</code>. - */ - public boolean sfContainsRefValue(Object value){ - if (value == null) { - throw new NullPointerException(); - } - for (Enumeration e = keys(); e.hasMoreElements();) { - Object theKey = e.nextElement(); - if (get(theKey) == (value)) { - return true; - } - } - return false; - } + /** + * Returns true if the context contains value reference (==). + * Replaces contains() + * @param value object to check + * + * @return true if context contains value, false otherwise + * @throws NullPointerException if the value is <code>null</code>. + */ + public boolean sfContainsRefValue(Object value){ + if (value == null) { + throw new NullPointerException(); + } + for (Enumeration e = keys(); e.hasMoreElements();) { + Object theKey = e.nextElement(); + if (get(theKey) == (value)) { + return true; + } + } + return false; + } - /** - * Returns true if the context contains attribute. - * Replaces containsKey() - * @param attribute to check - * - * @return true if context contains key, false otherwise - */ - public boolean sfContainsAttribute(Object attribute){ - return containsKey(attribute); - } + /** + * Returns true if the context contains attribute. + * Replaces containsKey() + * @param attribute to check + * + * @return true if context contains key, false otherwise + */ + public boolean sfContainsAttribute(Object attribute){ + return containsKey(attribute); + } - /** - * Returns an ordered iterator over the attribute names in the context. - * The remove operation of this Iterator won't affect - * the contents of Context - * - * @return iterator - */ - public Iterator sfAttributes(){ - return orderedAttributes(); + /** + * Returns an ordered iterator over the attribute names in the context. + * The remove operation of this Iterator won't affect + * the contents of Context + * + * @return iterator + */ + public Iterator sfAttributes(){ + return orderedAttributes(); - } + } - /** - * Returns an ordered iterator over the values in the context. - * The remove operation of this Iterator won't affect - * the contents of Context + /** + * Returns an ordered iterator over the values in the context. + * The remove operation of this Iterator won't affect + * the contents of Context - * @return iterator - */ - public Iterator sfValues(){ - return orderedValues(); - } + * @return iterator + */ + public Iterator sfValues(){ + return orderedValues(); + } - /** - * Find an attribute in this context. - * - * @param name attribute key to resolve - * - * @return Object Reference - * - * @throws SmartFrogContextException failed to find attribute - */ - public Object sfResolveAttribute(Object name) throws SmartFrogContextException { - Object result = this.get(name); - if (result == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MessageKeys.MSG_NOT_FOUND_ATTRIBUTE, name)); - } - return result; - } + /** + * Find an attribute in this context. + * + * @param name attribute key to resolve + * + * @return Object Reference + * + * @throws SmartFrogContextException failed to find attribute + */ + public Object sfResolveAttribute(Object name) throws SmartFrogContextException { + Object result = this.get(name); + if (result == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MessageKeys.MSG_NOT_FOUND_ATTRIBUTE, name)); + } + return result; + } - /** - * Adds an attribute to this context under given name. - * - * @param name name of attribute - * @param value value of attribute - * - * @return previous value for name or null if none - * - * @throws SmartFrogContextException when name or value are null or name already used - */ - public synchronized Object sfAddAttribute(Object name, Object value) - throws SmartFrogContextException{ - if ((name == null) || (value == null)) { - if (name == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MessageKeys.MSG_NULL_DEF_METHOD, "'name'", - "sfAddAttribute") ); - } - if (value == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MessageKeys.MSG_NULL_DEF_METHOD, "'value'", - "sfAddAttribute name:'"+name+"'")); - } + /** + * Adds an attribute to this context under given name. + * + * @param name name of attribute + * @param value value of attribute + * + * @return previous value for name or null if none + * + * @throws SmartFrogContextException when name or value are null or name already used + */ + public synchronized Object sfAddAttribute(Object name, Object value) + throws SmartFrogContextException{ + if ((name == null) || (value == null)) { + if (name == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MessageKeys.MSG_NULL_DEF_METHOD, "'name'", + "sfAddAttribute") ); + } + if (value == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MessageKeys.MSG_NULL_DEF_METHOD, "'value'", + "sfAddAttribute name:'"+name+"'")); + } - return null; - } + return null; + } - if (this.containsKey(name)) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MessageKeys.MSG_REPEATED_ATTRIBUTE, name)); + if (this.containsKey(name)) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MessageKeys.MSG_REPEATED_ATTRIBUTE, name)); - } + } - return this.put(name, value); - } + return this.put(name, value); + } - /** - * Removes an attribute from this context. - * - * @param name of attribute to be removed - * - * @return removed attribute value if successfull or null if not - * - * @throws SmartFrogContextException when name is null - */ - public synchronized Object sfRemoveAttribute(Object name) - throws SmartFrogContextException{ - if (name == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'name'", - "sfRemoveAttribute")); - } - return this.remove(name); - } + /** + * Removes an attribute from this context. + * + * @param name of attribute to be removed + * + * @return removed attribute value if successfull or null if not + * + * @throws SmartFrogContextException when name is null + */ + public synchronized Object sfRemoveAttribute(Object name) + throws SmartFrogContextException{ + if (name == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'name'", + "sfRemoveAttribute")); + } + return this.remove(name); + } - /** - * Replace named attribute in context. If attribute is not - * present it is added to the context. - * - * @param name of attribute to replace - * @param value value to add or replace - * - * @return the old value if present, null otherwise - * - * @throws SmartFrogContextException when name or value are null - */ - public synchronized Object sfReplaceAttribute(Object name, Object value) - throws SmartFrogContextException { - if ((name == null) || (value == null)) { - if (name == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'name'", - "sfReplaceAttribute")); - } - if (value == null) { - throw new SmartFrogContextException( - MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'value'", - "sfReplaceAttribute")); - } + /** + * Replace named attribute in context. If attribute is not + * present it is added to the context. + * + * @param name of attribute to replace + * @param value value to add or replace + * + * @return the old value if present, null otherwise + * + * @throws SmartFrogContextException when name or value are null + */ + public synchronized Object sfReplaceAttribute(Object name, Object value) + throws SmartFrogContextException { + if ((name == null) || (value == null)) { + if (name == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'name'", + "sfReplaceAttribute")); + } + if (value == null) { + throw new SmartFrogContextException( + MessageUtil.formatMessage(MSG_NULL_DEF_METHOD, "'value'", + "sfReplaceAttribute")); + } - return null; - } + return null; + } - return this.put(name, value); - } + return this.put(name, value); + } - /** - * Returns the attribute key given a value. Uses == for the comparison - * - * @param value value to look up key for - * - * @return key for attribute value or null if none - */ + /** + * Returns the attribute key given a value. Uses == for the comparison + * + * @param value value to look up key for + * + * @return key for attribute value or null if none + */ - // perhaps this should be synchronized... but causes problems with sfCompleteName if it is - public Object sfAttributeKeyFor(Object value) { - if (!contains(value)) { - return null; - } - for (Enumeration e = keys(); e.hasMoreElements();) { - Object theKey = e.nextElement(); + // perhaps this should be synchronized... but causes problems with sfCompleteName if it is + public Object sfAttributeKeyFor(Object value) { + if (!contains(value)) { + return null; + } + for (Enumeration e = keys(); e.hasMoreElements();) { + Object theKey = e.nextElement(); - if (get(theKey) == (value)) { - return theKey; - } - } - return null; - } + if (get(theKey) == (value)) { + return theKey; + } + } + return null; + } - /** - * Set the TAGS for an attribute. TAGS are simply uninterpreted strings associated - * with each attribute. - * - * @param name attribute key for tags - * @param tags a set of tags - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfSetTags(Object name, Set tags) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for setting tags"); - Set s = (Set)attributeTags.get(name); - if( s == null ) { - s = Collections.synchronizedSet(new HashSet()); - attributeTags.put(name, s); - attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); - s.addAll(tags); - } else { - s.clear(); - s.addAll(tags); - } - } + + private Set createTagSet(Object name) { + Set s = Collections.synchronizedSet(new HashSet()); + attributeTags.put(name, s); + attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); + return s; + } + private void deleteTagSet(Object name) { + attributeTags.remove(name); + attributeTagsWrappers.remove(name); + } + + /** + * Set the TAGS for an attribute. TAGS are simply uninterpreted strings associated + * with each attribute. + * + * @param name attribute key for tags + * @param tags a set of tags + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfSetTags(Object name, Set tags) throws SmartFrogContextException { + if (name == null || !containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for setting tags"); + Set s = (Set)attributeTags.get(name); + if( s == null ) { + if (!tags.isEmpty()) { + s = createTagSet(name); + s.addAll(tags); + } + } else { + s.clear(); + s.addAll(tags); + if (s.isEmpty()) { + deleteTagSet(name); + } + } + } - /** - * Get the TAGS for an attribute. TAGS are simply uninterpreted strings associated - * with each attribute. - * - * @param name attribute key for tags - * @return the set of tags - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized Set sfGetTags(Object name) throws SmartFrogContextException { - if ( name==null || !containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for getting tags"); - Set s = (ReadOnlySetWrapper)attributeTagsWrappers.get(name); - if( s == null ) { - Set tags = Collections.synchronizedSet(new HashSet()); - attributeTags.put(name, tags); - s = ReadOnlySetWrapper.wrap(tags); - attributeTagsWrappers.put(name, s); - return s; - } else { - return s; - } - } + /** + * Get the TAGS for an attribute. TAGS are simply uninterpreted strings associated + * with each attribute. + * + * @param name attribute key for tags + * @return the set of tags + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized Set sfGetTags(Object name) throws SmartFrogContextException { + if ( name==null || !containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for getting tags"); + Set s = (ReadOnlySetWrapper)attributeTagsWrappers.get(name); + if( s == null ) { + s = ReadOnlySetWrapper.wrap(null); + } + return s; + } - /** - * add a tag to the tag set of an attribute - * - * @param name attribute key for tags - * @param tag a tag to add to the set - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfAddTag(Object name, String tag) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for adding tags"); - Set s = (Set)attributeTags.get(name); - if ( s == null ) { // add it - s = Collections.synchronizedSet(new HashSet()); - attributeTags.put(name, s); - attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); - s.add(tag); - } else { - s.add(tag); - } - } + /** + * add a tag to the tag set of an attribute + * + * @param name attribute key for tags + * @param tag a tag to add to the set + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfAddTag(Object name, String tag) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for adding tags"); + if (tag != null) { + Set s = (Set)attributeTags.get(name); + if ( s == null ) { // add it + s = createTagSet(name); + } + s.add(tag); + } + } - /** - * remove a tag from the tag set of an attribute if it exists - * - * @param name attribute key for tags - * @param tag a tag to remove from the set - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfRemoveTag(Object name, String tag) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exist for removing tags"); - Set s = (Set)attributeTags.get(name); - if ( s == null ) { - // do nothing - its not there - } else { - s.remove(tag); - } - } + /** + * remove a tag from the tag set of an attribute if it exists + * + * @param name attribute key for tags + * @param tag a tag to remove from the set + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfRemoveTag(Object name, String tag) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exist for removing tags"); + Set s = (Set)attributeTags.get(name); + if ( s == null ) { + // do nothing - its not there + } else { + s.remove(tag); + if (s.isEmpty()) { + deleteTagSet(name); + } + } + } - /** - * add a tag to the tag set of an attribute - * - * @param name attribute key for tags - * @param tags a set of tags to add to the set - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfAddTags(Object name, Set tags) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exist for adding tags"); - Set s = (Set)attributeTags.get(name); - if( s == null ) { - s = Collections.synchronizedSet(new HashSet()); - attributeTags.put(name, s); - attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); - s.addAll(tags); - } else { - s.addAll(tags); - } - } + /** + * add a tag to the tag set of an attribute + * + * @param name attribute key for tags + * @param tags a set of tags to add to the set + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfAddTags(Object name, Set tags) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exist for adding tags"); + if (tags != null && !tags.isEmpty()) { + Set s = (Set)attributeTags.get(name); + if( s == null ) { + s = createTagSet(name); + } + s.addAll(tags); + } + } - /** - * remove a tag from the tag set of an attribute if it exists - * - * @param name attribute key for tags - * @param tags a set of tags to remove from the set - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public synchronized void sfRemoveTags(Object name, Set tags) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for removing tags"); - Set s = (Set)attributeTags.get(name); - if ( s == null ) { - // do nothing - its not there - } else { - s.removeAll(tags); - } - } - /** - * Return an iterator over the tags for an attribute - * - * @param name the name of the attribute - * @return an iterator over the tags - * @throws SmartFrogContextException - * the attribute does not exist; - */ - public Iterator sfTags(Object name) throws SmartFrogContextException { - Iterator iter; - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for iterating over tags"); - Set s = (Set)attributeTags.get(name); - if( s == null ) { - s = Collections.synchronizedSet(new HashSet()); - attributeTags.put(name, s); - attributeTagsWrappers.put(name, ReadOnlySetWrapper.wrap(s)); - return s.iterator(); - } else { - return s.iterator(); - } - } + /** + * remove a tag from the tag set of an attribute if it exists + * + * @param name attribute key for tags + * @param tags a set of tags to remove from the set + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public synchronized void sfRemoveTags(Object name, Set tags) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for removing tags"); + Set s = (Set)attributeTags.get(name); + if ( s == null ) { + // do nothing - its not there + } else { + s.removeAll(tags); + if (s.isEmpty()) { + deleteTagSet(name); + } + } + } + /** + * Return an iterator over the tags for an attribute + * + * @param name the name of the attribute + * @return an iterator over the tags + * @throws SmartFrogContextException + * the attribute does not exist; + */ + public Iterator sfTags(Object name) throws SmartFrogContextException { + return sfGetTags(name).iterator(); + } - /** - * Return whether or not a tag is in the list of tags for an attribute - * - * @param name the name of the attribute - * @param tag the tag to chack - * - * @return whether or not the attribute has that tag - * @throws SmartFrogContextException the attribute does not exist - */ - public boolean sfContainsTag(Object name, String tag) throws SmartFrogContextException { - if (!containsKey(name)) - throw new SmartFrogContextException("Attribute " + name + " does not exists for validating tag's existance"); - Set s = (Set)attributeTags.get(name); - return (s == null ) ? false : s.contains(tag); - } + /** + * Return whether or not a tag is in the list of tags for an attribute + * + * @param name the name of the attribute + * @param tag the tag to chack + * + * @return whether or not the attribute has that tag + * @throws SmartFrogContextException the attribute does not exist + */ + public boolean sfContainsTag(Object name, String tag) throws SmartFrogContextException { + if (!containsKey(name)) + throw new SmartFrogContextException("Attribute " + name + " does not exists for validating tag's existance"); + Set s = (Set)attributeTags.get(name); + return (s == null ) ? false : s.contains(tag); + } - /** - * Compares the specified Object with this Context Tags for equality - * - * @param o object to be compared for equality with this Context - * @return true if the specified Object is equal to this Map. - */ - public synchronized boolean equalsTags (Object o) { - if (o == attributeTags) - return true; + /** + * Compares the specified Object with this Context Tags for equality + * + * @param o object to be compared for equality with this Context + * @return true if the specified Object is equal to this Map. + */ + public synchronized boolean equalsTags (Object o) { + if (o == attributeTags) + return true; - if (!(o instanceof Map)) - return false; + if (!(o instanceof Map)) + return false; - if (!attributeTags.equals(o)){ - return false; - } + if (!attributeTags.equals(o)){ + return false; + } - return true; - } + return true; + } - /** - * Returns a string representation of the component. This will give a - * description of the component which is parseable, and deployable - * again... Unless someone removed attributes which are essential to - * startup that is. Large description trees should be written out using - * writeOn since memory for large strings runs out quick! - * - * @return string representation of component - */ - public String toString() { - StringWriter sw = new StringWriter(); + /** + * Returns a string representation of the component. This will give a + * description of the component which is parseable, and deployable + * again... Unless someone removed attributes which are essential to + * startup that is. Large description trees should be written out using + * writeOn since memory for large strings runs out quick! + * + * @return string representation of component + */ + public String toString() { + StringWriter sw = new StringWriter(); - try { - writeOn(sw); - } catch (IOException ioex) { - sw.write("[ERROR] ContextImpl "+ioex.toString()); - // ignore should not happen - } + try { + writeOn(sw); + } catch (IOException ioex) { + sw.write("[ERROR] ContextImpl "+ioex.toString()); + // ignore should not happen + } - return sw.toString(); - } + return sw.toString(); + } - /** - * Writes this component description on a writer. Used by toString. Should - * be used instead of toString to write large descriptions to file, since - * memory can become a problem given the LONG strings created - * - * @param ps writer to write on - * - * @throws IOException failure while writing - */ - public void writeOn(Writer ps) throws IOException { - writeContextOn(ps, 0, this.keys()); - } + /** + * Writes this component description on a writer. Used by toString. Should + * be used instead of toString to write large descriptions to file, since + * memory can become a problem given the LONG strings created + * + * @param ps writer to write on + * + * @throws IOException failure while writing + */ + public void writeOn(Writer ps) throws IOException { + writeContextOn(ps, 0, this.keys()); + } - /** - * Writes this component description on a writer. Used by toString. Should - * be used instead of toString to write large descriptions to file, since - * memory can become a problem given the LONG strings created - * - * @param ps writer to write on - * @param indent the indent to use for printing offset - * - * @throws IOException failure while writing - */ - public void writeOn(Writer ps, int indent) throws IOException { - writeContextOn(ps, indent, this.keys()); - } + /** + * Writes this component description on a writer. Used by toString. Should + * be used instead of toString to write large descriptions to file, since + * memory can become a problem given the LONG strings created + * + * @param ps writer to write on + * @param indent the indent to use for printing offset + * + * @throws IOException failure while writing + */ + public void writeOn(Writer ps, int indent) throws IOException { + writeContextOn(ps, indent, this.keys()); + } - /** - * Writes the context on a writer. - * - * @param ps writer to write on - * @param indent level - * @param keys enumeation over the keys of the context to write out - * - * @throws IOException failure while writing - */ - protected void writeContextOn(Writer ps, int indent, Enumeration keys) throws IOException { - while (keys.hasMoreElements()) { - Object key = keys.nextElement(); - Object value = get(key); - tabPad(ps, indent); - writeTagsOn(ps, indent, key); - writeKeyOn(ps, indent, key); - ps.write(' '); - writeValueOn(ps, indent, value); - ps.write('\n'); - } - } + /** + * Writes the context on a writer. + * + * @param ps writer to write on + * @param indent level + * @param keys enumeation over the keys of the context to write out + * + * @throws IOException failure while writing + */ + protected void writeContextOn(Writer ps, int indent, Enumeration keys) throws IOException { + while (keys.hasMoreElements()) { + Object key = keys.nextElement(); + Object value = get(key); + tabPad(ps, indent); + writeTagsOn(ps, indent, key); + writeKeyOn(ps, indent, key); + ps.write(' '); + writeValueOn(ps, indent, value); + ps.write('\n'); + } + } - /** - * Writes given attribute key on a writer. - * - * @param ps writer to write on - * @param indent indent level - * @param key key to stringify - * - * @throws IOException failure while writing - */ - protected void writeTagsOn(Writer ps, int indent, Object key) throws IOException { - if (attributeTags.containsKey(key)) { - try { - if (sfGetTags(key).size() > 0) { - ps.write("[ "); - for (Iterator i = sfTags(key); i.hasNext();) { - ps.write(i.next().toString() + " "); - } - ps.write("] "); - } - } catch (SmartFrogContextException e) { - // shouldn't happen... - } - } - } - /** - * Writes given attribute key on a writer. - * - * @param ps writer to write on - * @param indent indent level - * @param key key to stringify - * - * @throws IOException failure while writing - */ - protected void writeKeyOn(Writer ps, int indent, Object key) throws IOException { - ps.write(key.toString()); - } + /** + * Writes given attribute key on a writer. + * + * @param ps writer to write on + * @param indent indent level + * @param key key to stringify + * + * @throws IOException failure while writing + */ + protected void writeTagsOn(Writer ps, int indent, Object key) throws IOException { + if (attributeTags.containsKey(key)) { + try { + if (sfGetTags(key).size() > 0) { + ps.write("[ "); + for (Iterator i = sfTags(key); i.hasNext();) { + ps.write(i.next().toString() + " "); + } + ps.write("] "); + } + } catch (SmartFrogContextException e) { + // shouldn't happen... + } + } + } + /** + * Writes given attribute key on a writer. + * + * @param ps writer to write on + * @param indent indent level + * @param key key to stringify + * + * @throws IOException failure while writing + */ + protected void writeKeyOn(Writer ps, int indent, Object key) throws IOException { + ps.write(key.toString()); + } - /** - * Writes a given value on a writer. Recognizes descriptions, strings and - * vectors of basic values and turns them into string representation. - * Default is to turn into string using normal toString() call - * - * @param ps writer to write on - * @param indent indent level - * @param value value to stringify - * - * @throws IOException failure while writing - */ - protected void writeValueOn(Writer ps, int indent, Object value) throws IOException { - if (value instanceof PrettyPrinting) { - try { - ((PrettyPrinting)value).writeOn(ps, indent); - } catch (IOException ex) { - throw ex; - } catch (java.lang.StackOverflowError thr) { - StringBuffer msg = new StringBuffer("Failed to pretty print value. Possible cause: cyclic reference."); - msg.append("Cause:#<0># "); - msg.append(thr.getCause().toString()); - throw new java.io.IOException(msg.toString()); - } - } else { - writeBasicValueOn(ps, indent, value); - ps.write(';'); - } - } - /** - * Writes a given value on a writer. Recognizes descriptions, strings and - * vectors of basic values and turns them into string representation. - * Default is to turn into string using normal toString() call - * - * @param ps writer to write on - * @param indent indent level - * @param value value to stringify - * - * @throws IOException failure while writing - */ - protected static void writeBasicValueOn(Writer ps, int indent, Object value) throws IOException { - if (value instanceof String) { - ps.write("\"" + unfixEscapes((String)value) + "\""); - } else if (value instanceof Vector) { - ps.write("[|"); - for (Enumeration e = ((Vector) value).elements(); e.hasMoreElements();) { - writeBasicValueOn(ps, indent, e.nextElement()); - if (e.hasMoreElements()) { - ps.write(", "); - } - } - ps.write("|]"); - } else if (value instanceof Long) { - ps.write(value.toString() + 'L'); - } else if (value instanceof Double) { - ps.write(value.toString() + 'D'); - } else { - ps.write(value.toString()); - } - } + /** + * Writes a given value on a writer. Recognizes descriptions, strings and + * vectors of basic values and turns them into string representation. + * Default is to turn into string using normal toString() call + * + * @param ps writer to write on + * @param indent indent level + * @param value value to stringify + * + * @throws IOException failure while writing + */ + protected void writeValueOn(Writer ps, int indent, Object value) throws IOException { + if (value instanceof PrettyPrinting) { + try { + ((PrettyPrinting)value).writeOn(ps, indent); + } catch (IOException ex) { + throw ex; + } catch (java.lang.StackOverflowError thr) { + StringBuffer msg = new StringBuffer("Failed to pretty print value. Possible cause: cyclic reference."); + msg.append("Cause:#<0># "); + msg.append(thr.getCause().toString()); + throw new java.io.IOException(msg.toString()); + } + } else { + writeBasicValueOn(ps, indent, value); + ps.write(';'); + } + } + /** + * Writes a given value on a writer. Recognizes descriptions, strings and + * vectors of basic values and turns them into string representation. + * Default is to turn into string using normal toString() call + * + * @param ps writer to write on + * @param indent indent level + * @param value value to stringify + * + * @throws IOException failure while writing + */ + protected static void writeBasicValueOn(Writer ps, int indent, Object value) throws IOException { + if (value instanceof String) { + ps.write("\"" + unfixEscapes((String)value) + "\""); + } else if (value instanceof Vector) { + ps.write("[|"); + for (Enumeration e = ((Vector) value).elements(); e.hasMoreElements();) { + writeBasicValueOn(ps, indent, e.nextElement()); + if (e.hasMoreElements()) { + ps.write(", "); + } + } + ps.write("|]"); + } else if (value instanceof Long) { + ps.write(value.toString() + 'L'); + } else if (value instanceof Double) { + ps.write(value.toString() + 'D'); + } else { + ps.write(value.toString()); + } + } - /** - * To fix escape characters in String - * @param s String to be fixed - * @return String - */ - private static String unfixEscapes(String s) { - s = s.replaceAll("\\\\", "\\\\\\\\"); - s = s.replaceAll("\n", "\\\\n"); - s = s.replaceAll("\t", "\\\\t"); - s = s.replaceAll("\b", "\\\\b"); - s = s.replaceAll("\r", "\\\\r"); - s = s.replaceAll("\f", "\\\\f"); - s = s.replaceAll("\"", "\\\\\""); - return s; - } + /** + * To fix escape characters in String + * @param s String to be fixed + * @return String + */ + private static String unfixEscapes(String s) { + s = s.replaceAll("\\\\", "\\\\\\\\"); + s = s.replaceAll("\n", "\\\\n"); + s = s.replaceAll("\t", "\\\\t"); + s = s.replaceAll("\b", "\\\\b"); + s = s.replaceAll("\r", "\\\\r"); + s = s.replaceAll("\f", "\\\\f"); + s = s.replaceAll("\"", "\\\\\""); + return s; + } - /** - * Gets a given value in its String form. Recognizes descriptions, strings and - * vectors of basic values and turns them into string representation. - * Default is to turn into string using normal toString() call - * - * @param obj Object to be given in String form - * @return String - * @throws IOException failure while writing - */ - public static String getBasicValueFor (Object obj) throws IOException { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - writeBasicValueOn(pw,0,obj); - return sw.toString(); - } + /** + * Gets a given value in its String form. Recognizes descriptions, strings and + * vectors of basic values and turns them into string representation. + * Default is to turn into string using normal toString() call + * + * @param obj Object to be given in String form + * @return String + * @throws IOException failure while writing + */ + public static String getBasicValueFor (Object obj) throws IOException { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + writeBasicValueOn(pw,0,obj); + return sw.toString(); + } - /** - * Internal method to pad out a writer. - * - * @param ps writer to tab to - * @param amount amount to tab - * - * @throws IOException failure while writing - */ - protected static void tabPad(Writer ps, int amount) throws IOException { - for (int i = 0; i < amount; i++) - ps.write(" "); - } + /** + * Internal method to pad out a writer. + * + * @param ps writer to tab to + * @param amount amount to tab + * + * @throws IOException failure while writing + */ + protected static void tabPad(Writer ps, int amount) throws IOException { + for (int i = 0; i < amount; i++) + ps.write(" "); + } - // /////////////////////////////////////////////////////////////////////////////////// - // reimplementation of the hash table and order hash table methods to deal with the tags - // /////////////////////////////////////////////////////////////////////////////////// + // /////////////////////////////////////////////////////////////////////////////////// + // reimplementation of the hash table and order hash table methods to deal with the tags + // /////////////////////////////////////////////////////////////////////////////////// - /** - * Clears the tags as well as the hashtable. - * Overwrites OrderedHashtable.clear(). - */ - public void clear() { - super.clear(); - attributeTags.clear(); - attributeTagsWrappers.clear(); - } + /** + * Clears the tags as well as the hashtable. + * Overwrites OrderedHashtable.clear(). + */ + public void clear() { + super.clear(); + attributeTags.clear(); + attributeTagsWrappers.clear(); + } - /** - * Removes an entry from the hashtable. - * Overwrites OrderedHashtable.remove(). - * - * @param key key to remove - * - * @return removed object - */ - public Object remove(Object key) { - Object r = super.remove(key); - attributeTags.remove(key); - attributeTagsWrappers.remove(key); - return r; - } + /** + * Removes an entry from the hashtable. + * Overwrites OrderedHashtable.remove(). + * + * @param key key to remove + * + * @return removed object + */ + public Object remove(Object key) { + Object r = super.remove(key); + attributeTags.remove(key); + attributeTagsWrappers.remove(key); + return r; + } - /** - * Removes the element at the specified position. - * Removes the key (and its corresponding value) from this hashtable. - * This method does nothing if the key is not in the hashtable. - * Overrides the method in OrderedHashtable - * - * @param index index to remove - * - * @return the value to which the index had been mapped in this hashtable, - * or null if the key did not have a mapping - */ - public Object remove(int index) { - Object key = orderedKeys.remove(index); - Object value = super.remove(index); - attributeTags.remove(key); - attributeTagsWrappers.remove(key); - return value; - } + /** + * Removes the element at the specified position. + * Removes the key (and its corresponding value) from this hashtable. + * This method does nothing if the key is not in the hashtable. + * Overrides the method in OrderedHashtable + * + * @param index index to remove + * + * @return the value to which the index had been mapped in this hashtable, + * or null if the key did not have a mapping + */ + public Object remove(int index) { + Object key = orderedKeys.remove(index); + Object value = super.remove(index); + attributeTags.remove(key); + attributeTagsWrappers.remove(key); + return value; + } - /** - * Renames an entry in the otable, leaving its position in the table - * unchanged. Overrides method in OrderedHashtable. - * - * @param key1 the initial key to be renamed - * @param key2 the new key name - * - * @return the initial key, or null if it wasn't in the table - */ - public Object rename(Object key1, Object key2) { - // if the same don't do anything - if( key1.equals(key2) ) { - return key1; - } + /** + * Renames an entry in the otable, leaving its position in the table + * unchanged. Overrides method in OrderedHashtable. + * + * @param key1 the initial key to be renamed + * @param key2 the new key name + * + * @return the initial key, or null if it wasn't in the table + */ + public Object rename(Object key1, Object key2) { + // if the same don't do anything + if( key1.equals(key2) ) { + return key1; + } - super.rename(key1, key2); + super.rename(key1, key2); - // safe because key1 != key2 - if (attributeTags.containsKey(key1)) { - attributeTags.put(key2, attributeTags.get(key1)); - attributeTags.remove(key1); - attributeTagsWrappers.put(key2, attributeTagsWrappers.get(key1)); - attributeTagsWrappers.remove(key1); - } + // safe because key1 != key2 + if (attributeTags.containsKey(key1)) { + attributeTags.put(key2, attributeTags.get(key1)); + attributeTags.remove(key1); + attributeTagsWrappers.put(key2, attributeTagsWrappers.get(key1)); + attributeTagsWrappers.remove(key1); + } - return key1; - } + return key1; + } - /** - * Does a shallow copy of the hashtable, the ordered keys and - * the attributeTags. - * - * @return shallow copy of this table - */ + /** + * Does a shallow copy of the hashtable, the ordered keys and + * the attributeTags. + * + * @return shallow copy of this table + */ - public Object clone() { - Object ret = super.clone(); - Map m = new HashMap(); - Map w = new HashMap(); - for (Iterator i = attributeTags.keySet().iterator(); i.hasNext(); ) { - Object key = i.next(); - Set s = (Set) attributeTags.get(key); - Set sc = Collections.synchronizedSet(new HashSet()); - sc.addAll(s); - m.put(key, sc); - w.put(key, ReadOnlySetWrapper.wrap(sc)); - } - ((ContextImpl) ret).attributeTags = m; - ((ContextImpl) ret).attributeTagsWrappers = w; - return ret; - } + public Object clone() { + Object ret = super.clone(); + Map m = new HashMap(); + Map w = new HashMap(); + for (Iterator i = attributeTags.keySet().iterator(); i.hasNext(); ) { + Object key = i.next(); + Set s = (Set) attributeTags.get(key); + Set sc = Collections.synchronizedSet(new HashSet()); + sc.addAll(s); + m.put(key, sc); + w.put(key, ReadOnlySetWrapper.wrap(sc)); + } + ((ContextImpl) ret).attributeTags = m; + ((ContextImpl) ret).attributeTagsWrappers = w; + return ret; + } - /** - * Does a deep copy of the hashtable. Values in the hashtable which - * understand the Copying interface get copied properly. If the Values - * cannot be copied, the basic SF values (numbers, strings, booleans, are - * each properly dealt with. Other values are copied using serialize/deserialize - * if they implement serialization - note that because of this transient data will - * not be copied. It also copies the attributeTags. - * - * This overrides the one in OrderedHashtable. - * - * @return copy of hashtable - */ - public Object copy() { - // note that since the super method uses clone, - // this is already copying attributeTags - return super.copy(); - } + /** + * Does a deep copy of the hashtable. Values in the hashtable which + * understand the Copying interface get copied properly. If the Values + * cannot be copied, the basic SF values (numbers, strings, booleans, are + * each properly dealt with. Other values are copied using serialize/deserialize + * if they implement serialization - note that because of this transient data will + * not be copied. It also copies the attributeTags. + * + * This overrides the one in OrderedHashtable. + * + * @return copy of hashtable + */ + public Object copy() { + // note that since the super method uses clone, + // this is already copying attributeTags + return super.copy(); + } - /** - * Compares the specified Object with this Context for equality, - * as per the definition in the Map interface. - * - * @param o object to be compared for equality with this Context - * @return true if the specified Object is equal to this Map. - */ - public synchronized boolean equals(Object o) { + /** + * Compares the specified Object with this Context for equality, + * as per the definition in the Map interface. + * + * @param o object to be compared for equality with this Context + * @return true if the specified Object is equal to this Map. + */ + public synchronized boolean equals(Object o) { - if (o == this) - return true; + if (o == this) + return true; - if (!(o instanceof Context)) - return false; + if (!(o instanceof Context)) + return false; - // Compares HashMap - if (!super.equals(o)) - return false; + // Compares HashMap + if (!super.equals(o)) + return false; - // Compares Tags - if (!((o instanceof ContextImpl) && (((ContextImpl)o).equalsTags(attributeTags)))){ - return false; - } - return true; - } + // Compares Tags + if (!((o instanceof ContextImpl) && (((ContextImpl)o).equalsTags(attributeTags)))){ + return false; + } + return true; + } - /** - * Returns the hash code value for this Context - * - */ - public synchronized int hashCode() { - // Simple hashcode using Joshua Bloch's recommendation - int result = 17; - result = 37 * result + attributeTags.hashCode(); - result = 37 * result + super.hashCode(); - return result; - } + /** + * Returns the hash code value for this Context + * + */ + public synchronized int hashCode() { + // Simple hashcode using Joshua Bloch's recommendation + int result = 17; + result = 37 * result + attributeTags.hashCode(); + result = 37 * result + super.hashCode(); + return result; + } } Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlyIterator.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlyIterator.java (rev 0) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlyIterator.java 2008-03-28 15:23:44 UTC (rev 6269) @@ -0,0 +1,24 @@ +package org.smartfrog.sfcore.common; + +import java.util.Iterator; + +public class ReadOnlyIterator<V> implements Iterator<V> { + private Iterator<V> it; + + public ReadOnlyIterator(final Iterator<V> it) { + this.it = it; + } + + public void remove() { + throw new UnsupportedOperationException(); + } + + public boolean hasNext() { + return it.hasNext(); + } + + public V next() { + return it.next(); + } + +} Modified: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlySetWrapper.java =================================================================== --- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlySetWrapper.java 2008-03-28 14:21:11 UTC (rev 6268) +++ trunk/core/smartfrog/src/org/smartfrog/sfcore/common/ReadOnlySetWrapper.java 2008-03-28 15:23:44 UTC (rev 6269) @@ -19,7 +19,6 @@ */ package org.smartfrog.sfcore.common; -import java.io.ObjectStreamException; import java.io.Serializable; import java.util.Collection; import java.util.HashSet; @@ -38,6 +37,7 @@ public class ReadOnlySetWrapper implements Set, Serializable { private static final Set nullSet = new HashSet(); + private static final Set nullWrapper = new ReadOnlySetWrapper(nullSet); private Set impl; @@ -46,6 +46,9 @@ } public static Set wrap(Set set) { + if (set == null) { + return nullWrapper; + } return new ReadOnlySetWrapper(set); } @@ -94,7 +97,7 @@ } public Iterator iterator() { - return impl.iterator(); + return new ReadOnlyIterator(impl.iterator()); } public boolean remove(Object o) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ju...@us...> - 2008-05-28 14:42:28
|
Revision: 6567 http://smartfrog.svn.sourceforge.net/smartfrog/?rev=6567&view=rev Author: julgui Date: 2008-05-28 07:42:26 -0700 (Wed, 28 May 2008) Log Message: ----------- New Icons for Core Added Paths: ----------- trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeBlue32.gif trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeBlue32.ico trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeGreen32.gif trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeGreen32.ico trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeLightBlue32.gif trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeLightBlue32.ico trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeRed32.gif trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeRed32.ico Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeBlue32.gif =================================================================== (Binary files differ) Property changes on: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeBlue32.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeBlue32.ico =================================================================== (Binary files differ) Property changes on: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeBlue32.ico ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeGreen32.gif =================================================================== (Binary files differ) Property changes on: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeGreen32.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeGreen32.ico =================================================================== (Binary files differ) Property changes on: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeGreen32.ico ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeLightBlue32.gif =================================================================== (Binary files differ) Property changes on: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeLightBlue32.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeLightBlue32.ico =================================================================== (Binary files differ) Property changes on: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeLightBlue32.ico ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeRed32.gif =================================================================== (Binary files differ) Property changes on: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeRed32.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeRed32.ico =================================================================== (Binary files differ) Property changes on: trunk/core/smartfrog/src/org/smartfrog/sfcore/common/SplodgeRed32.ico ___________________________________________________________________ Name: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |