| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| |
| using System; |
| using System.Globalization ; |
| using org.apache.qpid.transport.util; |
| using org.apache.qpid.transport.codec ; |
| |
| namespace org.apache.qpid.console |
| { |
| |
| /** |
| * Identifies a specific class and version on the bus. |
| */ |
| public class ClassKey |
| { |
| public string PackageName { get; set; } |
| public string ClassName { get; set; } |
| public long[] Hash = new long[4] ; |
| |
| public ClassKey(String keyString) { |
| string delims = ":()" ; |
| string[] parts = keyString.Split(delims.ToCharArray()) ; |
| if (parts.Length < 3) { |
| throw new Exception("Invalid class key format. Format should be package:class(bytes)") ; |
| } |
| PackageName = parts[0] ; |
| ClassName = parts[1] ; |
| delims = "-" ; |
| string[] bytes = parts[2].Split(delims.ToCharArray()) ; |
| if (bytes.Length != 4) { |
| throw new Exception("Invalid class key format. Bytes should be in the format HEX-HEX-HEX-HEX") ; |
| } |
| Hash[0] = long.Parse(bytes[0], NumberStyles.HexNumber) ; |
| Hash[1] = long.Parse(bytes[1], NumberStyles.HexNumber) ; |
| Hash[2] = long.Parse(bytes[2], NumberStyles.HexNumber) ; |
| Hash[3] = long.Parse(bytes[3], NumberStyles.HexNumber) ; |
| } |
| |
| public ClassKey(IDecoder dec) { |
| PackageName = dec.ReadStr8() ; |
| ClassName = dec.ReadStr8() ; |
| Hash[0] = dec.ReadUint32() ; |
| Hash[1] = dec.ReadUint32() ; |
| Hash[2] = dec.ReadUint32() ; |
| Hash[3] = dec.ReadUint32() ; |
| |
| } |
| |
| public string GetKeyString() { |
| string hashString = GetHashString() ; |
| return String.Format("{0}:{1}({2})", PackageName, ClassName, hashString) ; |
| } |
| |
| public string GetHashString() { |
| return String.Format("{0:x8}-{1:x8}-{2:x8}-{3:x8}", (long) Hash[0],Hash[1], Hash[2],Hash[3]) ; |
| } |
| |
| public void encode(IEncoder enc) { |
| enc.WriteStr8(PackageName) ; |
| enc.WriteStr8(ClassName) ; |
| enc.WriteUint32(Hash[0]) ; |
| enc.WriteUint32(Hash[1]) ; |
| enc.WriteUint32(Hash[2]) ; |
| enc.WriteUint32(Hash[3]) ; |
| } |
| |
| override public string ToString() { |
| return String.Format("ClassKey: {0}", GetKeyString()) ; |
| } |
| |
| public override int GetHashCode () |
| { |
| return GetKeyString().GetHashCode() ; |
| } |
| |
| public override bool Equals (object obj) |
| { |
| if (obj.GetType().Equals(this.GetType())) { |
| ClassKey other = (ClassKey) obj ; |
| return (other.GetKeyString().Equals(this.GetKeyString())) ; |
| } |
| else { |
| return false ; |
| } |
| } |
| |
| } |
| } |