Return-Path: Delivered-To: apmail-incubator-river-commits-archive@minotaur.apache.org Received: (qmail 63794 invoked from network); 24 Dec 2010 20:38:48 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 24 Dec 2010 20:38:48 -0000 Received: (qmail 49269 invoked by uid 500); 24 Dec 2010 20:38:48 -0000 Delivered-To: apmail-incubator-river-commits-archive@incubator.apache.org Received: (qmail 49246 invoked by uid 500); 24 Dec 2010 20:38:48 -0000 Mailing-List: contact river-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: river-dev@incubator.apache.org Delivered-To: mailing list river-commits@incubator.apache.org Received: (qmail 49239 invoked by uid 99); 24 Dec 2010 20:38:48 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 24 Dec 2010 20:38:48 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED 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; Fri, 24 Dec 2010 20:38:32 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 584BF2388C10; Fri, 24 Dec 2010 20:37:46 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1052601 [10/10] - in /incubator/river/site/trunk/content/river/doc/api/net/jini/discovery: ./ class-use/ Date: Fri, 24 Dec 2010 20:37:45 -0000 To: river-commits@incubator.apache.org From: sijskes@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101224203746.584BF2388C10@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/RemoteDiscoveryEvent.html URL: http://svn.apache.org/viewvc/incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/RemoteDiscoveryEvent.html?rev=1052601&view=auto ============================================================================== --- incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/RemoteDiscoveryEvent.html (added) +++ incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/RemoteDiscoveryEvent.html Fri Dec 24 20:37:44 2010 @@ -0,0 +1,638 @@ + + + + + + +RemoteDiscoveryEvent (Apache River v2.1.2-SNAPSHOT API Documentation) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.jini.discovery +
+Class RemoteDiscoveryEvent

+
+java.lang.Object
+  extended by java.util.EventObject
+      extended by net.jini.core.event.RemoteEvent
+          extended by net.jini.discovery.RemoteDiscoveryEvent
+
+
+
All Implemented Interfaces:
Serializable
+
+
+
+
public class RemoteDiscoveryEvent
extends RemoteEvent
+ + +

+Whenever the lookup discovery service discovers or discards a lookup + service matching the discovery/discard criteria of one or more of its + registrations, the lookup discovery service sends an instance of this + class to the listener corresponding to each such registration. +

+ For each registration created by the lookup discovery service, an event + identifier is generated. That event identifier uniquely maps the + registration to the listener (submitted by the client to the lookup + discovery service during the registration process) and to the set of + groups and locators the client is interested in discovering. The event + identifier is unique across all other active registrations with the + lookup discovery service, and is sent to the listener as part of the + event. +

+ Because clients of the lookup discovery service need to know not only + when a targeted lookup service has been discovered, but also when it + has been discarded, the lookup discovery service uses an instance of + this class to notify a client's registration(s) when either of these + events occurs. +

+ This class extends RemoteEvent, adding the following additional items + of abstract state: a boolean indicating whether the lookup services + referenced by the event have been discovered or discarded; and a set + consisting of proxy objects where each proxy is a marshalled instance + of the ServiceRegistrar interface, and each is a proxy of one of the + recently discovered or discarded lookup service(s). Methods are defined + through which this additional state may be retrieved upon receipt of an + instance of this class. +

+ The sequence numbers for a given event identifier are "strictly + increasing". This means that when any two such successive events + have sequence numbers differing by only a value of 1, then it is + guaranteed that no events have been missed. On the other hand, when + viewing the set of received events in order, if the difference + between the sequence numbers of two successive events is greater + than 1, then one or more events may or may not have been missed. + For example, a difference greater than 1 could occur if the lookup + discovery service crashes, even if no events are lost because of + the crash. When two successive events have sequence numbers whose + difference is greater than 1, there is said to be a "gap" between + the events. +

+ When a gap occurs between events, the state of the locally managed + set of lookup services may or may not fall "out of sync" with the + corresponding remote state. For example, if the gap corresponds to + a missed event representing the (initial) discovery of a targeted + lookup service, the remote state will reflect this discovery whereas + the local state will not. When such a situation occurs, clients may + wish to employ the methods of the corresponding registration object + to query the current remote state in order to update the current + local state. +

