org.xlcloud.console.virtualClusters.controllers.wizard.SetupPropertiesBean.java Source code

Java tutorial

Introduction

Here is the source code for org.xlcloud.console.virtualClusters.controllers.wizard.SetupPropertiesBean.java

Source

/*
 * Copyright 2012 AMG.lab, a Bull Group Company
 * 
 * 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.xlcloud.console.virtualClusters.controllers.wizard;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.xlcloud.console.scope.ViewScoped;
import org.xlcloud.console.virtualClusters.controllers.wizard.transformers.EditableParameterToVirtualClusterParameterTransformer;
import org.xlcloud.console.virtualClusters.controllers.wizard.transformers.TemplateParameterToEditableParameterTransformer;
import org.xlcloud.console.virtualClusters.controllers.wizard.utils.EditableVirtualClusterParameter;
import org.xlcloud.console.virtualClusters.controllers.wizard.validation.parameters.ParameterValidator;
import org.xlcloud.console.virtualClusters.controllers.wizard.validation.parameters.ParameterValidatorBuilder;

import org.xlcloud.service.VirtualCluster;
import org.xlcloud.service.VirtualClusterDefinition;
import org.xlcloud.service.api.VirtualClusterDefinitionsApi;
import org.xlcloud.service.heat.template.Template;

/**
 * <p>The controller class, which is used by virtual clusters wizard
 * to manage set of initial virtual cluster parameters.</p>
 * @author "Konrad Krl", AMG.net
 */
@Named
@ViewScoped
public class SetupPropertiesBean implements Serializable {

    private static final long serialVersionUID = -8747771932628831344L;

    private VirtualClusterDefinition virtualClusterDefinition;

    private List<EditableVirtualClusterParameter> editableParameters;

    @Inject
    private VirtualClusterDefinitionsApi definitionsApi;

    @Inject
    private ParameterValidatorBuilder parameterValidatorBuilder;

    /**
     * Returns the collection of virtual cluster parameters mapped to #{@link VirtualCluster.Parameters}
     * @return editable virtual cluster parameters
     */
    public VirtualCluster.Parameters getVirtualClusterParameters() {
        VirtualCluster.Parameters virtualClusterParameters = new VirtualCluster.Parameters();

        CollectionUtils.collect(editableParameters, new EditableParameterToVirtualClusterParameterTransformer(),
                virtualClusterParameters.getParameter());

        return virtualClusterParameters;
    }

    /**
     * Returns the value of {@link #virtualClusterDefinition}
     * @return virtual cluster definition
     */
    public VirtualClusterDefinition getVirtualClusterDefinition() {
        return virtualClusterDefinition;
    }

    /**
     * Sets the value of {@link #virtualClusterDefinition}.
     * Virtual cluster parameters are reinitialized if it is requred.
     * @param newVirtualClusterDefinition virtual cluster definition
     */
    public void setVirtualClusterDefinition(VirtualClusterDefinition newVirtualClusterDefinition) {
        if (ObjectUtils.notEqual(newVirtualClusterDefinition, this.virtualClusterDefinition)) {
            this.virtualClusterDefinition = newVirtualClusterDefinition;
            this.initializeEditableParametersFromVirtualClusterDefinition();
        }
    }

    /**
     * Returns the list of editable virtual cluster parameters
     * @return editable virtual cluster parameters
     */
    public List<EditableVirtualClusterParameter> getEditableParameters() {
        return editableParameters;
    }

    /**
     * Sets the value of {@link #editableParameters}
     * @param editableParameters editable parameters
     */
    public void setEditableParameters(List<EditableVirtualClusterParameter> editableParameters) {
        this.editableParameters = editableParameters;
    }

    /**
     * Returns validator for {@link EditableVirtualClusterParameter}.
     * @param parameter parameter for which to build a validator
     * @return parameter builder.
     */
    public ParameterValidator getParameterValidator(EditableVirtualClusterParameter parameter) {
        return parameterValidatorBuilder.buildValidatorFor(parameter);
    }

    /**
     * Gets the value of {@link #definitionsApi}.
     * @return value of {@link #definitionsApi}
     */
    public VirtualClusterDefinitionsApi getDefinitionsApi() {
        return definitionsApi;
    }

    /**
     * Sets the value of {@link #definitionsApi}.
     * @param definitionsApi - value
     */
    public void setDefinitionsApi(VirtualClusterDefinitionsApi definitionsApi) {
        this.definitionsApi = definitionsApi;
    }

    private void initializeEditableParametersFromVirtualClusterDefinition() {
        editableParameters = new ArrayList<EditableVirtualClusterParameter>();

        if (virtualClusterDefinition != null) {
            CollectionUtils.collect(getTemplateForDefinition().getParameters().getParameter(),
                    new TemplateParameterToEditableParameterTransformer(), editableParameters);
        }
    }

    private Template getTemplateForDefinition() {
        return (virtualClusterDefinition != null
                ? getDefinitionsApi().get(virtualClusterDefinition.getId()).getTemplate()
                : null);
    }
}