]> sjero.net Git - linphone/blob - p2pproxy/dependencies-src/jxse-src-2.5/impl/src/net/jxta/impl/id/binaryID/CodatBinaryID.java
remove mediastreamer2 and add it as a submodule instead.
[linphone] / p2pproxy / dependencies-src / jxse-src-2.5 / impl / src / net / jxta / impl / id / binaryID / CodatBinaryID.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 package net.jxta.impl.id.binaryID;
57
58
59 import net.jxta.peergroup.PeerGroupID;
60 import java.util.logging.Level;
61 import net.jxta.logging.Logging;
62 import java.util.logging.Logger;
63
64 import java.io.InputStream;
65 import java.net.URI;
66 import net.jxta.id.ID;
67
68
69 /**
70  * This class implements a Pipe ID. Each pipe is assigned a unique id.
71  *
72  * @author Daniel Brookshier <a HREF="mailto:turbogeek@cluck.com">turbogeek@cluck.com</a>
73  * @see net.jxta.id.ID
74  * @see net.jxta.id.IDFactory
75  * @see net.jxta.peergroup.PeerGroupID
76  */
77 public final class CodatBinaryID extends net.jxta.codat.CodatID {
78
79     /**
80      * LOG object for this class.
81      */
82     private final static transient Logger LOG = Logger.getLogger(CodatBinaryID.class.getName());
83
84     /**
85      * The id data
86      */
87     protected String id;
88
89     /**
90      * Used only internally
91      */
92     protected CodatBinaryID() {
93         super();
94     }
95
96     /**
97      * Creates a ID from a string. Note that the ID is not currently validated.
98      *
99      * @param id Value of ID.
100      */
101
102     public CodatBinaryID(String id) {
103         super();
104         this.id = id;
105
106     }
107
108     /**
109      * Constructor. Intializes contents from provided ID.
110      *
111      * @param id the ID data
112      */
113     public CodatBinaryID(BinaryID id) {
114         super();
115         this.id = id.getID();
116     }
117
118     /**
119      * Constructor. Creates a PipeID. A PeerGroupID is provided.  Note that only
120      * the peer group's primary node is used to  build this node. We don't want
121      * to be appending great grand parents.
122      *
123      * @param parent         the group to which this will belong.
124      * @param data           DOCUMENT ME!
125      * @param lengthIncluded DOCUMENT ME!
126      */
127     public CodatBinaryID(net.jxta.peergroup.PeerGroupID parent, byte[] data, boolean lengthIncluded) {
128         this();
129
130         String parentStr = IDFormat.childGroup(parent);
131
132         id = BinaryIDFactory.newBinaryID(BinaryID.flagPipeID, data, lengthIncluded).getID() + "." + parentStr.replace('-', '.');
133     }
134
135     public CodatBinaryID(PeerGroupID groupID, InputStream in) {
136         // this( groupID );
137         net.jxta.id.IDFactory.newCodatID(groupID);
138         // setHash( in );
139     }
140
141     public CodatBinaryID(net.jxta.peergroup.PeerGroupID groupID, byte[] seed, InputStream in) {
142         this(groupID, seed, false);
143
144         // setHash( in );
145     }
146
147     /*
148      private void setHash( InputStream in ) throws IOException {
149      MessageDigest dig = null;
150      try {
151      dig = MessageDigest.getInstance( "SHA" );
152      } catch( NoSuchAlgorithmException caught ) {
153      dig = null;
154      }
155
156      if (dig == null) {
157      throw new ProviderException("SHA1 digest algorithm found");
158      }
159
160      dig.reset();
161
162      do {
163      int nextByte = in.read();
164      if( nextByte == -1 )
165      break;
166
167      dig.update( (byte) nextByte);
168      }
169      while( true );
170
171      in.close();
172
173      try {
174      byte [] result = dig.digest( );
175      for( int eachByte = 0; eachByte < CodatID.hashSize; eachByte++ )
176      id.bytes[eachByte + CodatID.codatHashOffset] = result[eachByte];
177      } catch( Throwable e ) {
178      // we convert this to an IO Exception to keep the number of
179      // down.
180      throw new IOException( "Digest algorithm could not complete : " + e.getMessage() );
181      }
182      }
183      */
184
185     /**
186      * {@inheritDoc}
187      */
188     @Override
189     public boolean equals(Object target) {
190         if (this == target) {
191             return true;
192         }
193         
194         return target instanceof CodatBinaryID && getUniqueValue().equals(((CodatBinaryID) target).getUniqueValue());
195     }
196
197     /**
198      * {@inheritDoc}
199      */
200     @Override
201     public int hashCode() {
202         return getUniqueValue().hashCode();
203     }
204
205     /**
206      * {@inheritDoc}
207      */
208     @Override
209     public String getIDFormat() {
210         return IDFormat.INSTANTIATOR.getSupportedIDFormat();
211     }
212
213     /**
214      * {@inheritDoc}
215      */
216     @Override
217     public Object getUniqueValue() {
218         if (null == id) { 
219             return ID.nullID.getUniqueValue();
220         }
221
222         return getIDFormat() + "-" + id;
223     }
224
225     /**
226      * {@inheritDoc}
227      */
228     @Override
229     public net.jxta.id.ID getPeerGroupID() {
230         try {
231             if (id == null) {
232                 return net.jxta.id.ID.nullID;
233             }
234             String idd = id;
235             int parentStart = idd.indexOf('.');
236
237             if (parentStart != -1) {
238                 idd = idd.substring(parentStart + 1);
239             } else {
240                 return null;
241             }
242
243             URI url = new URI("urn:jxta:" + idd.replace('.', '-'));
244             net.jxta.peergroup.PeerGroupID peerGroupID = (net.jxta.peergroup.PeerGroupID) net.jxta.id.IDFactory.fromURI(url);
245
246             return peerGroupID;
247         } catch (Exception e) {
248             if (Logging.SHOW_WARNING && LOG.isLoggable(Level.WARNING)) {
249                 LOG.warning("cannot convert sub group. ID value = " + id);
250             }
251             return null;
252
253         }
254     }
255
256     /**
257      * returns the coded ID without the binaryid tag.
258      *
259      * @return Returns the raw string used to create the urn!
260      */
261     protected String getID() {
262         return id;
263     }
264
265     /**
266      * {@inheritDoc}
267      * Binary ID only supports static
268      */
269     @Override
270     public boolean isStatic() {
271         return true;
272     }
273     
274 }