eu.planets_project.tb.gui.backing.exp.view.EmulationInspector.java Source code

Java tutorial

Introduction

Here is the source code for eu.planets_project.tb.gui.backing.exp.view.EmulationInspector.java

Source

/*******************************************************************************
 * Copyright (c) 2007, 2010 The Planets Project Partners.
 *
 * All rights reserved. This program and the accompanying 
 * materials are made available under the terms of the 
 * Apache License, Version 2.0 which accompanies 
 * this distribution, and is available at 
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 *******************************************************************************/
/**
 * 
 */
package eu.planets_project.tb.gui.backing.exp.view;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.faces.context.FacesContext;
import javax.xml.ws.Service;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import eu.planets_project.services.datatypes.Property;
import eu.planets_project.services.view.CreateView;
import eu.planets_project.services.view.ViewStatus;
import eu.planets_project.tb.api.model.Experiment;
import eu.planets_project.tb.api.persistency.ExperimentPersistencyRemote;
import eu.planets_project.tb.api.properties.ManuallyMeasuredProperty;
import eu.planets_project.tb.gui.UserBean;
import eu.planets_project.tb.gui.backing.data.DigitalObjectCompare;
import eu.planets_project.tb.gui.backing.exp.ExperimentInspector;
import eu.planets_project.tb.gui.backing.exp.utils.ManualMeasurementBackingBean;
import eu.planets_project.tb.gui.util.JSFUtil;
import eu.planets_project.tb.impl.model.exec.BatchExecutionRecordImpl;
import eu.planets_project.tb.impl.model.exec.ExecutionRecordImpl;
import eu.planets_project.tb.impl.model.measure.MeasurementAgent;
import eu.planets_project.tb.impl.model.measure.MeasurementEventImpl;
import eu.planets_project.tb.impl.model.measure.MeasurementAgent.AgentType;
import eu.planets_project.tb.impl.persistency.ExperimentPersistencyImpl;
import eu.planets_project.tb.impl.properties.ManuallyMeasuredPropertyHandlerImpl;

/**
 * 
 * A request-scope bean that handles inspection of a view.  The URLs and JSF links pass an
 * f:param to this bean, which looks up the service and makes it available to the page.
 * 
 * @author <a href="mailto:Andrew.Jackson@bl.uk">Andy Jackson</a>
 *
 */
public class EmulationInspector {
    /** */
    private static final Log log = LogFactory.getLog(EmulationInspector.class);

    private String experimentId;

    private String sessionId;

    private Experiment experiment;

    private ViewResultBean vrb;

    private CreateView viewService = null;

    private ViewStatus.Status viewStatus = ViewStatus.Status.UNKNOWN;

    private String newManVal;

    /**
     * @return the experimentId
     */
    public String getExperimentId() {
        return experimentId;
    }

    /**
     * @param experimentId the experimentId to set
     */
    public void setExperimentId(String experimentId) {
        this.experimentId = experimentId;
        log.info("Setting eid = " + experimentId);
        // Lookup experiment and add
        ExperimentPersistencyRemote edao = ExperimentPersistencyImpl.getInstance();
        this.experiment = edao.findExperiment(Long.parseLong(this.experimentId));
        this.vrb = null;
    }

    /**
     * @return the sessionId
     */
    public String getSessionId() {
        return sessionId;
    }

    /**
     * @param sessionId the sessionId to set
     */
    public void setSessionId(String sessionId) {
        log.info("Setting sid = " + sessionId);
        this.sessionId = sessionId;
        this.vrb = null;
    }

    /**
     * @return
     */
    public boolean isValid() {
        // Check the session for a view URL:
        if (this.getViewResultBean() == null) {
            return false;
        }
        return true;
    }

    /**
     * @return
     */
    public ViewResultBean getViewResultBean() {
        if (this.vrb == null)
            this.initViewResultBean();
        return this.vrb;
    }

