Package com.abiquo.ssm.plugin

Source Code of com.abiquo.ssm.plugin.AbstractStoragePlugin

/**
* The Abiquo Platform
* Cloud management application for hybrid clouds
* Copyright (C) 2008 - Abiquo Holdings S.L.
*
* This application is free software; you can redistribute it and/or
* modify it under the terms of the GNU LESSER GENERAL PUBLIC
* LICENSE as published by the Free Software Foundation under
* version 3 of the License
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* LESSER GENERAL PUBLIC LICENSE v.3 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package com.abiquo.ssm.plugin;

import java.lang.reflect.Method;

import com.abiquo.ssm.exception.PluginException;
import com.abiquo.ssm.model.metadata.StoragePluginMetadata;
import com.abiquo.ssm.plugin.annotations.Plugin;
import com.abiquo.ssm.plugin.annotations.Provides;
import com.abiquo.ssm.plugin.annotations.UnsupportedOp;

/**
* Base class for all storage plugins.
*
* @author Ignasi Barrera
*/
public abstract class AbstractStoragePlugin implements StoragePlugin
{

    @Override
    public StoragePluginMetadata getPluginMetadata() throws PluginException
    {
        if (!this.getClass().isAnnotationPresent(Plugin.class))
        {
            throw new PluginException("Missing @Plugin annotation in " + this.getClass().getName());
        }

        Plugin pluginInfo = this.getClass().getAnnotation(Plugin.class);

        if (pluginInfo.type() == null)
        {
            throw new PluginException("Plugin type can not be null in " + this.getClass().getName());
        }

        StoragePluginMetadata metadata = new StoragePluginMetadata();
        metadata.setDefaultIscsiPort(pluginInfo.defaultIscsiPort());
        metadata.setDefaultManagementPort(pluginInfo.defaultManagementPort());
        metadata.setRequiresAuthentication(pluginInfo.requiresAuthentication());
        metadata.setType(pluginInfo.type());

        try
        {
            Method[] methods = StoragePlugin.class.getMethods();
            for (Method methodDefinition : methods)
            {
                if (methodDefinition.isAnnotationPresent(Provides.class))
                {
                    Method implMethod =
                        this.getClass().getMethod(methodDefinition.getName(),
                            methodDefinition.getParameterTypes());

                    if (!implMethod.isAnnotationPresent(UnsupportedOp.class))
                    {
                        Provides provides = methodDefinition.getAnnotation(Provides.class);
                        metadata.getSupportedOperations().add(provides.value());
                    }
                }
            }
        }
        catch (Exception ex)
        {
            throw new PluginException("Could not get the list of supported operations for plugin: "
                + this.getClass().getName());
        }

        return metadata;
    }

}
TOP

Related Classes of com.abiquo.ssm.plugin.AbstractStoragePlugin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.