Package org.globus.workspace.client_core.actions

Source Code of org.globus.workspace.client_core.actions.Create_Group

/*
* Copyright 1999-2008 University of Chicago
*
* 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.globus.workspace.client_core.actions;

import org.globus.workspace.client_core.Action;
import org.globus.workspace.client_core.ParameterProblem;
import org.globus.workspace.client_core.ExecutionProblem;
import org.globus.workspace.client_core.StubConfigurator;
import org.globus.workspace.common.print.Print;
import org.globus.workspace.client_core.repr.Workspace;
import org.globus.workspace.client_core.repr.Group;
import org.globus.workspace.client_core.repr.Schedule;
import org.globus.workspace.client_core.repr.Networking;
import org.nimbustools.messaging.gt4_0.generated.types.WorkspaceResourceRequestDeniedFault;
import org.nimbustools.messaging.gt4_0.generated.types.WorkspaceSchedulingFault;
import org.nimbustools.messaging.gt4_0.generated.types.WorkspaceMetadataFault;
import org.nimbustools.messaging.gt4_0.generated.types.WorkspaceCreationFault;
import org.nimbustools.messaging.gt4_0.generated.types.WorkspaceCreateResponse_Type;
import org.nimbustools.messaging.gt4_0.generated.types.CreatedWorkspace_Type;
import org.nimbustools.messaging.gt4_0.generated.types.Schedule_Type;
import org.nimbustools.messaging.gt4_0.generated.types.WorkspaceContextualizationFault;
import org.nimbustools.messaging.gt4_0.generated.ensemble.WorkspaceEnsembleFault;
import org.nimbustools.messaging.gt4_0.generated.WorkspaceFactoryPortType;
import org.nimbustools.messaging.gt4_0.generated.metadata.logistics.VirtualNetwork_Type;
import org.nimbustools.messaging.gt4_0.common.InvalidDurationException;
import org.apache.axis.message.addressing.EndpointReferenceType;

import java.util.ArrayList;

/**
* See Action class notes for usage information.
*
* @see Action
*
* @see Create
*
* @see Workspace for notes on what will be populated for you after creation
*
* @see Group for notes on what will be populated for you after creation
*
*/
public class Create_Group extends Create {

    // -------------------------------------------------------------------------
    // CONSTRUCTORS
    // -------------------------------------------------------------------------

    /**
     * @see Create
     */
    public Create_Group(StubConfigurator stubConf,
                        Print debug) {
        super(stubConf, debug);
    }

    /**
     * @see Create
     */
    public Create_Group(EndpointReferenceType epr,
                        StubConfigurator stubConf,
                        Print debug) {
        super(epr, stubConf, debug);
    }

    /**
     * @see Create
     */
    public Create_Group(WorkspaceFactoryPortType factoryPortType,
                        Print debug) {
        super(factoryPortType, debug);
    }


    // -------------------------------------------------------------------------
    // VALIDATE
    // -------------------------------------------------------------------------

    /**
     * Will only accept requests with NodeNumber > 1
     *
     * @throws ParameterProblem issue that will stop creation attempt
     * @see Create#validateDeploymentRequest()
     * @see Create#validateDeploymentRequestNodeNumber()
     */
    protected void validateDeploymentRequestNodeNumber()
            throws ParameterProblem {

        final int nodeNum = (int) this.req.getNodeNumber();
        if (nodeNum < 2) {
            throw new ParameterProblem(
                    "this class only supports group requests, " +
                            "deployment request is asking for " + nodeNum);
        }
    }


    // -------------------------------------------------------------------------
    // EXECUTE
    // -------------------------------------------------------------------------

    protected Object action() throws Exception {
        return this.createGroup();
    }

    /**
     * Create workspace group.
     *
     * @return Group
     * @throws ParameterProblem validation problem
     * @throws ExecutionProblem general problem running (connection errors etc)
     * @throws WorkspaceResourceRequestDeniedFault request can not be fulfilled
     *         because of either lack of current resources or the credential
     *         is not authorized to get requested resources (this includes
     *         less familiar limited resources such as public IP addresses)
     * @throws WorkspaceSchedulingFault issue scheduling the request
     * @throws WorkspaceMetadataFault invalid metadata
     * @throws WorkspaceEnsembleFault problem with ensemble service interaction
     * @throws WorkspaceContextualizationFault problem from context broker
     * @throws WorkspaceCreationFault uncategorized factory request issue
     */
    public Group createGroup() throws ParameterProblem,
                                      ExecutionProblem,
                                      WorkspaceResourceRequestDeniedFault,
                                      WorkspaceSchedulingFault,
                                      WorkspaceMetadataFault,
                                      WorkspaceEnsembleFault,
                                      WorkspaceContextualizationFault,
                                      WorkspaceCreationFault {

        this.validateAll();
        final WorkspaceCreateResponse_Type response = this.createImpl();
        return this.handleGroupCreation(response);
    }

    protected Group handleGroupCreation(
                            WorkspaceCreateResponse_Type response)

            throws ExecutionProblem {

        // length and not-null checked already
        final CreatedWorkspace_Type[] allrefs = response.getCreatedWorkspace();

        final EndpointReferenceType groupEPR = response.getGroupEPR();
        final EndpointReferenceType ensembleEPR = response.getEnsembleEPR();
        final EndpointReferenceType contextEPR = response.getContextEPR();

        final ArrayList workspaceList = new ArrayList(allrefs.length);
        for (int i = 0; i < allrefs.length; i++) {

            final Workspace workspace = new Workspace();

            // these things are not based on any information returned
            try {
                this.populateInitialRepr(workspace);
            } catch (ParameterProblem e) {
                throw new ExecutionProblem(
                            "unexpected problem: " + e.getMessage(), e);
            }
           
            final Schedule_Type xmlSchedule = allrefs[i].getSchedule();
            if (xmlSchedule == null) {
                throw new ExecutionProblem(
                        "(?) no schedule in factory response");
            }

            try {
                workspace.setInitialSchedule(new Schedule(xmlSchedule));
                // this is intentionally a separate object:
                workspace.setCurrentSchedule(new Schedule(xmlSchedule));
            } catch (InvalidDurationException e) {
                throw new ExecutionProblem(
                        "(?) invalid data in factory response: " +
                                e.getMessage(), e);
            }

            final VirtualNetwork_Type xmlNetwork = allrefs[i].getNetworking();
            if (xmlNetwork != null) {
                workspace.setCurrentNetworking(new Networking(xmlNetwork));
            }

            workspace.setEpr(allrefs[i].getEpr());
            workspace.setGroupMemberEPR(groupEPR);
            workspace.setEnsembleMemberEPR(ensembleEPR);
            workspace.setContextMemberEPR(contextEPR);

            workspaceList.add(workspace);
        }

        final Group group = new Group();

        group.setGroupEPR(groupEPR);
        group.setEnsembleMemberEPR(ensembleEPR);
        group.setContextMemberEPR(contextEPR);

        final Workspace[] workspaces =
                (Workspace[]) workspaceList.toArray(
                                    new Workspace[workspaceList.size()]);

        group.setWorkspaces(workspaces);

        return group;
    }
   
}
TOP

Related Classes of org.globus.workspace.client_core.actions.Create_Group

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.