    /** */
    private void initViewResultBean() {
        if (this.experiment == null)
            return;
        if (this.sessionId == null || "".equals(this.sessionId)) {
            return;
        }
        // Look up this session id in the experiment:
        List<ExecutionRecordImpl> executionRecords = new ArrayList<ExecutionRecordImpl>();
        for (BatchExecutionRecordImpl batch : experiment.getExperimentExecutable().getBatchExecutionRecords()) {
            for (ExecutionRecordImpl run : batch.getRuns()) {
                executionRecords.add(run);
            }
        }
        List<ViewResultBean> vrbs = ViewResultBean.createResultsFromExecutionRecords(executionRecords);
        // Look for a match:
        for (ViewResultBean vrb : vrbs) {
            if (this.sessionId.equals(vrb.getSessionId())) {
                this.vrb = vrb;
            }
        }

        // Also fire up the connection to the service:
        try {
            Service serv = Service.create(vrb.getEndpoint(), CreateView.QNAME);
            this.viewService = serv.getPort(CreateView.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @return
     */
    public String getViewTitle() {
        if (this.isValid()) {
            return "Planets Testbed Emulation Experiment: " + this.getExperimentName();
        } else {
            return "Planets Testbed Emulation Experiment: No view found.";
        }
    }

    /**
     * @return
     */
    public String getExperimentName() {
        if (this.isValid()) {
            return experiment.getExperimentSetup().getBasicProperties().getExperimentName();
        } else {
            return "";
        }
    }

    /**
     * @return
     */
    public ViewStatus.Status getViewStatus() {
        if (this.viewService == null) {
            this.viewStatus = ViewStatus.Status.UNKNOWN;
            return this.viewStatus;
        }
        // Otherwise, probe:
        try {
            ViewStatus status = this.viewService.getViewStatus(this.sessionId);
            this.viewStatus = status.getState();
            return this.viewStatus;
        } catch (Exception e) {
            e.printStackTrace();
            this.viewStatus = ViewStatus.Status.UNKNOWN;
            return this.viewStatus;
        }

    }

    /**
     * Controller to issue a shutdown request.
     * @return
     */
    public String doShutdownAction() {
        log.info("Issuing shutdown request on session" + this.sessionId);
        return "success";
    }

    /**
     * @return
     */
    public boolean isViewActive() {
        return this.viewStatus.equals(ViewStatus.Status.ACTIVE);
    }

    /**
     * @return
     */
    public boolean isViewInactive() {
        return this.viewStatus.equals(ViewStatus.Status.INACTIVE);
    }

    /**
     * @return
     */
    public boolean isViewUnknown() {
        return this.viewStatus.equals(ViewStatus.Status.UNKNOWN);
    }

    /**
     * @return the propertyPanelEnabled
     */
    public boolean isPropertyPanelEnabled() {
        Boolean enab = (Boolean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
                .get("ManualPropertyPanelEnabled");
        if (enab == null)
            return false;
        return enab;
    }

    /**
     * @param propertyPanelEnabled the propertyPanelEnabled to set
     */
    public void setPropertyPanelEnabled(boolean propertyPanelEnabled) {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("ManualPropertyPanelEnabled",
                propertyPanelEnabled);
    }

    /**
     * @return
     */
    private ExecutionRecordImpl getExecutionRecordForSessionId() {
        ExperimentInspector ei = (ExperimentInspector) JSFUtil.getManagedObject("ExperimentInspector");
        Experiment exp = ei.getExperimentBean().getExperiment();
        if (this.isValid() && exp.getExperimentExecutable().getNumBatchExecutionRecords() > 0) {
            for (ExecutionRecordImpl exec : exp.getExperimentExecutable().getBatchExecutionRecords().iterator()
                    .next().getRuns()) {
                ViewResultBean vrb = ViewResultBean.createViewResultBeanFromExecutionRecord(exec);
                if (vrb != null) {
                    if (this.getSessionId().equals(vrb.getSessionId())) {
                        return exec;
                    }
                }
            }
        }
        return null;
    }

    /**
     * @return
     */
    public MeasurementEventImpl getManualMeasurementEvent() {
        MeasurementEventImpl me = null;
        ExecutionRecordImpl res = this.getExecutionRecordForSessionId();
        if (res == null)
            return null;
        Set<MeasurementEventImpl> measurementEvents = res.getMeasurementEvents();
        for (MeasurementEventImpl mee : measurementEvents) {
            if (mee.getAgent() != null && mee.getAgent().getType() == AgentType.USER) {
                me = mee;
            }
        }
        // If none, create one and pass it back.
        if (me == null) {
            log.info("Creating Manual Measurement Event.");
            me = new MeasurementEventImpl(res);
            res.getMeasurementEvents().add(me);
            UserBean user = (UserBean) JSFUtil.getManagedObject("UserBean");
            me.setAgent(new MeasurementAgent(user));
            ExperimentPersistencyImpl.getInstance();
            ExperimentInspector.persistExperiment();
        }
        me.getMeasurements();
        return me;
    }

    /**
     * @return the newManVal
     */
    public String getNewManVal() {
        return newManVal;
    }

    /**
     * @param newManVal the newManVal to set
     */
    public void setNewManVal(String newManVal) {
        this.newManVal = newManVal;
    }

    /**
     */
    public void storeManualMeasurement() {
        // Look up the definition:
        ManuallyMeasuredPropertyHandlerImpl mm = ManuallyMeasuredPropertyHandlerImpl.getInstance();
        UserBean user = (UserBean) JSFUtil.getManagedObject("UserBean");
        ManualMeasurementBackingBean mmbb = (ManualMeasurementBackingBean) JSFUtil
                .getManagedObject("ManualMeasurementBackingBean");
        List<ManuallyMeasuredProperty> mps = mm.loadAllManualProperties(user.getUserid());
        ManuallyMeasuredProperty mp = null;
        for (ManuallyMeasuredProperty amp : mps) {
            if (amp.getURI().equals(mmbb.getNewManProp()))
                mp = amp;
        }
        if (mp == null) {
            log.error("No property [" + mmbb.getNewManProp() + "] found!");
            return;
        }
        // Lookup the event:
        MeasurementEventImpl mev = this.getManualMeasurementEvent();
        // Make the property
        Property p = new Property.Builder(URI.create(mp.getURI())).description(mp.getDescription())
                .name(mp.getName()).build();
        DigitalObjectCompare.createMeasurement(mev, p, this.sessionId, this.newManVal);
        ExperimentInspector.persistExperiment();
    }

    /**
     * Actions
     */

    /**
     * 
     */
    public void disablePropertyPanel() {
        this.setPropertyPanelEnabled(false);
    }

    /**
     * 
     */
    public void enablePropertyPanel() {
        this.setPropertyPanelEnabled(true);
    }

}