+ Thus, clients typically use this class to determine if conditions + are right for a loss of synchronization (by verifying the existence + of a gap in the event sequence). Clients then typically use the + methods provided by the registration object to both determine if a + loss of synchronization has actually occurred, and to correct + such a situation when it does occur. +

+ +

+

+
Author:
+
Sun Microsystems, Inc.
+
See Also:
RemoteEvent, +ServiceRegistrar, +Serialized Form
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+protected  booleandiscarded + +
+          Flag indicating whether the event is a discovery event or a discard + event.
+protected  Mapgroups + +
+          Map from the service IDs of the registrars of this event + to the groups in which each registrar is a member.
+protected  ArrayListmarshalledRegs + +
+          List consisting of marshalled proxy objects where each proxy implements + the ServiceRegistrar interface, and each is a proxy of + one of the recently discovered or discarded lookup service(s); the + lookup service(s) with which this event is associated.
+protected  ServiceRegistrar[]regs + +
+          Array containing a subset of the set of proxies to the lookup + service(s) with which this event is associated.
+ + + + + + + +
Fields inherited from class net.jini.core.event.RemoteEvent
eventID, handback, seqNum, source
+  + + + + + + + + + + +
+Constructor Summary
RemoteDiscoveryEvent(Object source, + long eventID, + long seqNum, + MarshalledObject handback, + boolean discarded, + Map groups) + +
+          Constructs a new instance of RemoteDiscoveryEvent.
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ MapgetGroups() + +
+          Returns a set that maps to the service ID of each registrar referenced + by this event, the current set of groups in which each registrar is a + member.
+ ServiceRegistrar[]getRegistrars() + +
+          Returns an array consisting of instances of the ServiceRegistrar + interface.
+ booleanisDiscarded() + +
+          Returns the value of the boolean flag that indicates whether this + event is a discovery event or a discard event.
+ + + + + + + +
Methods inherited from class net.jini.core.event.RemoteEvent
getID, getRegistrationObject, getSequenceNumber
+ + + + + + + +
Methods inherited from class java.util.EventObject
getSource, toString
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+discarded

+
+protected boolean discarded
+
+
Flag indicating whether the event is a discovery event or a discard + event. If this variable is false, then the lookup services + referenced by this event were just discovered; if true, + then those lookup services were just discarded. +

+

+
+
+
+ +

+marshalledRegs

+
+protected ArrayList marshalledRegs
+
+
List consisting of marshalled proxy objects where each proxy implements + the ServiceRegistrar interface, and each is a proxy of + one of the recently discovered or discarded lookup service(s); the + lookup service(s) with which this event is associated. +

+ Each proxy in this list is individually marshalled in order to add + an additional 'layer' of serialization. Placing this serialization + "wrapper" around each element prevents the deserialization mechanism + from attempting to deserialize the individual elements in the list. + That is, the deserialization mechanism will only deserialize the list + itself. After the list itself is successfully deserialized, the client + (or a third party, if the client requested that events be sent to a + third party such as a mailbox), can then attempt to unmarshal each + element separately. This allows each success to be captured, and each + failure to be noted. +

+ If the elements of this list were not each marshalled separately, + then upon encountering failure while attempting to deserialize any + one element of the list, the deserialization mechanism's + readObject method will throw an IOException; + resulting in the loss of all of the elements of the list, even those + that could be successfully deserialized. +

+

+
+
+
+ +

+regs

+
+protected ServiceRegistrar[] regs
+
+
Array containing a subset of the set of proxies to the lookup + service(s) with which this event is associated. The elements of this + array correspond to those elements of the marshalledRegs + array that were successfully unmarshalled (at least once) as a result + of one or more invocations of the getRegistrars method + of this event. Upon deserializing this event, this array is empty, + but of the same size as marshalledRegs; and will be + populated when the recipient of this event retrieves the registrars + corresponding to the elements of marshalledRegs. +

+

+
+
+
+ +

+groups

+
+protected Map groups
+
+
Map from the service IDs of the registrars of this event + to the groups in which each registrar is a member. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+RemoteDiscoveryEvent

+
+public RemoteDiscoveryEvent(Object source,
+                            long eventID,
+                            long seqNum,
+                            MarshalledObject handback,
+                            boolean discarded,
+                            Map groups)
+                     throws IOException
+
+
Constructs a new instance of RemoteDiscoveryEvent. +

