&{MainRegistry.java} /* * * 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. * */ /* * This file is auto-generated by ${GENERATOR} - do not modify. * Supported AMQP versions: %{VLIST} * ${major}-${minor} */ package org.apache.qpid.framing; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.mina.common.ByteBuffer; public class MainRegistry { private static final HashMap classIDMethodIDVersionBodyMap = new HashMap(); private static final Logger _log = LoggerFactory.getLogger(MainRegistry.class); private static final int DEFAULT_MINOR_VERSION_COUNT = 10; private static final int DEFAULT_MAJOR_VERSION_COUNT = 10; private static VersionSpecificRegistry[][] _specificRegistries = new VersionSpecificRegistry[DEFAULT_MAJOR_VERSION_COUNT][]; static { %{CLIST} ${reg_map_put_method} configure(); } public static AMQMethodBody get(short classID, short methodID, byte major, byte minor, ByteBuffer in, long size) throws AMQFrameDecodingException { VersionSpecificRegistry registry = getVersionSpecificRegistry(major, minor); AMQMethodBodyInstanceFactory bodyFactory = registry.getMethodBody(classID,methodID); if (bodyFactory == null) { throw new AMQFrameDecodingException(null, "Unable to find a suitable decoder for class " + classID + " and method " + methodID + " in AMQP version " + major + "-" + minor + ".", null); } return bodyFactory.newInstance(major, minor, in, size); } public static VersionSpecificRegistry getVersionSpecificRegistry(ProtocolVersion pv) { return getVersionSpecificRegistry(pv.getMajorVersion(), pv.getMinorVersion()); } public static VersionSpecificRegistry getVersionSpecificRegistry(byte major, byte minor) { try { return _specificRegistries[(int)major][(int)minor]; } catch (IndexOutOfBoundsException e) { return null; } catch (NullPointerException e) { return null; } } private static VersionSpecificRegistry addVersionSpecificRegistry(byte major, byte minor) { VersionSpecificRegistry[][] registries = _specificRegistries; if(major >= registries.length) { _specificRegistries = new VersionSpecificRegistry[(int)major + 1][]; System.arraycopy(registries, 0, _specificRegistries, 0, registries.length); registries = _specificRegistries; } if(registries[major] == null) { registries[major] = new VersionSpecificRegistry[ minor >= DEFAULT_MINOR_VERSION_COUNT ? minor + 1 : DEFAULT_MINOR_VERSION_COUNT ]; } else if(registries[major].length <= minor) { VersionSpecificRegistry[] minorArray = registries[major]; registries[major] = new VersionSpecificRegistry[ minor + 1 ]; System.arraycopy(minorArray, 0, registries[major], 0, minorArray.length); } VersionSpecificRegistry newRegistry = new VersionSpecificRegistry(major,minor); registries[major][minor] = newRegistry; return newRegistry; } private static void registerMethod(short classID, short methodID, byte major, byte minor, AMQMethodBodyInstanceFactory instanceFactory ) { VersionSpecificRegistry registry = getVersionSpecificRegistry(major,minor); if(registry == null) { registry = addVersionSpecificRegistry(major,minor); } registry.registerMethod(classID, methodID, instanceFactory); } private static void configure() { for(int i = 0 ; i < _specificRegistries.length; i++) { VersionSpecificRegistry[] registries = _specificRegistries[i]; if(registries != null) { for(int j = 0 ; j < registries.length; j++) { VersionSpecificRegistry registry = registries[j]; if(registry != null) { registry.configure(); } } } } } }