com.abiquo.abiserver.pojo.service.RemoteService.java Source code

Java tutorial

Introduction

Here is the source code for com.abiquo.abiserver.pojo.service.RemoteService.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.abiserver.pojo.service;

import java.net.URI;
import java.net.URISyntaxException;

import org.apache.commons.lang.StringUtils;
import org.apache.wink.common.internal.utils.UriHelper;

import com.abiquo.abiserver.business.hibernate.pojohb.service.RemoteServiceHB;
import com.abiquo.abiserver.pojo.IPojo;
import com.abiquo.server.core.infrastructure.RemoteServiceDto;

/**
 * The Class RemoteService represents a remotely manageable service
 */
public class RemoteService implements IPojo<RemoteServiceHB> {

    /** The id remote service. */
    private int idRemoteService;

    /** The remote service Type. */
    private RemoteServiceType remoteServiceType;

    /** The id data center. */
    private int idDataCenter;

    /** The uri. */
    private String uri;

    /** Status: service availability */
    private Integer status;

    /** URI's protocol */
    private String protocol;

    /** URI's domain name or IP */
    private String domainName;

    /** URI's port number */
    private Integer port;

    /** URI's service mapping */
    private String serviceMapping;

    public Integer getStatus() {
        return status;
    }

    public void setStatus(final Integer status) {
        this.status = status;
    }

    public String getProtocol() {
        return protocol;
    }

    public void setProtocol(final String protocol) {
        this.protocol = protocol;
    }

    public String getDomainName() {
        return domainName;
    }

    public void setDomainName(final String domainName) {
        this.domainName = domainName;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(final Integer port) {
        this.port = port;
    }

    public String getServiceMapping() {
        return serviceMapping;
    }

    public void setServiceMapping(final String serviceMapping) {
        this.serviceMapping = serviceMapping;
    }

    /**
     * Instantiates a new remote service.
     */
    public RemoteService() {
        this.idRemoteService = 0;
        this.idDataCenter = 0;
        this.remoteServiceType = new RemoteServiceType();
        this.uri = "";
        this.protocol = "http://";
        this.domainName = "";
        this.port = 0;
        this.serviceMapping = "";
        this.status = 0;
    }

    /**
     * Instantiates a new remote service.
     * 
     * @param remoteService the remote service
     */
    public RemoteService(final RemoteService remoteService) {
        idRemoteService = remoteService.getIdRemoteService();
        idDataCenter = remoteService.getIdDataCenter();
        remoteServiceType = remoteService.getRemoteServiceType();
        uri = remoteService.getUri();
        protocol = remoteService.getProtocol();
        domainName = remoteService.getDomainName();
        port = remoteService.getPort();
        serviceMapping = remoteService.getServiceMapping();
        status = remoteService.getStatus();
    }

    /**
     * Gets the id data center.
     * 
     * @return the id data center
     */
    public int getIdDataCenter() {
        return idDataCenter;
    }

    /**
     * Sets the id data center.
     * 
     * @param idDataCenter the new id data center
     */
    public void setIdDataCenter(final int idDataCenter) {
        this.idDataCenter = idDataCenter;
    }

    /**
     * Gets the id remote service.
     * 
     * @return the id remote service
     */
    public int getIdRemoteService() {
        return idRemoteService;
    }

    /**
     * Sets the id remote service.
     * 
     * @param idRemoteService the new id remote service
     */
    public void setIdRemoteService(final int idRemoteService) {
        this.idRemoteService = idRemoteService;
    }

    /**
     * Gets the remote service type.
     * 
     * @return the remote service type
     */
    public RemoteServiceType getRemoteServiceType() {
        return remoteServiceType;
    }

    /**
     * Sets the remote service type.
     * 
     * @param remoteServiceType the new remote service type
     */
    public void setRemoteServiceType(final RemoteServiceType remoteServiceType) {
        this.remoteServiceType = remoteServiceType;
    }

    /**
     * Remote service URI must always end with a /
     */
    public String getUri() {
        if (StringUtils.isEmpty(uri) || modifiedUri()) {
            uri = getFullUri(protocol, domainName, port, serviceMapping);
        }

        return uri;
    }

    /**
     * Sets the uri.
     * 
     * @param uri the new uri
     */
    public void setUri(final String uri) {
        this.uri = uri;
        URI u = URI.create(uri);

        this.protocol = fixProtocol(u.getScheme());
        this.domainName = u.getHost();
        this.port = u.getPort();
        if (port == -1) {
            port = 80;
        }
        this.serviceMapping = u.getPath();
        if (serviceMapping.startsWith("/")) {
            serviceMapping = serviceMapping.replaceFirst("/", "");
        }
    }

    public static String getFullUri(final String protocol, final String domainName, final Integer port,
            final String serviceMapping) {
        String domainHost = domainName + (port != null ? ":" + port : "");

        String fullURL = StringUtils.join(new String[] { fixProtocol(protocol), domainHost });

        String serviceMappingTrim = serviceMapping.trim();

        if (!StringUtils.isEmpty(serviceMappingTrim) && !(serviceMappingTrim.split(" ").length > 1)) {
            if (!serviceMappingTrim.equals("dhcp")) {
                fullURL = UriHelper.appendPathToBaseUri(fullURL, serviceMappingTrim);
            }
        }

        return fullURL;
    }

    /*
     * (non-Javadoc)
     * @see com.abiquo.abiserver.pojo.IPojo#toPojoHB()
     */
    @Override
    public RemoteServiceHB toPojoHB() {
        RemoteServiceHB remoteServiceHB = new RemoteServiceHB();
        remoteServiceHB.setIdDataCenter(this.getIdDataCenter());
        remoteServiceHB.setIdRemoteService(this.getIdRemoteService());
        remoteServiceHB.setStatus(this.getStatus());
        remoteServiceHB.setUri(this.getUri());
        remoteServiceHB.setRemoteServiceType(remoteServiceType.toEnum());
        return remoteServiceHB;
    }

    private static String fixProtocol(String protocol) {
        if (!protocol.endsWith("://")) {
            protocol += "://";
        }
        return protocol;
    }

    private boolean modifiedUri() {
        try {
            URI u = new URI(uri);

            return !fixProtocol(u.getScheme()).equals(fixProtocol(protocol)) || !u.getHost().equals(domainName)
                    || u.getPort() != port || !StringUtils.isEmpty(u.getPath())
                            && !u.getPath().replaceFirst("/", "").equals(serviceMapping);
        } catch (URISyntaxException e) {
            return true;
        } catch (NullPointerException e) {
            return true;
        }
    }

    public boolean checkUri() {
        fixProtocol(this.protocol);
        return !this.protocol.isEmpty() && !this.domainName.isEmpty() && this.port != null;
    }

    public static RemoteService create(final RemoteServiceDto dto, final int datacenterId) {
        RemoteService remoteService = new RemoteService();
        remoteService.setIdRemoteService(dto.getId());
        remoteService.setIdDataCenter(datacenterId);
        remoteService.setUri(dto.getUri());

        remoteService.setStatus(dto.getStatus());

        remoteService.setRemoteServiceType(new com.abiquo.abiserver.pojo.service.RemoteServiceType(dto.getType()));

        return remoteService;
    }

}