📄 peeradvertisement.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: PeerAdvertisement.java,v 1.34 2005/11/04 19:11:34 bondolo Exp $ */package net.jxta.protocol;import java.net.URI;import java.util.Iterator;import java.util.Hashtable;import java.util.Map;import java.util.HashMap;import java.net.URISyntaxException;import org.apache.log4j.Level;import org.apache.log4j.Logger;import net.jxta.document.ExtendableAdvertisement;import net.jxta.document.Element;import net.jxta.document.MimeMediaType;import net.jxta.document.StructuredDocument;import net.jxta.document.StructuredDocumentFactory;import net.jxta.document.StructuredDocumentUtils;import net.jxta.id.IDFactory;import net.jxta.id.ID;import net.jxta.peergroup.PeerGroupID;import net.jxta.peer.PeerID;/** * Generated when instantiating a group on a peer and contains all the * parameters that services need to publish. It is then published within the * group. */public abstract class PeerAdvertisement extends ExtendableAdvertisement implements Cloneable { /** * Log4J Logger **/ private static final Logger LOG = Logger.getLogger(PeerAdvertisement.class.getName()); /* * FIXME: [20011001 jice@jxta.org] * ideally Advertisements should be immutable, but then they become too * cumbersome to construct. Therefore we would need an immutable class * and a mutable subclass, and provide one or the other depending on some * yet to defined privilege or something like that...later. */ /** * The id of this peer. **/ private PeerID pid = null; /** * The group in which this peer is located. **/ private PeerGroupID gid = null; /** * The name of this peer. Not guaranteed to be unique in any way. May be empty or * null. **/ private String name = null; /** * Descriptive meta-data about this peer. */ private Element description = null; /** * A table of structured documents to be interpreted by each service. **/ private final Map serviceParams = new HashMap(); /** * Counts the changes made to this object. * The API increments it every time some change is not proven to be * idempotent. * We rely on implementations to increment modCount every time something is * changed without going through the API. **/ protected volatile int modCount = 0; /** * Returns the number of times this object has been modified since * it was created. * This permits to detect local changes that require refreshing some * other data. * @return int the current modification count. */ public int getModCount() { return modCount; } protected int incModCount() { if (LOG.isEnabledFor(Level.DEBUG)) { Throwable trace = new Throwable("Stack Trace"); StackTraceElement elements[] = trace.getStackTrace(); LOG.debug( "Modification #" + (modCount + 1) + " to PeerAdv@" + Integer.toHexString(System.identityHashCode(this)) + " caused by : " + "\n\t" + elements[1] + "\n\t" + elements[2]); } return modCount++; } /** * Returns the identifying type of this Advertisement. * * @return String the type of advertisement **/ public static String getAdvertisementType() { return "jxta:PA"; } /** * {@inheritDoc} **/ public final String getBaseAdvType() { return getAdvertisementType(); } /** * Make a safe clone of this PeerAdvertisement. * * @return Object an object of class PeerAdvertisement that is a deep-enough * copy of this one. */ public Object clone() { try { PeerAdvertisement clone = (PeerAdvertisement) super.clone(); clone.setPeerID(getPeerID()); clone.setPeerGroupID(getPeerGroupID()); clone.setName(getName()); clone.setDesc(getDesc()); clone.setServiceParams(getServiceParams()); return clone; } catch (CloneNotSupportedException impossible) { return null; } } /** * returns the name of the peer. * * @return String name of the peer. */ public String getName() { return name; } /** * sets the name of the peer. * * @param name name of the peer. */ public void setName(String name) { this.name = name; incModCount(); } /** * Returns the id of the peer. * * @return PeerID the peer id */ public PeerID getPeerID() { return pid; } /** Sets the id of the peer. * * @param pid the id of this peer. */ public void setPeerID(PeerID pid) { this.pid = pid; incModCount(); } /** * Returns the id of the peergroup this peer advertisement is for. * * @return PeerGroupID the peergroup id */ public PeerGroupID getPeerGroupID() { return gid; } /** * Returns the id of the peergroup this peer advertisement is for. * * @param gid The id of the peer.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -