Package org.globus.workspace.client_core.actions

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

/*
* 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.apache.axis.message.addressing.EndpointReferenceType;
import org.globus.workspace.client_core.ExecutionProblem;
import org.globus.workspace.client_core.ParameterProblem;
import org.globus.workspace.client_core.StubConfigurator;
import org.globus.workspace.client_core.WSAction_Ensemble;
import org.globus.workspace.client_core.repr.Networking;
import org.globus.workspace.client_core.repr.Schedule;
import org.globus.workspace.client_core.repr.State;
import org.globus.workspace.client_core.repr.Workspace;
import org.globus.workspace.client_core.utils.RMIUtils;
import org.globus.workspace.client_core.utils.EPRUtils;
import org.globus.workspace.common.print.Print;
import org.nimbustools.messaging.gt4_0.common.CommonUtil;
import org.nimbustools.messaging.gt4_0.generated.ensemble.WorkspaceEnsembleFault;
import org.nimbustools.messaging.gt4_0.generated.ensemble.WorkspaceEnsemblePortType;
import org.nimbustools.messaging.gt4_0.generated.metadata.logistics.VirtualNetwork_Type;
import org.nimbustools.messaging.gt4_0.generated.types.OneReport_Type;
import org.nimbustools.messaging.gt4_0.generated.types.ReportResponse_Type;
import org.nimbustools.messaging.gt4_0.generated.types.ReportSend_Type;
import org.nimbustools.messaging.gt4_0.generated.types.Schedule_Type;
import org.nimbustools.messaging.gt4_0.generated.types.WorkspaceUnknownFault;
import org.nimbustools.messaging.gt4_0.generated.types.CurrentState_Enumeration;

import java.rmi.RemoteException;
import java.util.Calendar;
import java.text.DateFormat;

public class Ensemble_Report extends WSAction_Ensemble {

    // -------------------------------------------------------------------------
    // STATIC VARIABLES
    // -------------------------------------------------------------------------

    private static final DateFormat localFormat =
            DateFormat.getDateTimeInstance();

    // -------------------------------------------------------------------------
    // INSTANCE VARIABLES
    // -------------------------------------------------------------------------

    protected boolean responseOnlyIfError;
    protected CurrentState_Enumeration returnOnlyIfAll;

    private static final Workspace[] EMPTY_RESPONSE = new Workspace[0];

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

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

    /**
     * @see WSAction_Ensemble
     */
    public Ensemble_Report(WorkspaceEnsemblePortType ensemblePortType,
                           Print debug) {
        super(ensemblePortType, debug);
    }

    // -------------------------------------------------------------------------
    // GET/SET OPTIONS
    // -------------------------------------------------------------------------

    public boolean isResponseOnlyIfError() {
        return this.responseOnlyIfError;
    }

    public void setResponseOnlyIfError(boolean responseOnlyIfError) {
        this.responseOnlyIfError = responseOnlyIfError;
    }

    public CurrentState_Enumeration getReturnOnlyIfAll() {
        return this.returnOnlyIfAll;
    }

    public void setReturnOnlyIfAll(CurrentState_Enumeration returnOnlyIfAll) {
        this.returnOnlyIfAll = returnOnlyIfAll;
    }

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

    /**
     * Calls report()
     *
     * @return Workspace[], never null (may be empty)
     * @throws Exception see report()
     * @see #report()
     */
    protected Object action() throws Exception {
        this.report();
        return null;
    }

    /**
     * Calls 'report' on ensemble resource.
     *
     * @throws org.globus.workspace.client_core.ParameterProblem validation problem
     * @throws org.globus.workspace.client_core.ExecutionProblem general problem running (connection errors etc)
     * @throws WorkspaceEnsembleFault severe
     * @throws WorkspaceUnknownFault gone
     * @return Workspace[] result, never null (may be empty)
     */
    public Workspace[] report() throws ParameterProblem,
                                 ExecutionProblem,
                                 WorkspaceUnknownFault,
                                 WorkspaceEnsembleFault {

        this.validateAll();

        final ReportResponse_Type response;
        try {
            final ReportSend_Type send = new ReportSend_Type();
            send.setReturnOnlyIfErrorPresent(this.responseOnlyIfError);
            if (this.returnOnlyIfAll != null) {
                send.setReturnOnlyIfAllAtState(this.returnOnlyIfAll);
            }
            final String now =
                    localFormat.format(Calendar.getInstance().getTime());
            this.pr.debugln("Querying for report @ " + now);
            response = ((WorkspaceEnsemblePortType) this.portType).report(send);
        } catch (WorkspaceEnsembleFault e) {
            throw e;
        } catch (RemoteException e) {
            throw RMIUtils.generalRemoteException(e);
        }

        if (response == null) {
            throw new ExecutionProblem("null report response?");
        }

        final OneReport_Type[] reports = response.getReport();
        if (reports == null) {
            return EMPTY_RESPONSE;
        }

        final Workspace[] ret = new Workspace[reports.length];
        for (int i = 0; i < reports.length; i++) {
            if (reports[i] == null) {
                throw new ExecutionProblem("null report entry?");
            }
            try {
                ret[i] = this.convert(reports[i]);
            } catch (Exception e) {
                throw new ExecutionProblem(e.getMessage(), e); // ...
            }
        }

        return ret;
    }

    protected Workspace convert(OneReport_Type report) throws Exception {
       
        if (report == null) {
            throw new IllegalArgumentException("report may not be null");
        }

        final Workspace workspace = new Workspace();

        final EndpointReferenceType anepr = report.getEpr();

        final State state =
                State.fromCurrentState_Type(report.getCurrentState());

        if (anepr == null) {
            this.pr.debugln("Workspace # NONE");
        } else {
            this.pr.debugln("Workspace # " +
                                EPRUtils.getIdFromEPR(report.getEpr()));
        }

        if (state == null) {
            this.pr.debugln("  - state: NONE");
        } else {
            this.pr.debugln("  - state: " + state.getState());
            final Exception e = state.getProblem();
            if (e != null) {
                this.pr.debugln("  - error: " +
                        CommonUtil.genericExceptionMessageWrapper(e));
            }
        }

        workspace.setEpr(anepr);
        workspace.setCurrentState(state);

        final Schedule_Type xmlSchedule = report.getSchedule();
        if (xmlSchedule != null) {
            workspace.setCurrentSchedule(new Schedule(xmlSchedule));
        }

        final VirtualNetwork_Type xmlNetwork = report.getNetworking();
        if (xmlNetwork != null) {
            workspace.setCurrentNetworking(new Networking(xmlNetwork));
        }

        return workspace;
    }
}
TOP

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

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.