/* * * 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.Collections.Generic ; using org.apache.qpid.transport; using org.apache.qpid.transport.codec ; using log4net ; namespace org.apache.qpid.console { /** * Metadata that describes the mapping of a class to a QMF Object */ public class SchemaClass { public static int CLASS_KIND_TABLE = 1 ; public static int CLASS_KIND_EVENT = 2 ; public static ILog log = LogManager.GetLogger(typeof(SchemaClass)) ; public ClassKey Key {get;set;} public ClassKey SuperType {get;set;} public int Kind {get;set;} public List Methods = new List() ; public List Arguments = new List() ; public List Properties = new List() ; public List Statistics = new List() ; public string ClassName { get { return Key.ClassName;}} public string PackageName { get { return Key.PackageName;}} public string ClassKeyString { get { return Key.GetKeyString();}} protected Session Session {get;set;} public SchemaClass(int kind, ClassKey key, IDecoder dec, Session session) { log.Debug(String.Format("New schema class {0}", key)) ; Kind = kind ; Session = session ; this.Key = key ; bool hasSupertype = false ; if (kind == CLASS_KIND_TABLE) { int propCount = dec.ReadUint16() ; int statCount = dec.ReadUint16() ; int methodCount = dec.ReadUint16() ; if (hasSupertype) { SuperType = new ClassKey(dec) ; } for(int x = 0 ; x < propCount ; x++) { Properties.Add(new SchemaProperty(dec)) ; } for(int x = 0 ; x < statCount ; x++) { Statistics.Add(new SchemaStatistic(dec)) ; } for(int x = 0 ; x < methodCount ; x++) { Methods.Add(new SchemaMethod(dec)) ; } } if (kind == CLASS_KIND_EVENT) { int argCount = dec.ReadUint16() ; if (hasSupertype) { SuperType = new ClassKey(dec) ; } for(int x = 0 ; x < argCount ; x++) { Arguments.Add(new SchemaArgument(dec, false)) ; } } } public SchemaMethod GetMethod(string name) { SchemaMethod returnValue = null ; foreach(SchemaMethod method in Methods) { if (method.Name.Equals(name)) { returnValue = method ; break ; } } return returnValue ; } public List GetAllProperties() { if (SuperType == null) { return Properties ; } else { List allProperties = new List(Properties) ; allProperties.AddRange(Session.GetSchema(SuperType).GetAllProperties()) ; return allProperties ; } } public List GetAllStatistics() { if (SuperType == null) { return Statistics ; } else { List allStats = new List(Statistics) ; allStats.AddRange(Session.GetSchema(SuperType).GetAllStatistics()) ; return allStats ; } } public List GetAllMethods() { if (SuperType == null) { return Methods ; } else { List allMethods = new List(Methods) ; allMethods.AddRange(Session.GetSchema(SuperType).GetAllMethods()) ; return allMethods ; } } public bool HasSuperType() { return SuperType != null ; } } }