+

+
Parameters:
source - reference to the lookup discovery service that + generated the event
eventID - the event identifier that maps a particular + registration to its listener and targeted groups + and locators
seqNum - the sequence number of this event
handback - the client handback (null may be input)
discarded - flag indicating whether the event being constructed + is a discovery event or a discard event
groups - mapping from the registrars of this event to the + groups in which each registrar is a member +
Throws: +
IOException - when serialization failure occurs on + every registrar of this event. That is, if at least one + registrar is successfully serialized, then this exception + will not be thrown. +
NullPointerException - this exception occurs when + either null is input for the map parameter, or + at least one element of that map is null. +
IllegalArgumentException - this exception occurs + when an empty set of registrars is input.
+
+ + + + + + + + +
+Method Detail
+ +

+isDiscarded

+
+public boolean isDiscarded()
+
+
Returns the value of the boolean flag that indicates whether this + event is a discovery event or a discard event. +

+

+ +
Returns:
true if this is a discard event, false + if it is a discovery event.
+
+
+
+ +

+getRegistrars

+
+public ServiceRegistrar[] getRegistrars()
+                                 throws LookupUnmarshalException
+
+
Returns an array consisting of instances of the ServiceRegistrar + interface. Each element in the returned set is a proxy to one of + the newly discovered or discarded lookup service(s) that caused + the current instance of this event class to be sent to the listener + of the client's registration. Note that a new array is returned + on every call. +

+ When the lookup discovery service sends an instance of this event + class to the listener of a client's registration, the set of lookup + service proxies contained in the event is sent as a set of marshalled + instances of the ServiceRegistrar interface. Thus, in order to + construct the return set, this method attempts to unmarshal each + element of that set of proxies. Should a failure occur while + attempting to unmarshal any of the elements of the set of marshalled + proxy objects contained in the current instance of this class, this + method will throw an exception of type LookupUnmarshalException. +

+ When a LookupUnmarshalException is thrown by this method, the + contents of the exception provides the client with the following + useful information: (1) the knowledge that a problem has occurred + while unmarshalling at least one of the as yet unmarshalled proxy + objects, (2) the set consisting of the proxy objects that were + successfully unmarshalled (either on the current invocation of + this method or on some previous invocation), (3) the set consisting + of the marshalled proxy objects that could not be unmarshalled + during the current or any previous invocation of this method, and + (4) the set of exceptions corresponding to each failed attempt at + unmarshalling during the current invocation of this method. +

