⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rendezvousservicemetric.java

📁 jxta_src_2.41b jxta 2.41b 最新版源码 from www.jxta.org
💻 JAVA
字号:
/* * Copyright (c) 2001 Sun Microsystems, Inc.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by the *       Sun Microsystems, Inc. for Project JXTA." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must *    not be used to endorse or promote products derived from this *    software without prior written permission. For written *    permission, please contact Project JXTA at http://www.jxta.org. * * 5. Products derived from this software may not be called "JXTA", *    nor may "JXTA" appear in their name, without prior written *    permission of Sun. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL SUN MICROSYSTEMS OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of Project JXTA.  For more * information on Project JXTA, please see * <http://www.jxta.org/>. * * This license is based on the BSD license adopted by the Apache Foundation. * * $Id: RendezvousServiceMetric.java,v 1.9 2004/09/27 21:47:05 bondolo Exp $ */package net.jxta.impl.rendezvous.rendezvousMeter;import net.jxta.meter.*;import net.jxta.peer.*;import net.jxta.util.documentSerializable.*;import net.jxta.document.*;import net.jxta.platform.*;import java.util.*;import net.jxta.util.*;import net.jxta.exception.*;import net.jxta.id.*;import java.net.*;/** * The Service Monitor Metric for the standard Rendezvous Service **/public class RendezvousServiceMetric implements ServiceMetric {    private RendezvousMetric rendezvousMetric;    private LinkedList rendezvousConnectionMetrics = new LinkedList();    private LinkedList clientConnectionMetrics = new LinkedList();    private ModuleClassID moduleClassID = MonitorResources.rendezvousServiceMonitorClassID;    /**     * Create a Service Metric: No-arg constructor is required      **/    public RendezvousServiceMetric() {}	    private RendezvousServiceMetric(ModuleClassID moduleClassID) {        init(moduleClassID);    }    /**     * 	Initialize the metric with the ModuleClassID of the Monitor     **/    public void init(ModuleClassID moduleClassID) {         this.moduleClassID = moduleClassID;    }    /** Get the ModuleClassID of the Monitor that generated this ServiceMetric **/    public ModuleClassID getModuleClassID() {        return moduleClassID;    }    /**     * Get the General Rendezvous Metric     **/    public RendezvousMetric getRendezvousMetric() {        return rendezvousMetric;    }    void setRendezvousMetric(RendezvousMetric rendezvousMetric) {         this.rendezvousMetric = rendezvousMetric;     }    /**     *	Append a Client Connection Metric      **/    public void addClientConnectionMetric(ClientConnectionMetric clientConnectionMetric) {        synchronized (clientConnectionMetrics) {            clientConnectionMetrics.add(clientConnectionMetric);        }    }    /**     * Get all the Client Connection Metrics      **/    public Iterator getClientConnectionMetrics() {        return clientConnectionMetrics.iterator();    }    void clearClientConnectionMetrics() {        clientConnectionMetrics.clear();    }    /**     * Get the Client Connection Metrics for a single Peers ID     **/    public ClientConnectionMetric getClientConnectionMetric(PeerID peerId) {        for (Iterator i = clientConnectionMetrics.iterator(); i.hasNext();) {            ClientConnectionMetric clientConnectionMetric = (ClientConnectionMetric) i.next();            if (peerId.equals(clientConnectionMetric.getPeerID())) {                return clientConnectionMetric;            }        }        return null;    }    /**     *	Append a Rendezvous Connection Metric      **/    public void addRendezvousConnectionMetric(RendezvousConnectionMetric rendezvousConnectionMetric) {        synchronized (rendezvousConnectionMetrics) {            rendezvousConnectionMetrics.add(rendezvousConnectionMetric);        }    }    /**     * Get all the Rendezvous Connection Metrics      **/    public Iterator getRendezvousConnectionMetrics() {        return rendezvousConnectionMetrics.iterator();    }    void clearRendezvousConnectionMetrics() {        rendezvousConnectionMetrics.clear();    }    /**     * Get the Rendezvous Connection Metrics for each Peers ID     **/    public RendezvousConnectionMetric getRendezvousConnectionMetric(PeerID peerID) {        for (Iterator i = rendezvousConnectionMetrics.iterator(); i.hasNext();) {            RendezvousConnectionMetric rendezvousConnectionMetric = (RendezvousConnectionMetric) i.next();			            if (peerID.equals(rendezvousConnectionMetric.getPeerID())) {                return rendezvousConnectionMetric;            }        }        return null;    }    /**     * {@inheritDoc}     **/    public void serializeTo(Element element) throws DocumentSerializationException {        if (rendezvousMetric != null) {            DocumentSerializableUtilities.addDocumentSerializable(element, "rendezvousMetric", rendezvousMetric);        }        for (Iterator i = clientConnectionMetrics.iterator(); i.hasNext();) {            ClientConnectionMetric clientConnectionMetric = (ClientConnectionMetric) i.next();            DocumentSerializableUtilities.addDocumentSerializable(element, "clientConnectionMetric", clientConnectionMetric);		        }        for (Iterator i = rendezvousConnectionMetrics.iterator(); i.hasNext();) {            RendezvousConnectionMetric rendezvousConnectionMetric = (RendezvousConnectionMetric) i.next();            DocumentSerializableUtilities.addDocumentSerializable(element, "rendezvousConnectionMetric", rendezvousConnectionMetric);		        }        if (moduleClassID != null) {            DocumentSerializableUtilities.addString(element, "moduleClassID", moduleClassID.toString());		        }    }    /**     * {@inheritDoc}     **/    public void initializeFrom(Element element) throws DocumentSerializationException {        for (Enumeration e = element.getChildren(); e.hasMoreElements();) {            Element childElement = (TextElement) e.nextElement();            String tagName = (String) childElement.getKey();			            if (tagName.equals("clientConnectionMetric")) {                ClientConnectionMetric clientConnectionMetric = (ClientConnectionMetric) DocumentSerializableUtilities.getDocumentSerializable(                        childElement, ClientConnectionMetric.class);                clientConnectionMetrics.add(clientConnectionMetric);            } else if (tagName.equals("rendezvousConnectionMetric")) {                RendezvousConnectionMetric rendezvousConnectionMetric = (RendezvousConnectionMetric) DocumentSerializableUtilities.getDocumentSerializable(                        childElement, RendezvousConnectionMetric.class);                rendezvousConnectionMetrics.add(rendezvousConnectionMetric);            } else if (tagName.equals("rendezvousMetric")) {                rendezvousMetric = (RendezvousMetric) DocumentSerializableUtilities.getDocumentSerializable(childElement, RendezvousMetric.class);            }            if (tagName.equals("moduleClassID")) {                try {                    moduleClassID = (ModuleClassID) IDFactory.fromURI( new URI(DocumentSerializableUtilities.getString(childElement)));                } catch (URISyntaxException jex) {                    throw new DocumentSerializationException("Can't read moduleClassID", jex);                }            }        }    }    /**     * {@inheritDoc}     **/    public void mergeMetrics(ServiceMetric otherServiceMetric) {        mergeMetrics(otherServiceMetric, true, true, true);    }    /**     * Make a deep copy of this metric only including the portions designated in the Filter     * The resulting metric is Safe to modify without danger to the underlying Monitor Metrics     * @param rendezvousServiceMonitorFilter Filter designates constituant parts to be included     * @return a copy of this metric with references to the designated parts     **/    public RendezvousServiceMetric deepCopy(RendezvousServiceMonitorFilter rendezvousServiceMonitorFilter) {        RendezvousServiceMetric serviceMetric = new RendezvousServiceMetric();        serviceMetric.moduleClassID = moduleClassID;        serviceMetric.mergeMetrics(this, true, rendezvousServiceMonitorFilter.isIncludeClientConnectionMetrics(),                rendezvousServiceMonitorFilter.isIncludeRendezvousConnectionMetrics());        return serviceMetric;	    }     /**     * {@inheritDoc}     * <p> This will only merge the designated submetrics     * @param includeRendezvousMetric Include the basic Rendezvous Metric in the merge     * @param includeClientConnectionMetrics Include Client Connection Metrics in the merge     * @param includeRendezvousConnectionMetrics Include Rendezvous Connection Metrics in the merge     **/    public void mergeMetrics(ServiceMetric otherServiceMetric, boolean includeRendezvousMetric, boolean includeClientConnectionMetrics, boolean includeRendezvousConnectionMetrics) {        RendezvousServiceMetric otherRendezvousServiceMetric = (RendezvousServiceMetric) otherServiceMetric;        if (includeRendezvousMetric) {            RendezvousMetric otherRendezvousMetric = otherRendezvousServiceMetric.getRendezvousMetric();            if ((rendezvousMetric == null) && (otherRendezvousMetric != null)) {                rendezvousMetric = new RendezvousMetric(otherRendezvousMetric);            }            if (otherRendezvousMetric != null) {                 rendezvousMetric.mergeMetrics(otherRendezvousMetric);            }        }        if (includeClientConnectionMetrics) {            for (Iterator i = otherRendezvousServiceMetric.getClientConnectionMetrics(); i.hasNext();) {                ClientConnectionMetric otherClientConnectionMetric = (ClientConnectionMetric) i.next();                ClientConnectionMetric clientConnectionMetric = getClientConnectionMetric(otherClientConnectionMetric.getPeerID());				                if (clientConnectionMetric == null) {                    clientConnectionMetric = new ClientConnectionMetric(otherClientConnectionMetric);                    addClientConnectionMetric(clientConnectionMetric);                }				                 clientConnectionMetric.mergeMetrics(otherClientConnectionMetric);			            }        }        if (includeRendezvousConnectionMetrics) {            for (Iterator i = otherRendezvousServiceMetric.getRendezvousConnectionMetrics(); i.hasNext();) {                RendezvousConnectionMetric otherRendezvousConnectionMetric = (RendezvousConnectionMetric) i.next();                RendezvousConnectionMetric rendezvousConnectionMetric = getRendezvousConnectionMetric(otherRendezvousConnectionMetric.getPeerID());                if (rendezvousConnectionMetric == null) {                    rendezvousConnectionMetric = new RendezvousConnectionMetric(otherRendezvousConnectionMetric);                    addRendezvousConnectionMetric(rendezvousConnectionMetric);                }                rendezvousConnectionMetric.mergeMetrics(otherRendezvousConnectionMetric);			            }        }    }    /**     * {@inheritDoc}     **/    public void diffMetrics(ServiceMetric otherOne) {        throw new RuntimeException("Not Supported");    }    /**     * Make a shallow copy of this metric only including the portions designated in the Filter     * <P> Note: since this is a shallow copy it is dangerous to modify the submetrics     * @param rendezvousServiceMonitorFilter Filter designates constituant parts to be included     * @return a copy of this metric with references to the designated parts     **/    public RendezvousServiceMetric shallowCopy(RendezvousServiceMonitorFilter rendezvousServiceMonitorFilter) {        RendezvousServiceMetric rendezvousServiceMetric = new RendezvousServiceMetric(moduleClassID);        rendezvousServiceMetric.rendezvousMetric = rendezvousMetric;		        if (rendezvousServiceMonitorFilter.isIncludeClientConnectionMetrics()) {            for (Iterator i = getClientConnectionMetrics(); i.hasNext();) {                ClientConnectionMetric clientConnectionMetric = (ClientConnectionMetric) i.next();                rendezvousServiceMetric.addClientConnectionMetric(clientConnectionMetric);            }        }        if (rendezvousServiceMonitorFilter.isIncludeRendezvousConnectionMetrics()) {            for (Iterator i = getRendezvousConnectionMetrics(); i.hasNext();) {                RendezvousConnectionMetric rendezvousConnectionMetric = (RendezvousConnectionMetric) i.next();                rendezvousServiceMetric.addRendezvousConnectionMetric(rendezvousConnectionMetric);            }        }        return rendezvousServiceMetric;	    }	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -