CLOUDSTACK-8590 - Refactoring NiciraNVP resource - Adding the NiciraNvpWrapper - This class will keep track of all Wrappers of the Nicira NVP Plugin
Signed-off-by: wilderrodrigues <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/fc478604 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/fc478604 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/fc478604 Branch: refs/heads/master Commit: fc478604e8f51536847ee3cb8e955535dab2013e Parents: 9463356 Author: wilderrodrigues <[email protected]> Authored: Mon Jun 22 15:57:15 2015 +0200 Committer: wilderrodrigues <[email protected]> Committed: Wed Jul 1 15:04:56 2015 +0200 ---------------------------------------------------------------------- .../resource/NiciraNvpRequestWrapper.java | 76 ++++++++++++++++++++ 1 file changed, 76 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fc478604/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpRequestWrapper.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpRequestWrapper.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpRequestWrapper.java new file mode 100644 index 0000000..70eb943 --- /dev/null +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpRequestWrapper.java @@ -0,0 +1,76 @@ +// +// 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. +// +package com.cloud.network.resource; + +import java.util.Hashtable; +import java.util.Set; + +import org.reflections.Reflections; + +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.Command; +import com.cloud.resource.CommandWrapper; +import com.cloud.resource.RequestWrapper; +import com.cloud.resource.ServerResource; + +public class NiciraNvpRequestWrapper extends RequestWrapper { + + private static NiciraNvpRequestWrapper instance; + + static { + instance = new NiciraNvpRequestWrapper(); + } + + Reflections baseWrappers = new Reflections("com.cloud.network.resource.wrapper"); + @SuppressWarnings("rawtypes") + Set<Class<? extends CommandWrapper>> baseSet = baseWrappers.getSubTypesOf(CommandWrapper.class); + + private NiciraNvpRequestWrapper() { + init(); + } + + @SuppressWarnings("rawtypes") + private void init() { + // NiciraNvpResource commands + final Hashtable<Class<? extends Command>, CommandWrapper> libvirtCommands = processAnnotations(baseSet); + + resources.put(NiciraNvpResource.class, libvirtCommands); + } + + public static NiciraNvpRequestWrapper getInstance() { + return instance; + } + + @SuppressWarnings({"rawtypes" }) + @Override + public Answer execute(final Command command, final ServerResource serverResource) { + final Class<? extends ServerResource> resourceClass = serverResource.getClass(); + + final Hashtable<Class<? extends Command>, CommandWrapper> resourceCommands = retrieveResource(command, resourceClass); + + CommandWrapper<Command, Answer, ServerResource> commandWrapper = retrieveCommands(command.getClass(), resourceCommands); + + while (commandWrapper == null) { + //Could not find the command in the given resource, will traverse the family tree. + commandWrapper = retryWhenAllFails(command, resourceClass, resourceCommands); + } + + return commandWrapper.execute(command, serverResource); + } +} \ No newline at end of file