+ Typically, the type of exception that occurs when attempting to + unmarshal an element of the set of marshalled proxies is either an + IOException or a ClassNotFoundException. A ClassNotFoundException + occurs whenever a remote field of the marshalled proxy cannot be + retrieved (usually because the codebase of one of the field's classes + or interfaces is currently 'down'). To address this situation, the + client may wish to invoke this method at some later time when the + 'down' codebase(s) may be accessible. Thus, the client can invoke + this method multiple times until all of the elements of the set of + marshalled proxies can be successfully unmarshalled. +

+ Note that once an element of the set of marshalled proxy objects has + been successfully unmarshalled on a particular invocation of this + method, the resulting unmarshalled proxy is stored for return on + all future invocations of this method. That is, once successfully + unmarshalled, no attempt will be made to unmarshal that element on + any future invocations of this method. Thus, if this method returns + successfully without throwing a LookupUnmarshalException, the client + is guaranteed that all marshalled proxies have been successfully + unmarshalled; and any future invocations of this method will return + successfully. +

+

+ +
Returns:
an array consisting of references to the discovered or discarded + lookup service(s) corresponding to this event. +
Throws: +
LookupUnmarshalException - this exception + occurs when at least one of the set of lookup service + references cannot be deserialized (unmarshalled).
See Also:
LookupUnmarshalException
+
+
+
+ +

+getGroups

+
+public Map getGroups()
+
+
Returns a set that maps to the service ID of each registrar referenced + by this event, the current set of groups in which each registrar is a + member. +

+ To retrieve the set of member groups corresponding to any element + of the array returned by the getRegistrars method, + simply use the service ID of the desired element from that array as + the key to the get method of the Map object + returned by this method and cast to String[]. +

+ Note that the same Map object is returned on every + call to this method; that is, a copy is not made. +

+

+ +
Returns:
Map whose key set consists of the service IDs + of each lookup service with which this event is associated, + and whose values are String[] arrays containing + the names of the groups in which the lookup service having + the corresponding service ID is a member.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright 2007, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions. + + Added: incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-frame.html URL: http://svn.apache.org/viewvc/incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-frame.html?rev=1052601&view=auto ============================================================================== --- incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-frame.html (added) +++ incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-frame.html Fri Dec 24 20:37:44 2010 @@ -0,0 +1,98 @@ + + + + + + +net.jini.discovery (Apache River v2.1.2-SNAPSHOT API Documentation) + + + + + + + + + + + +net.jini.discovery + + + + +
+Interfaces  + +
+DiscoveryChangeListener +
+DiscoveryGroupManagement +
+DiscoveryListener +
+DiscoveryLocatorManagement +
+DiscoveryManagement +
+LookupDiscoveryRegistration +
+LookupDiscoveryService
+ + + + + + +
+Classes  + +
+Constants +
+ConstrainableLookupLocator +
+ConstrainableLookupLocatorTrustVerifier +
+DiscoveryEvent +
+DiscoveryPermission +
+IncomingMulticastAnnouncement +
+IncomingMulticastRequest +
+IncomingUnicastRequest +
+IncomingUnicastResponse +
+LookupDiscovery +
+LookupDiscoveryManager +
+LookupLocatorDiscovery +
+OutgoingMulticastAnnouncement +
+OutgoingMulticastRequest +
+OutgoingUnicastRequest +
+OutgoingUnicastResponse +
+RemoteDiscoveryEvent
+ + + + + + +
+Exceptions  + +
+LookupUnmarshalException
+ + + + Added: incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-summary.html URL: http://svn.apache.org/viewvc/incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-summary.html?rev=1052601&view=auto ============================================================================== --- incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-summary.html (added) +++ incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-summary.html Fri Dec 24 20:37:44 2010 @@ -0,0 +1,320 @@ + + + + + + +net.jini.discovery (Apache River v2.1.2-SNAPSHOT API Documentation) + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package net.jini.discovery +

+These are utility classes and interfaces that conform to the discovery and join +protocol defined in the Jini Discovery and Join Specification. +

+See: +
+          Description +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Interface Summary
DiscoveryChangeListenerThis interface must be implemented by entities that wish to receive + notification of the following events.
DiscoveryGroupManagementThis interface defines methods and constants related to the management + of the sets of lookup services that are to be discovered using the + multicast discovery protocol; that is, lookup services that are + discovered by way of group discovery.
DiscoveryListenerThis interface must be implemented by parties that wish to obtain + notifications from a LookupDiscovery object.
DiscoveryLocatorManagementThis interface defines methods related to the management of the set of + lookup services that are to be discovered using the unicast discovery + protocol; that is, lookup services that are discovered by way of + locator discovery.
DiscoveryManagementThis interface defines methods related to the discovery event mechanism + and discovery process termination.
LookupDiscoveryRegistrationWhen a client requests a registration with a lookup discovery service, + an instance of this interface is returned.
LookupDiscoveryServiceDefines the interface to the lookup discovery service.
+  + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
ConstantsA holder class for constants that pertain to the unicast and + multicast discovery protocols.
ConstrainableLookupLocatorLookupLocator subclass which supports constraint operations + through the RemoteMethodControl interface.
ConstrainableLookupLocatorTrustVerifierTrust verifier for ConstrainableLookupLocator instances.
DiscoveryEventEvent object passed (via either the DiscoveryListener + interface or the DiscoveryChangeListener) to indicate to + interested parties that one or more ServiceRegistrar + objects have been discovered or discarded during the discovery process.
DiscoveryPermissionPermission for using LookupDiscovery.
IncomingMulticastAnnouncementEncapsulate the details of unmarshaling an incoming multicast + announcement packet.
IncomingMulticastRequestEncapsulate the details of unmarshaling an incoming multicast + request packet.
IncomingUnicastRequestEncapsulate the details of unmarshaling an incoming unicast + request.
IncomingUnicastResponseThis class encapsulates the details of unmarshaling an incoming + unicast response.
LookupDiscoveryThis class is a helper utility class that encapsulates the functionality + required of an entity that wishes to employ multicast discovery to + find lookup services located within the entity's "multicast radius" + (roughly, the number of hops beyond which neither the multicast requests + from the entity, nor the multicast announcements from the lookup service, + will propagate).
LookupDiscoveryManagerThis class is a helper utility class that organizes and manages all + discovery-related activities on behalf of a client or service.
LookupLocatorDiscoveryThis class encapsulates the functionality required of an entity that + wishes to employ the unicast discovery protocol to discover a lookup + service.
OutgoingMulticastAnnouncementEncapsulate the details of marshaling a multicast announcement into + one or more packets.
OutgoingMulticastRequestEncapsulate the details of marshaling a multicast request into one or + more packets.
OutgoingUnicastRequestEncapsulate the details of marshaling a unicast request.
OutgoingUnicastResponseEncapsulate the details of marshaling a unicast response.
RemoteDiscoveryEventWhenever the lookup discovery service discovers or discards a lookup + service matching the discovery/discard criteria of one or more of its + registrations, the lookup discovery service sends an instance of this + class to the listener corresponding to each such registration.
+  + +

+ + + + + + + + + +
+Exception Summary
LookupUnmarshalExceptionWhen unmarshalling an instance of MarshalledObject, different + exceptions can occur.
+  + +

+

+Package net.jini.discovery Description +

+ +

+These are utility classes and interfaces that conform to the discovery and join +protocol defined in the Jini Discovery and Join Specification. +

+ +

+

+
See Also:
"Jini Discovery and Join Specification"
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright 2007, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions. + + Added: incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-tree.html URL: http://svn.apache.org/viewvc/incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-tree.html?rev=1052601&view=auto ============================================================================== --- incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-tree.html (added) +++ incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-tree.html Fri Dec 24 20:37:44 2010 @@ -0,0 +1,180 @@ + + + + + + +net.jini.discovery Class Hierarchy (Apache River v2.1.2-SNAPSHOT API Documentation) + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package net.jini.discovery +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright 2007, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions. + + Added: incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-use.html URL: http://svn.apache.org/viewvc/incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-use.html?rev=1052601&view=auto ============================================================================== --- incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-use.html (added) +++ incubator/river/site/trunk/content/river/doc/api/net/jini/discovery/package-use.html Fri Dec 24 20:37:44 2010 @@ -0,0 +1,237 @@ + + + + + + +Uses of Package net.jini.discovery (Apache River v2.1.2-SNAPSHOT API Documentation) + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
net.jini.discovery

+
+ + + + + + + + + + + + + +
+Packages that use net.jini.discovery
net.jini.discoveryThese are utility classes and interfaces that conform to the discovery and join +protocol defined in the Jini Discovery and Join Specification
net.jini.lookupStandard utility classes for managing the join state of a service +and the service discovery duties of a client or service. 
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+Classes in net.jini.discovery used by net.jini.discovery
DiscoveryEvent + +
+          Event object passed (via either the DiscoveryListener + interface or the DiscoveryChangeListener) to indicate to + interested parties that one or more ServiceRegistrar + objects have been discovered or discarded during the discovery process.
DiscoveryGroupManagement + +
+          This interface defines methods and constants related to the management + of the sets of lookup services that are to be discovered using the + multicast discovery protocol; that is, lookup services that are + discovered by way of group discovery.
DiscoveryListener + +
+          This interface must be implemented by parties that wish to obtain + notifications from a LookupDiscovery object.
DiscoveryLocatorManagement + +
+          This interface defines methods related to the management of the set of + lookup services that are to be discovered using the unicast discovery + protocol; that is, lookup services that are discovered by way of + locator discovery.
DiscoveryManagement + +
+          This interface defines methods related to the discovery event mechanism + and discovery process termination.
LookupDiscoveryRegistration + +
+          When a client requests a registration with a lookup discovery service, + an instance of this interface is returned.
LookupUnmarshalException + +
+          When unmarshalling an instance of MarshalledObject, different + exceptions can occur.
+  +

+ + + + + + + + +
+Classes in net.jini.discovery used by net.jini.lookup
DiscoveryManagement + +
+          This interface defines methods related to the discovery event mechanism + and discovery process termination.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+Copyright 2007, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions. + +