]> sjero.net Git - linphone/blob - p2pproxy/dependencies-src/jxse-src-2.5/api/src/net/jxta/meter/MonitorReport.java
3be7ab2b1d04c2cf54d9ba350ece20d1b5e8fbe2
[linphone] / p2pproxy / dependencies-src / jxse-src-2.5 / api / src / net / jxta / meter / MonitorReport.java
1 /*
2  * Copyright (c) 2001-2007 Sun Microsystems, Inc.  All rights reserved.
3  *  
4  *  The Sun Project JXTA(TM) Software License
5  *  
6  *  Redistribution and use in source and binary forms, with or without 
7  *  modification, are permitted provided that the following conditions are met:
8  *  
9  *  1. Redistributions of source code must retain the above copyright notice,
10  *     this list of conditions and the following disclaimer.
11  *  
12  *  2. Redistributions in binary form must reproduce the above copyright notice, 
13  *     this list of conditions and the following disclaimer in the documentation 
14  *     and/or other materials provided with the distribution.
15  *  
16  *  3. The end-user documentation included with the redistribution, if any, must 
17  *     include the following acknowledgment: "This product includes software 
18  *     developed by Sun Microsystems, Inc. for JXTA(TM) technology." 
19  *     Alternately, this acknowledgment may appear in the software itself, if 
20  *     and wherever such third-party acknowledgments normally appear.
21  *  
22  *  4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must 
23  *     not be used to endorse or promote products derived from this software 
24  *     without prior written permission. For written permission, please contact 
25  *     Project JXTA at http://www.jxta.org.
26  *  
27  *  5. Products derived from this software may not be called "JXTA", nor may 
28  *     "JXTA" appear in their name, without prior written permission of Sun.
29  *  
30  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
31  *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
32  *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SUN 
33  *  MICROSYSTEMS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
34  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
35  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
36  *  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
37  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
38  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
39  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  *  
41  *  JXTA is a registered trademark of Sun Microsystems, Inc. in the United 
42  *  States and other countries.
43  *  
44  *  Please see the license information page at :
45  *  <http://www.jxta.org/project/www/license.html> for instructions on use of 
46  *  the license in source files.
47  *  
48  *  ====================================================================
49  *  
50  *  This software consists of voluntary contributions made by many individuals 
51  *  on behalf of Project JXTA. For more information on Project JXTA, please see 
52  *  http://www.jxta.org.
53  *  
54  *  This license is based on the BSD license adopted by the Apache Foundation. 
55  */
56
57 package net.jxta.meter;
58
59
60 import java.net.URI;
61 import java.net.URISyntaxException;
62 import net.jxta.util.documentSerializable.*;
63 import net.jxta.document.*;
64 import net.jxta.id.*;
65 import net.jxta.peer.*;
66 import net.jxta.platform.*;
67 import net.jxta.util.*;
68 import net.jxta.exception.*;
69
70 import java.util.*;
71
72
73 /**
74  *              A Monitor Report contains  service-specific metrics for each service specified in the
75  *              corresponding MonitorFilter (provided when the report was requested).
76  *
77  **/
78 public class MonitorReport implements DocumentSerializable {
79     private long toTime;
80     private long fromTime;
81     private boolean isCumulative;
82     private Map<ModuleClassID,ServiceMetric> serviceMetrics = new HashMap<ModuleClassID,ServiceMetric>();
83     private List<ModuleClassID> unknownModuleClassIDs;
84     
85     /**
86      * Monitor Reports are generally not created by applications, but by the Monitor or PeerInfoService
87      *
88      **/
89     public MonitorReport() {}
90     
91     /**
92      * Monitor Reports are generally not created by applications, but by the Monitor or PeerInfoService
93      *
94      * @param fromTime
95      * @param toTime
96      * @param isCumulative
97      **/
98     public MonitorReport(long fromTime, long toTime, boolean isCumulative) {
99         this.fromTime = fromTime;
100         this.toTime = toTime;
101         this.isCumulative = isCumulative;
102     }
103     
104     /**
105      * Begin time that this report is representing
106      **/
107     public long getFromTime() {
108         return fromTime;
109     }
110     
111     /**
112      * End time that this report is representing
113      *
114      * @return long
115      **/
116     public long getToTime() {
117         return toTime;
118     }
119     
120     /**
121      * Does this report contain metrics from the last time the monitor was reset or is this a delta report
122      **/
123     public boolean isCumulative() {
124         return isCumulative;
125     }
126     
127     /**
128      * Get the contained service-specific ServiceMetrics
129      *
130      **/
131     public Iterator getServiceMetrics() {
132         return serviceMetrics.values().iterator();
133     }
134     
135     /**
136      * Get the contained service-specific ServiceMetric for the specified ServiceMonitor's classID
137      *
138      * @param moduleClassID ServiceMonitor's classID
139      * @return ServiceMetric  ServiceMetric or null if Not Found
140      **/
141     public ServiceMetric getServiceMetric(ModuleClassID moduleClassID) {
142         return serviceMetrics.get(moduleClassID);
143     }
144     
145     /**
146      * addServiceMetric are generally not created by applications, but by the Monitor or PeerInfoService
147      **/
148     public void addServiceMetric(ServiceMetric serviceMetric) {
149         serviceMetrics.put(serviceMetric.getModuleClassID(), serviceMetric);
150     }
151     
152     /**
153      * addServiceMetric are generally not created by applications, but by the Monitor or PeerInfoService
154      **/
155     public void addServiceMetric(ModuleClassID moduleClassID, ServiceMetric serviceMetric) {
156         serviceMetrics.put(moduleClassID, serviceMetric);
157     }
158     
159     /**
160      * Did this report contain any serviceMetrics for which there weren't registered ServiceMetric classes
161      * @see MonitorResources
162      **/
163     public boolean isUnknownModuleClassIDs() {
164         return (unknownModuleClassIDs != null);
165     }
166     
167     /**
168      * Get iterator of ModuleClassIDs of serviceMetrics for which there weren't registered ServiceMetric classes
169      *
170      * @return Iterator
171      **/
172     public Iterator getUnknownModuleClassIDs() {
173         if (unknownModuleClassIDs != null) {
174             return unknownModuleClassIDs.iterator();
175         } else {
176             return      new LinkedList().iterator();
177         }
178     }
179     
180     /**
181      * {@inheritDoc}
182      **/
183     public void serializeTo(Element element) throws DocumentSerializationException {
184         DocumentSerializableUtilities.addLong(element, "toTime", toTime);
185         DocumentSerializableUtilities.addLong(element, "fromTime", fromTime);
186         DocumentSerializableUtilities.addBoolean(element, "isCumulative", isCumulative);
187         
188         for (Iterator i = serviceMetrics.values().iterator(); i.hasNext();) {
189             ServiceMetric serviceMetric = (ServiceMetric) i.next();
190             
191             Element serviceMetricElement = DocumentSerializableUtilities.createChildElement(element, "service");
192             
193             DocumentSerializableUtilities.addString(serviceMetricElement, "moduleClassID"
194                     ,
195                     serviceMetric.getModuleClassID().toString());
196             DocumentSerializableUtilities.addDocumentSerializable(serviceMetricElement, "serviceMetric", serviceMetric);
197         }
198         
199     }
200     
201     /**
202      * {@inheritDoc}
203      **/
204     public void initializeFrom(Element element) throws DocumentSerializationException {
205         for (Enumeration e = element.getChildren(); e.hasMoreElements();) {
206             Element childElement = (TextElement) e.nextElement();
207             String tagName = (String) childElement.getKey();
208             
209             if (tagName.equals("toTime")) {
210                 toTime = DocumentSerializableUtilities.getLong(childElement);
211             } else if (tagName.equals("fromTime")) {
212                 fromTime = DocumentSerializableUtilities.getLong(childElement);
213             } else if (tagName.equals("isCumulative")) {
214                 isCumulative = DocumentSerializableUtilities.getBoolean(childElement);
215             } else if (tagName.equals("service")) {
216                 try {
217                     ModuleClassID moduleClassID = (ModuleClassID) IDFactory.fromURI(
218                             new URI(DocumentSerializableUtilities.getString(childElement, "moduleClassID", "ERROR")));
219
220                     try {
221                         ServiceMetric serviceMetric = MonitorResources.createServiceMetric(moduleClassID);
222
223                         serviceMetric.init(moduleClassID);
224                         Element serviceMetricElement = DocumentSerializableUtilities.getChildElement(childElement, "serviceMetric");
225
226                         serviceMetric.initializeFrom(serviceMetricElement);
227                         serviceMetrics.put(moduleClassID, serviceMetric);
228                     } catch (Exception ex) {
229                         if (unknownModuleClassIDs == null) {
230                             unknownModuleClassIDs = new LinkedList<ModuleClassID>();
231                         }
232                         
233                         unknownModuleClassIDs.add(moduleClassID);
234                     }
235                 } catch (URISyntaxException jex) {
236                     throw new DocumentSerializationException("Can't get ModuleClassID", jex);
237                 }
238             }
239         }
240     }
241 }