Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 88428 invoked from network); 9 Jun 2009 12:51:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 9 Jun 2009 12:51:30 -0000 Received: (qmail 13428 invoked by uid 500); 9 Jun 2009 12:51:42 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 13387 invoked by uid 500); 9 Jun 2009 12:51:42 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 13378 invoked by uid 99); 9 Jun 2009 12:51:42 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 09 Jun 2009 12:51:42 +0000 X-ASF-Spam-Status: No, hits=-1999.3 required=10.0 tests=ALL_TRUSTED,FRT_LEVITRA X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 09 Jun 2009 12:51:39 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 74FBE2388908; Tue, 9 Jun 2009 12:50:50 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r782980 [6/8] - in /directory/sandbox/slp/src/main/java/org/apache/directory/slp: ./ codec/ extensions/ impl/ impl/da/ impl/filter/ messages/ Date: Tue, 09 Jun 2009 12:50:47 -0000 To: commits@directory.apache.org From: rjan@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090609125050.74FBE2388908@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/SLPUtils.java URL: http://svn.apache.org/viewvc/directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/SLPUtils.java?rev=782980&r1=782979&r2=782980&view=diff ============================================================================== --- directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/SLPUtils.java (original) +++ directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/SLPUtils.java Tue Jun 9 12:50:45 2009 @@ -32,7 +32,6 @@ import org.apache.directory.slp.OpaqueValue; - /** * Utility class. * @@ -41,33 +40,33 @@ public final class SLPUtils { public static final String KEYWORD_STRING = "jslpkeyword"; - - + /** * hidden constructor. */ - private SLPUtils() { + private SLPUtils() { } /** - * get a List of attribute/value pairs in String - * representation from a Dictionary. + * get a List of attribute/value pairs in String representation + * from a Dictionary. * * @param attributes * the Dictionary * @return the List. */ public static List dictToAttrList(final Dictionary attributes) { - List attList = new ArrayList(); + final List attList = new ArrayList(); if (attributes != null) { - for (Enumeration keys = attributes.keys(); keys.hasMoreElements();) { - Object key = keys.nextElement(); - if (attributes.get(key).equals(KEYWORD_STRING)){ + for (final Enumeration keys = attributes.keys(); keys + .hasMoreElements();) { + final Object key = keys.nextElement(); + if (attributes.get(key).equals(KEYWORD_STRING)) { attList.add(key.toString()); continue; } - StringBuffer buffer = new StringBuffer(); + final StringBuffer buffer = new StringBuffer(); buffer.append("("); buffer.append(key); buffer.append("="); @@ -78,9 +77,9 @@ } return attList; } - - - public static String dictToString(final Dictionary attributes){ + + public static String dictToString( + final Dictionary attributes) { return listToString(dictToAttrList(attributes), ","); } @@ -93,16 +92,16 @@ * the attribute list. * @return the Dictionary. */ - static Dictionary attrListToDict(final List attrList) { - Dictionary dict = new Hashtable(); + static Dictionary attrListToDict(final List attrList) { + final Dictionary dict = new Hashtable(); - for (Iterator iter = attrList.iterator(); iter.hasNext();) { + for (final Iterator iter = attrList.iterator(); iter.hasNext();) { String attrStr = (String) iter.next(); attrStr = attrStr.substring(1, attrStr.length() - 1); - int pos = attrStr.indexOf("="); + final int pos = attrStr.indexOf("="); if (pos > -1) { - String key = attrStr.substring(0, pos).trim(); - String value = attrStr.substring(pos + 1).trim(); + final String key = attrStr.substring(0, pos).trim(); + final String value = attrStr.substring(pos + 1).trim(); dict.put(key, value); } } @@ -111,94 +110,99 @@ } /** - * This is the most important method of the class. It is used to parse the - * attribute lists from their string form as received in messages to their typed - * form in the Service object. + * This is the most important method of the class. It is used to parse the + * attribute lists from their string form as received in messages to their + * typed form in the Service object. * * @param arr - * The attributes as an array of string representations + * The attributes as an array of string representations * @return */ - public static Dictionary stringArrayToDict(final String[] arr){ - Dictionary dict = new Hashtable(); - for (int i=0;i stringArrayToDict( + final String[] arr) { + final Dictionary dict = new Hashtable(); + for (int i = 0; i < arr.length; i++) { String attrStr = arr[i]; - attrStr = attrStr.substring(1,attrStr.length()-1); - int pos = attrStr.indexOf("="); - if (pos>-1){ - String key = attrStr.substring(0, pos).trim(); - String value = attrStr.substring(pos+1).trim(); - //added by Lorenz to support multivalued attributes - String valueRep = value.replace("\\,", "SLP_ESCAPED_COMMA"); - String[] valuesRep = valueRep.split(","); - String[] valuesFixed = new String[valuesRep.length]; + attrStr = attrStr.substring(1, attrStr.length() - 1); + final int pos = attrStr.indexOf("="); + if (pos > -1) { + final String key = attrStr.substring(0, pos).trim(); + final String value = attrStr.substring(pos + 1).trim(); + // added by Lorenz to support multivalued attributes + final String valueRep = value.replace("\\,", + "SLP_ESCAPED_COMMA"); + final String[] valuesRep = valueRep.split(","); + final String[] valuesFixed = new String[valuesRep.length]; int k = 0; - for (String s: valuesRep){ - valuesFixed[k++] = s.replace("SLP_ESCAPED_COMMA", "\\,").trim(); + for (final String s : valuesRep) { + valuesFixed[k++] = s.replace("SLP_ESCAPED_COMMA", "\\,") + .trim(); } - - if (valuesFixed.length==1){ - if (value.toLowerCase().equals("true") || value.toLowerCase().equals("false")) { - dict.put(key, new Boolean(value) ); + + if (valuesFixed.length == 1) { + if (value.toLowerCase().equals("true") + || value.toLowerCase().equals("false")) { + dict.put(key, new Boolean(value)); } else if (value.startsWith("\\FF")) { - dict.put(key, new OpaqueValue(value) ); + dict.put(key, new OpaqueValue(value)); } else { try { - int v = Integer.parseInt(value); + final int v = Integer.parseInt(value); dict.put(key, v); - } catch (NumberFormatException e){ + } catch (final NumberFormatException e) { dict.put(key, value); - } + } } continue; } - + Object[] values; String type; - String value1 = valuesFixed[0]; - if (value1.startsWith("\\FF")){ + final String value1 = valuesFixed[0]; + if (value1.startsWith("\\FF")) { values = new OpaqueValue[valuesFixed.length]; - values[0]=new OpaqueValue(value1); - type="opaque"; - } else if (value1.toLowerCase().equals("true") || value1.toLowerCase().equals("false")){ + values[0] = new OpaqueValue(value1); + type = "opaque"; + } else if (value1.toLowerCase().equals("true") + || value1.toLowerCase().equals("false")) { values = new Boolean[valuesFixed.length]; - values[0]= Boolean.valueOf(value1); - type="boolean"; + values[0] = Boolean.valueOf(value1); + type = "boolean"; } else { try { - int v = Integer.parseInt(value1); + final int v = Integer.parseInt(value1); values = new Number[valuesFixed.length]; values[0] = v; - type="integer"; - } catch (NumberFormatException e){ + type = "integer"; + } catch (final NumberFormatException e) { values = new String[valuesFixed.length]; - values[0]=value1; - type="string"; + values[0] = value1; + type = "string"; } } - for (int j=1;j stringToList(final String str, final String delim) { - List result = new ArrayList(); - String strFixed = str.replace("\\"+delim, "SLP_ESCAPED_DELIM"); - StringTokenizer tokenizer = new StringTokenizer(strFixed, delim); + final List result = new ArrayList(); + final String strFixed = str.replace("\\" + delim, "SLP_ESCAPED_DELIM"); + final StringTokenizer tokenizer = new StringTokenizer(strFixed, delim); while (tokenizer.hasMoreTokens()) { - result.add(tokenizer.nextToken().replace("SLP_ESCAPED_DELIM", "\\"+delim)); + result.add(tokenizer.nextToken().replace("SLP_ESCAPED_DELIM", + "\\" + delim)); } return result; } - - public static List arrayToList(final String[] arr){ - List result = new ArrayList(); - for (int i=0;i< arr.length;i++){ + + public static List arrayToList(final String[] arr) { + final List result = new ArrayList(); + for (int i = 0; i < arr.length; i++) { result.add(arr[i]); } - + return result; } - - public static String[] listToStringArray(final List list){ - if (list==null){ - return new String[]{}; - } - if (list.isEmpty()){ - return new String[]{}; - } - String[] result = new String[list.size()]; - for (int i = 0;i result = new ArrayList(); - String strFixed = string.replace("\\"+delim, "SLP_ESCAPED_DELIM"); - StringTokenizer tokenizer = new StringTokenizer(strFixed, delim); + + public static String[] stringToStringArray(final String string, + final String delim) { + final List result = new ArrayList(); + final String strFixed = string.replace("\\" + delim, + "SLP_ESCAPED_DELIM"); + final StringTokenizer tokenizer = new StringTokenizer(strFixed, delim); while (tokenizer.hasMoreTokens()) { - result.add(tokenizer.nextToken().replace("SLP_ESCAPED_DELIM","\\"+delim)); + result.add(tokenizer.nextToken().replace("SLP_ESCAPED_DELIM", + "\\" + delim)); } - return result.toArray(new String[]{}); + return result.toArray(new String[] {}); } - - - /** * add a value to a value list in a Map. @@ -366,7 +367,7 @@ static void removeValueFromAll(final Map map, final Object value) { final Object[] keys = map.keySet().toArray(); for (int i = 0; i < keys.length; i++) { - List list = (List) map.get(keys[i]); + final List list = (List) map.get(keys[i]); list.remove(value); if (list.isEmpty()) { map.remove(keys[i]); @@ -395,13 +396,14 @@ * the attribute Dictionary. * @return a List of matches. */ - public static List findMatches(final List keyList, final Dictionary attributes) { - List results = new ArrayList(); - Set caseInsensitiveKeyList = new HashSet(); - List wildcards = new ArrayList(); + public static List findMatches(final List keyList, + final Dictionary attributes) { + final List results = new ArrayList(); + final Set caseInsensitiveKeyList = new HashSet(); + final List wildcards = new ArrayList(); if (!keyList.isEmpty()) { - for (Iterator keys = keyList.iterator(); keys.hasNext();) { - String key = (String) keys.next(); + for (final Iterator keys = keyList.iterator(); keys.hasNext();) { + final String key = (String) keys.next(); if (key.indexOf("*") == -1) { caseInsensitiveKeyList.add(key.toLowerCase()); } else { @@ -410,16 +412,16 @@ } } - for (Enumeration keys = attributes.keys(); keys.hasMoreElements();) { - String key = (String) keys.nextElement(); + for (final Enumeration keys = attributes.keys(); keys.hasMoreElements();) { + final String key = (String) keys.nextElement(); if (keyList.isEmpty() || caseInsensitiveKeyList.contains(key.toLowerCase())) { results.add("(" + key + "=" + attributes.get(key).toString() + ")"); continue; } - for (Iterator iter = wildcards.iterator(); iter.hasNext();) { - String wildcard = (String) iter.next(); + for (final Iterator iter = wildcards.iterator(); iter.hasNext();) { + final String wildcard = (String) iter.next(); if (equalsWithWildcard(wildcard.toCharArray(), 0, key .toCharArray(), 0)) { results.add("(" + key + "=" @@ -445,8 +447,8 @@ * the current position within the attribute. * @return true if equals. */ - private static boolean equalsWithWildcard(char[] val, int valIndex, - char[] attr, int attrIndex) { + private static boolean equalsWithWildcard(final char[] val, int valIndex, + final char[] attr, int attrIndex) { if (val.length == valIndex) { return attr.length == attrIndex; } @@ -460,108 +462,113 @@ } while (attr.length - attrIndex > -1); return false; } else { - return (attr.length == attrIndex || attr[attrIndex] != val[valIndex]) ? false + return attr.length == attrIndex || attr[attrIndex] != val[valIndex] ? false : equalsWithWildcard(val, ++valIndex, attr, ++attrIndex); } } - /** - * Merges the SLP attribute-list by merging multiple attributes with the same name and type into one + * Merges the SLP attribute-list by merging multiple attributes with the + * same name and type into one * * @param atts - * The atttribute list as a a list of SLP atribute strings (name=value) - * @return - * The merged attributes as an array - */ - public static String[] mergeAttributes(List atts){ - Map> ad = new Hashtable>(); - List keywords = new ArrayList(); - - for (String s : atts){ - String[] fields = s.split("="); + * The atttribute list as a a list of SLP atribute strings + * (name=value) + * @return The merged attributes as an array + */ + public static String[] mergeAttributes(final List atts) { + final Map> ad = new Hashtable>(); + final List keywords = new ArrayList(); + + for (final String s : atts) { + final String[] fields = s.split("="); String at_name = fields[0]; - if (at_name.startsWith("(")){ - at_name=at_name.substring(1); + if (at_name.startsWith("(")) { + at_name = at_name.substring(1); } - if (at_name.endsWith(")")){ - at_name=at_name.substring(0, at_name.length()-1); + if (at_name.endsWith(")")) { + at_name = at_name.substring(0, at_name.length() - 1); } - if (fields.length==1 && !keywords.contains(at_name)){ + if (fields.length == 1 && !keywords.contains(at_name)) { keywords.add(at_name); continue; } - if (ad.keySet().contains(at_name)){ - for (String s2:stringToList(fields[1].substring(0, fields[1].length()-1), ",")){ - List current = ad.get(at_name); - if (!current.contains(s2)){ + if (ad.keySet().contains(at_name)) { + for (final String s2 : stringToList(fields[1].substring(0, + fields[1].length() - 1), ",")) { + final List current = ad.get(at_name); + if (!current.contains(s2)) { current.add(s2); } } continue; } - ad.put(at_name, stringToList(fields[1].substring(0, fields[1].length()-1), ",")); + ad.put(at_name, stringToList(fields[1].substring(0, fields[1] + .length() - 1), ",")); } - - List result = new ArrayList(); - Set keys = ad.keySet(); - for (String k:keys){ - result.add("("+k+"="+listToString(ad.get(k), ",")+")"); + + final List result = new ArrayList(); + final Set keys = ad.keySet(); + for (final String k : keys) { + result.add("(" + k + "=" + listToString(ad.get(k), ",") + ")"); } - for (String kw:keywords){ + for (final String kw : keywords) { result.add(kw); } return listToStringArray(result); - + } - + /** - * Merges the SLP attribute-list by merging multiple attributes with the same name and type into one + * Merges the SLP attribute-list by merging multiple attributes with the + * same name and type into one * * @param atts - * The atttribute list as a an array of SLP atribute strings (name=value) - * @return - * The merged attributes as an array - */ - public static String[] mergeAttributes(String[] atts){ - Map> ad = new Hashtable>(); - List keywords = new ArrayList(); - - for (String s : atts){ - String[] fields = s.split("="); + * The atttribute list as a an array of SLP atribute strings + * (name=value) + * @return The merged attributes as an array + */ + public static String[] mergeAttributes(final String[] atts) { + final Map> ad = new Hashtable>(); + final List keywords = new ArrayList(); + + for (final String s : atts) { + final String[] fields = s.split("="); String at_name = fields[0]; - if (at_name.startsWith("(")){ - at_name=at_name.substring(1); + if (at_name.startsWith("(")) { + at_name = at_name.substring(1); } - if (at_name.endsWith(")")){ - at_name=at_name.substring(0, at_name.length()-1); + if (at_name.endsWith(")")) { + at_name = at_name.substring(0, at_name.length() - 1); } - if (fields.length==1 && !keywords.contains(at_name)){ + if (fields.length == 1 && !keywords.contains(at_name)) { keywords.add(at_name); continue; } - if (ad.keySet().contains(at_name)){ - for (String s2:stringToList(fields[1].substring(0, fields[1].length()-1), ",")){ - List current = ad.get(at_name); - if (!current.contains(s2)){ + if (ad.keySet().contains(at_name)) { + for (final String s2 : stringToList(fields[1].substring(0, + fields[1].length() - 1), ",")) { + final List current = ad.get(at_name); + if (!current.contains(s2)) { current.add(s2); } } continue; } - ad.put(at_name, stringToList(fields[1].substring(0, fields[1].length()-1), ",")); + ad.put(at_name, stringToList(fields[1].substring(0, fields[1] + .length() - 1), ",")); } - - List result = new ArrayList(); - Set keys = ad.keySet(); - for (String k:keys){ - result.add("("+k+"="+listToString(ad.get(k), ",")+")"); + + final List result = new ArrayList(); + final Set keys = ad.keySet(); + for (final String k : keys) { + result.add("(" + k + "=" + listToString(ad.get(k), ",") + ")"); } - for (String kw:keywords){ + for (final String kw : keywords) { result.add(kw); } return listToStringArray(result); - + } } Modified: directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ServiceLocationEnumerationImpl.java URL: http://svn.apache.org/viewvc/directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ServiceLocationEnumerationImpl.java?rev=782980&r1=782979&r2=782980&view=diff ============================================================================== --- directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ServiceLocationEnumerationImpl.java (original) +++ directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ServiceLocationEnumerationImpl.java Tue Jun 9 12:50:45 2009 @@ -26,7 +26,6 @@ import org.apache.directory.slp.ServiceLocationEnumeration; import org.apache.directory.slp.ServiceLocationException; - /** * the implementation of a ServiceLocationEnumeration. * @@ -37,12 +36,12 @@ /** * a list of results. */ - private List list; + private final List list; /** * internal Iterator over the elements of the list. */ - private Iterator iterator; + private final Iterator iterator; /** * creates a new ServiceLocationEnumerationImpl. @@ -52,7 +51,7 @@ */ ServiceLocationEnumerationImpl(final List resultList) { list = resultList != null ? resultList : new ArrayList(); - this.iterator = list.iterator(); + iterator = list.iterator(); } /** @@ -66,7 +65,7 @@ public synchronized Object next() throws ServiceLocationException { try { return iterator.next(); - } catch (Exception e) { + } catch (final Exception e) { throw new ServiceLocationException( ServiceLocationException.INTERNAL_SYSTEM_ERROR, e .getMessage()); @@ -90,7 +89,7 @@ public synchronized Object nextElement() { try { return next(); - } catch (ServiceLocationException sle) { + } catch (final ServiceLocationException sle) { return null; } } Modified: directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ServiceReplyFutureImpl.java URL: http://svn.apache.org/viewvc/directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ServiceReplyFutureImpl.java?rev=782980&r1=782979&r2=782980&view=diff ============================================================================== --- directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ServiceReplyFutureImpl.java (original) +++ directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ServiceReplyFutureImpl.java Tue Jun 9 12:50:45 2009 @@ -59,7 +59,7 @@ * @param lifetime * The time until the ReplyFuture is considered done in ms */ - public ServiceReplyFutureImpl(long lifetime) { + public ServiceReplyFutureImpl(final long lifetime) { super(lifetime); } @@ -73,12 +73,12 @@ * The scopes for which replies are expected. used for completion * checks */ - public ServiceReplyFutureImpl(long lifetime, List scopes) { + public ServiceReplyFutureImpl(final long lifetime, final List scopes) { super(lifetime, scopes); } @Override - public void add(AbstractSLPReplyMessage reply) { + public void add(final AbstractSLPReplyMessage reply) { if (reply == null || reply.getErrorCode() != 0) { return; @@ -97,14 +97,14 @@ } if (reply instanceof ServiceReplyMessage) { - for (String s : reply.getResult()) { + for (final String s : reply.getResult()) { try { - Service srv = new Service(new ServiceURL(s, 0)); + final Service srv = new Service(new ServiceURL(s, 0)); synchronized (services) { services.add(srv); } - } catch (ServiceLocationException sle) { + } catch (final ServiceLocationException sle) { continue; } } @@ -114,10 +114,10 @@ // stick to the basic behaviour... synchronized (responses) { - List res = reply.getResultAsList(); + final List res = reply.getResultAsList(); if (res != null && res.size() > 0) { - List resp = reply.getResultAsList(); - for (String s : resp) { + final List resp = reply.getResultAsList(); + for (final String s : resp) { if (!responses.contains(s)) { responses.add(s); } @@ -135,21 +135,21 @@ * The reply message possibly containing extensions * */ - private void processExtensions(AbstractSLPReplyMessage reply) { - for (AbstractExtension ae : reply.getExtensions()) { + private void processExtensions(final AbstractSLPReplyMessage reply) { + for (final AbstractExtension ae : reply.getExtensions()) { if (ae instanceof UnsupportedExtension) { return; } switch (ae.getId()) { case AbstractExtension.ATTRIBUTE_LIST_EXTENSION: - AttributeListExtension ale = (AttributeListExtension) ae; + final AttributeListExtension ale = (AttributeListExtension) ae; if (SLPCore.CONFIG.getSecurityEnabled()) { if (!ale.verify()) { return; } } synchronized (services) { - for (Service srv : services) { + for (final Service srv : services) { if (srv.toString().toLowerCase().equals( ale.getUrl().toLowerCase())) { srv.setAttributes(SLPUtils @@ -176,7 +176,7 @@ } try { services.wait(timeout - System.currentTimeMillis() + 1000); - } catch (InterruptedException e) { + } catch (final InterruptedException e) { } } @@ -197,7 +197,7 @@ synchronized (donelock) { try { donelock.wait(); - } catch (InterruptedException ie) { + } catch (final InterruptedException ie) { } } Modified: directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ThreadedReplyFuture.java URL: http://svn.apache.org/viewvc/directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ThreadedReplyFuture.java?rev=782980&r1=782979&r2=782980&view=diff ============================================================================== --- directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ThreadedReplyFuture.java (original) +++ directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/ThreadedReplyFuture.java Tue Jun 9 12:50:45 2009 @@ -26,241 +26,252 @@ import org.apache.directory.slp.messages.AbstractSLPReplyMessage; /** - * The future returned when performing SLP lookups. It can be accessed while results still come in using next(), - * or after all results have arrived using getResult(). + * The future returned when performing SLP lookups. It can be accessed while + * results still come in using next(), or after all results have arrived using + * getResult(). * * @author Lorenz Breu - * + * */ public class ThreadedReplyFuture implements ReplyFuture { // used to wait for done status protected final Object donelock = new Object(); - - //List of responses (i.e. message results) + + // List of responses (i.e. message results) protected final List responses = new ArrayList(); - - // List of responders, used to build initial list of previous responders for multicast convergence + + // List of responders, used to build initial list of previous responders for + // multicast convergence protected final List responders = new ArrayList(); - + // point when reply future is closed automatically protected long timeout; - + // set to true when all operations producing results have completed protected boolean done = false; - + // the next position to be returned using the next() method. // currently a future object is read by only one consumer. private int nextPosition = 0; - - // the list of scopes this future has to cover, used to control correct closure. + + // the list of scopes this future has to cover, used to control correct + // closure. private List unhandledScopes = new ArrayList(); - + // used to close the future when lifetime expires - private Thread timeoutThread; - + private final Thread timeoutThread; + /** - * Basic constructor, sets a default timeout value and uses all scopes definied in CONFIG + * Basic constructor, sets a default timeout value and uses all scopes + * definied in CONFIG */ - public ThreadedReplyFuture(){ - //TODO: which wait time should we use here? has to be larger than the time it takes to start and end the multicast convergence - this(SLPCore.CONFIG.getWaitTime()*5); - } - - - - + public ThreadedReplyFuture() { + // TODO: which wait time should we use here? has to be larger than the + // time it takes to start and end the multicast convergence + this(SLPCore.CONFIG.getWaitTime() * 5); + } + /** - * Constructor with a specific lifetime. The future expects to handle all scopes defined in CONFIG + * Constructor with a specific lifetime. The future expects to handle all + * scopes defined in CONFIG * * @param lifetime - * Number of milliseconds this future should remain open to receive results. + * Number of milliseconds this future should remain open to + * receive results. */ - public ThreadedReplyFuture(long lifetime){ - unhandledScopes = SLPUtils.stringToList(SLPCore.CONFIG.getScopes().toLowerCase(), ","); - timeout = System.currentTimeMillis()+lifetime; + public ThreadedReplyFuture(final long lifetime) { + unhandledScopes = SLPUtils.stringToList(SLPCore.CONFIG.getScopes() + .toLowerCase(), ","); + timeout = System.currentTimeMillis() + lifetime; timeoutThread = new TimeoutThread(); } - - + /** * Detailed constructor. * * @param lifetime - * Number of milliseconds this future should remain open to receive results. + * Number of milliseconds this future should remain open to + * receive results. * @param scopes - * List of scopes to be handled. + * List of scopes to be handled. */ - public ThreadedReplyFuture(long lifetime,List scopes){ - for (String s : scopes){ + public ThreadedReplyFuture(final long lifetime, final List scopes) { + for (final String s : scopes) { unhandledScopes.add(s.toLowerCase()); } - timeout = System.currentTimeMillis()+lifetime; + timeout = System.currentTimeMillis() + lifetime; timeoutThread = new TimeoutThread(); } - - - + /** - * Adds the result of an SLP reply message to the list of responses and the sender of the - * reply to the list of responders, if the error code is 0. + * Adds the result of an SLP reply message to the list of responses and the + * sender of the reply to the list of responders, if the error code is 0. * * @param reply - * An AbstractSLPReplyMessage obtained through unicast or multicast + * An AbstractSLPReplyMessage obtained through unicast or + * multicast */ - public void add(AbstractSLPReplyMessage reply){ + public void add(final AbstractSLPReplyMessage reply) { - if (reply==null || reply.getErrorCode()!=0){ + if (reply == null || reply.getErrorCode() != 0) { return; } - if (done){ + if (done) { // this reply is coming in too late... return; } - - synchronized (responders){ + + synchronized (responders) { if (!responders.contains(reply.getSource())) { responders.add(reply.getSource()); } else { return; } } - - synchronized(responses){ - List res = reply.getResultAsList(); - if (res!=null && res.size()>0){ - List resp = reply.getResultAsList(); - for (String s: resp){ - if (!responses.contains(s)){ + + synchronized (responses) { + final List res = reply.getResultAsList(); + if (res != null && res.size() > 0) { + final List resp = reply.getResultAsList(); + for (final String s : resp) { + if (!responses.contains(s)) { responses.add(s); } } responses.notifyAll(); } } - + } - + /** - * Close the future. - * If the override flag is set, the future will be closed directly. - * If override is false, then the defined scopes will be removed from the list of unhandled scopes - * and the future will be closed only if no scopes remain unhandled. Else it will remain open. + * Close the future. If the override flag is set, the future will be closed + * directly. If override is false, then the defined scopes will be removed + * from the list of unhandled scopes and the future will be closed only if + * no scopes remain unhandled. Else it will remain open. * * @param scopes - * The scopes to mark as done. + * The scopes to mark as done. * @param override - * Set to true if the future should be closed even if scopes remain unhandled (e.g. timeout) + * Set to true if the future should be closed even if scopes + * remain unhandled (e.g. timeout) */ - public synchronized void setDone(String[] scopes, boolean override){ - synchronized (unhandledScopes){ - for (String s: scopes){ + public synchronized void setDone(final String[] scopes, + final boolean override) { + synchronized (unhandledScopes) { + for (final String s : scopes) { unhandledScopes.remove(s.toLowerCase()); } } - - if (!unhandledScopes.isEmpty() && !override){ - //oops, not all scopes that were expected to be handled actually were handled, so keep waiting + + if (!unhandledScopes.isEmpty() && !override) { + // oops, not all scopes that were expected to be handled actually + // were handled, so keep waiting return; } - if (!done){ - done=true; - synchronized(donelock){ + if (!done) { + done = true; + synchronized (donelock) { donelock.notifyAll(); } - synchronized(responses){ + synchronized (responses) { responses.notifyAll(); } } try { timeoutThread.interrupt(); - } catch (Exception e){ + } catch (final Exception e) { System.out.println("oops"); } } - - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see ch.ethz.iks.slp.ServiceLocationEnumeration#next() */ - public String next(){ - // NOTE: a future is currently only read by one consumer (i.e. LocatorImpl) and therefor a single - // position marker is sufficient. Also the data containers holding responses must add new elements to the end. - synchronized(responses){ - while (!done){ - if (responses.size()>nextPosition){ + public String next() { + // NOTE: a future is currently only read by one consumer (i.e. + // LocatorImpl) and therefor a single + // position marker is sufficient. Also the data containers holding + // responses must add new elements to the end. + synchronized (responses) { + while (!done) { + if (responses.size() > nextPosition) { return responses.get(nextPosition++); } - try{ - responses.wait(timeout-System.currentTimeMillis()+1000); - } catch (InterruptedException e){ - + try { + responses.wait(timeout - System.currentTimeMillis() + 1000); + } catch (final InterruptedException e) { + } } - if (responses.size()>nextPosition){ + if (responses.size() > nextPosition) { return responses.get(nextPosition++); } return null; } } - - + /** * Returns the status of the future. * - * @return - * True if done, false if results can still be added. + * @return True if done, false if results can still be added. */ - public synchronized boolean isDone(){ + public synchronized boolean isDone() { return done; } - - + /** - * Blocking call that waits until the future is marked as "done" before returning all available responses. + * Blocking call that waits until the future is marked as "done" before + * returning all available responses. * - * @return - * A list of all results obtained during the unicast or multicast SLP operation in the form of Strings. + * @return A list of all results obtained during the unicast or multicast + * SLP operation in the form of Strings. */ - public List getResult(){ - while (!done){ - synchronized (donelock){ + public List getResult() { + while (!done) { + synchronized (donelock) { try { donelock.wait(); - } catch (InterruptedException ie){ - + } catch (final InterruptedException ie) { + } } } return responses; } - - + /** - * Returns the sources of all reply messages with error code 0 passed on to this future. + * Returns the sources of all reply messages with error code 0 passed on to + * this future. * - * @return - * Array of IP addresses as Strings in dot notation of the sources of reply messages. + * @return Array of IP addresses as Strings in dot notation of the sources + * of reply messages. */ - public synchronized String[] getResponders(){ + public synchronized String[] getResponders() { return SLPUtils.listToStringArray(responders); } - - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see java.util.Enumeration#hasMoreElements() */ public synchronized boolean hasMoreElements() { - return (responses.size()>nextPosition); + return responses.size() > nextPosition; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see java.util.Enumeration#nextElement() */ public String nextElement() { return next(); } - - - + /** * setup a new thread to close this future when it times out. * @@ -268,34 +279,26 @@ private class TimeoutThread extends Thread { public TimeoutThread() { - this.start(); + start(); } + @Override public void run() { long remain; // while lifetime is not expired - while (((remain=timeout-System.currentTimeMillis())>0) && !isDone()){ + while ((remain = timeout - System.currentTimeMillis()) > 0 + && !isDone()) { try { Thread.sleep(remain); - } catch (InterruptedException ie){ + } catch (final InterruptedException ie) { continue; } } // close the future, even if scopes remain unhandled - setDone(new String[]{},true); + setDone(new String[] {}, true); } } - } - - - - - - - - - Modified: directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/da/DirectoryAgentDaemon.java URL: http://svn.apache.org/viewvc/directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/da/DirectoryAgentDaemon.java?rev=782980&r1=782979&r2=782980&view=diff ============================================================================== --- directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/da/DirectoryAgentDaemon.java (original) +++ directory/sandbox/slp/src/main/java/org/apache/directory/slp/impl/da/DirectoryAgentDaemon.java Tue Jun 9 12:50:45 2009 @@ -31,143 +31,147 @@ import org.apache.directory.slp.messages.ServiceDeregistrationMessage; import org.apache.directory.slp.messages.ServiceRegistrationMessage; - /** - * Internal interface of the jSLP Directory Agent. This interface is to the "daemon" that does message handling - * and reads services from and writes them to the store. This should only be used by the jSLP machinery, not fro the outside. - * To access the DA from a client application, or to start a standalone DA, use the DirectoryAgent interface. + * Internal interface of the jSLP Directory Agent. This interface is to the + * "daemon" that does message handling and reads services from and writes them + * to the store. This should only be used by the jSLP machinery, not fro the + * outside. To access the DA from a client application, or to start a standalone + * DA, use the DirectoryAgent interface. * * @author Lorenz Breu */ public interface DirectoryAgentDaemon { /** - * This does the actual message handling and controlling. Called by the SLPHandler if it receives a message - * of interest. + * This does the actual message handling and controlling. Called by the + * SLPHandler if it receives a message of interest. * * @param msg - * The received AbstractSLPMessage - * @return - * The reply if the received message triggers such, null else. + * The received AbstractSLPMessage + * @return The reply if the received message triggers such, null else. * @throws ServiceLocationException */ - public AbstractSLPReplyMessage handleMessage(AbstractSLPMessage msg) throws ServiceLocationException; - + public AbstractSLPReplyMessage handleMessage(AbstractSLPMessage msg) + throws ServiceLocationException; + /** * Checks if the DA is set to handle requests in this specific scope. * * @param scope - * The scope to be checked - * @return - * True if the DA supports that scope, false otherwise + * The scope to be checked + * @return True if the DA supports that scope, false otherwise */ public boolean isInScope(String scope); - + /** * Builds the DAAdvertisementMessage. * - * @return - * A DAAdvertisementMessage + * @return A DAAdvertisementMessage * @throws ServiceLocationException */ public DAAdvertisementMessage buildAdvert() throws ServiceLocationException; - + /** * Gets the statelessBootTimestamp of the DA * - * @return - * statelessBootTimestamp - * + * @return statelessBootTimestamp + * */ public int getStatelessBootTimestamp(); - + /** * Sets the store that contains the registered services * * @param store - * An object that implements the ServiceStore interface + * An object that implements the ServiceStore interface */ public void setStore(ServiceStore store); - + /** * Checks if a service with the given url has been registered with this DA * * @param service - * The service to be checked - * @return - * True if a service with that url has been found in the store + * The service to be checked + * @return True if a service with that url has been found in the store */ public boolean isKnownService(Service service); - + /** * Updates a registered service entry with new attributes. * * @param reg - * A ServiceRegistrationMessage which doesn't have the FRESH flag set. + * A ServiceRegistrationMessage which doesn't have the FRESH flag + * set. * @throws ServiceLocationException */ - public void updateServiceEntry(ServiceRegistrationMessage reg) throws ServiceLocationException; - + public void updateServiceEntry(ServiceRegistrationMessage reg) + throws ServiceLocationException; + /** * Register the service (if all checks pass) with the DA. * * @param reg - * A FRESH service registration message + * A FRESH service registration message * @throws ServiceLocationException */ - public void registerService(ServiceRegistrationMessage reg) throws ServiceLocationException; - + public void registerService(ServiceRegistrationMessage reg) + throws ServiceLocationException; + /** - * Register the service (if all checks pass) with the DA. This method does not have to perform any - * checks, it just registers the service. + * Register the service (if all checks pass) with the DA. This method does + * not have to perform any checks, it just registers the service. + * * @param reg - * The service to be registered + * The service to be registered * @throws ServiceLocationException */ - public void registerService(Service service) throws ServiceLocationException; - + public void registerService(Service service) + throws ServiceLocationException; + /** * Deregisters a service from the DA. * * @param dereg - * The ServiceDeregistrationMessage asking for the deregistration. + * The ServiceDeregistrationMessage asking for the + * deregistration. * @throws ServiceLocationException */ - public void deregisterService(ServiceDeregistrationMessage dereg) throws ServiceLocationException; - + public void deregisterService(ServiceDeregistrationMessage dereg) + throws ServiceLocationException; + /** * Deregisters a service from the DA. * * @param dereg - * The Service to be deregistered. + * The Service to be deregistered. * @throws ServiceLocationException */ - public void deregisterService(Service service) throws ServiceLocationException; - + public void deregisterService(Service service) + throws ServiceLocationException; + /** * Lists all services currently registered with the DA. * - * @return - * A List of the service urls of all registered services. + * @return A List of the service urls of all registered services. */ public List listServices(); - + /** - * Shuts the DA down and sends a DAAdvert informing other SLP agents of this fact. - * All registered services are lost on shutdown. + * Shuts the DA down and sends a DAAdvert informing other SLP agents of this + * fact. All registered services are lost on shutdown. */ public void shutdown(); - - + /** - * Returns the mappings of attributes of specific abstract SLP service types to their type (string, integer, boolean, opaquevalue or array thereof) - * The method returns a copy of the actual type registry, changes made to the returned object are not - * reflected in the actual type registry + * Returns the mappings of attributes of specific abstract SLP service types + * to their type (string, integer, boolean, opaquevalue or array thereof) + * The method returns a copy of the actual type registry, changes made to + * the returned object are not reflected in the actual type registry * - * @return - * A copy of the attribute type registry + * @return A copy of the attribute type registry * @throws ServiceLocationException - * If not implemented + * If not implemented */ - public Map getAttributeTypes() throws ServiceLocationException; + public Map getAttributeTypes() + throws ServiceLocationException; }