com.abiquo.nodecollector.domain.collectors.AbstractCollector.java Source code

Java tutorial

Introduction

Here is the source code for com.abiquo.nodecollector.domain.collectors.AbstractCollector.java

Source

/**
 * Abiquo community edition
 * cloud management application for hybrid clouds
 * Copyright (C) 2008-2010 - 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.nodecollector.domain.collectors;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.apache.commons.lang.StringUtils;

import com.abiquo.model.enumerator.HypervisorType;
import com.abiquo.nodecollector.domain.Collector;
import com.abiquo.nodecollector.domain.HypervisorCollector;

/**
 * Base class for all {@link HypervisorCollector} that implements common functionality.
 * 
 * @author ibarrera
 */
public abstract class AbstractCollector implements HypervisorCollector {
    /** IP address of the hypervisor. */
    private String ipAddress;

    /** AIM port **/
    private Integer aimPort;

    @Override
    public HypervisorType getHypervisorType() {
        return this.getClass().getAnnotation(Collector.class).type();
    }

    /**
     * @return the ipAddress
     */
    public String getIpAddress() {
        return ipAddress;
    }

    /**
     * @param ipAddress the ipAddress to set
     */
    public void setIpAddress(final String ipAddress) {
        this.ipAddress = ipAddress;
    }

    /**
     * @return the aimPort
     */
    public Integer getAimPort() {
        return aimPort;
    }

    /**
     * @param aimPort the aimPort to set
     */
    public void setAimPort(Integer aimPort) {
        this.aimPort = aimPort;
    }

    /**
     * Check if two repositories point to the same mount point. It is a helper method that all the
     * Hypervisors can use. It is more complicated than an equals function because one parameter can
     * be informed with the host name of the NFS and the other one with the IP address of the same
     * machine. It also checks if the actualRepository param is accessible.
     * 
     * @param definedRepository NFS string mount point we look for to determine if the host is
     *            Managed.
     * @param actualRepository found NFS repository mounted in the machine.
     * @return true if all the values are actually the same.
     */
    protected Boolean checkNFS(String definedRepository, String actualRepository) {

        if (StringUtils.isEmpty(definedRepository)) {
            return false;
        }

        definedRepository = removeTrailingSlash(definedRepository);
        actualRepository = removeTrailingSlash(actualRepository);

        // The value 'host' of the repository NFS, defined by host:path can be actually
        // an IP address or a Host name
        // And the same for the mounted NFS, can be an IP address or a host name.
        // In order to compare if the defined NFS is the mounted NFS, we always will use
        // the IP address. So, maybe we have
        // to convert the host name to and IP address.
        // Get the IP address of the defined NFS.
        String definedHostOrIp = definedRepository.substring(0, definedRepository.indexOf(":"));
        String definedPath = definedRepository.substring(definedRepository.indexOf(":") + 1);
        String definedNFSIPAddress;

        // convert it to String InetAddress IP
        try {
            definedNFSIPAddress = InetAddress.getByName(definedHostOrIp).getHostAddress();
        } catch (UnknownHostException e) {
            return Boolean.FALSE;
        }

        String actualHostOrIp = actualRepository.substring(0, actualRepository.indexOf(":"));
        String actualPath = actualRepository.substring(actualRepository.indexOf(":") + 1);
        String actualNFSIPAddress;
        try {
            actualNFSIPAddress = InetAddress.getByName(actualHostOrIp).getHostAddress();
        } catch (UnknownHostException e) {
            return false;
        }

        if (definedNFSIPAddress.equalsIgnoreCase(actualNFSIPAddress) && definedPath.equalsIgnoreCase(actualPath)) {
            return Boolean.TRUE;
        } else {
            return Boolean.FALSE;
        }
    }

    /**
     * Removes the trailing slash from the given String.
     * 
     * @param text The String to modify.
     * @return The String without the trailing slash.
     */
    protected static String removeTrailingSlash(final String text) {
        if (text.endsWith("/")) {
            return text.substring(0, text.length() - 1);
        } else {
            return text;
        }
    }

}