org.cloudifysource.shell.validators.NicAddressValidator.java Source code

Java tutorial

Introduction

Here is the source code for org.cloudifysource.shell.validators.NicAddressValidator.java

Source

/*******************************************************************************
 * Copyright (c) 2013 GigaSpaces Technologies Ltd. All rights reserved
 * 
 * Licensed 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 org.cloudifysource.shell.validators;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.UnknownHostException;

import net.jini.discovery.Constants;

import org.apache.commons.lang.StringUtils;
import org.cloudifysource.dsl.internal.CloudifyErrorMessages;
import org.cloudifysource.dsl.utils.IPUtils;
import org.cloudifysource.shell.exceptions.CLIValidationException;

/**
 * This class validates the a server socket can be created on the given NIC address.
 * If no NIC address was specified, the local host address is used.
 * @author noak
 * @since 2.7.0
 */
public class NicAddressValidator implements CloudifyMachineValidator {

    private String nicAddress;

    /**
     * Setter for nicAddress.
     * @param nicAddress The NIC address to validate, or null to use the local host.
     */
    public void setNicAddress(final String nicAddress) {
        this.nicAddress = nicAddress;
    }

    @Override
    public void validate() throws CLIValidationException {

        ServerSocket serverSocket = null;
        try {
            if (StringUtils.isBlank(nicAddress)) {
                nicAddress = Constants.getHostAddress();
            }

            if (StringUtils.isBlank(nicAddress)) {
                throw new IllegalArgumentException("NIC Address is empty");
            }
            IPUtils.testOpenServerSocket(nicAddress);
        } catch (UnknownHostException uhe) {
            // thrown if the host could not be determined.
            throw new CLIValidationException(uhe, 121,
                    CloudifyErrorMessages.NIC_VALIDATION_ABORTED_UNKNOWN_HOST.getName(), uhe.getMessage());
        } catch (IOException ioe) {
            // thrown if an I/O error occurs when creating the socket or connecting to it.
            throw new CLIValidationException(ioe, 122,
                    CloudifyErrorMessages.NIC_VALIDATION_ABORTED_IO_ERROR.getName(), nicAddress, ioe.getMessage());
        } catch (SecurityException se) {
            // thrown if a security manager exists and doesn't allow the operation.
            throw new CLIValidationException(se, 123,
                    CloudifyErrorMessages.NIC_VALIDATION_ABORTED_NO_PERMISSION.getName(), se.getMessage());
        } finally {
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (Exception e) {
                    //ignore
                }
            }
        }

    }

}