eu.planets_project.tb.gui.backing.service.ServiceInspector.java Source code

Java tutorial

Introduction

Here is the source code for eu.planets_project.tb.gui.backing.service.ServiceInspector.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.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

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

import eu.planets_project.tb.api.model.Experiment;
import eu.planets_project.tb.gui.backing.ServiceBrowser;
import eu.planets_project.tb.gui.util.JSFUtil;

/**
 * 
 * A request-scope bean that handles inspection of a service.  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 ServiceInspector {
    /** */
    private static final Log log = LogFactory.getLog(ServiceInspector.class);

    private String serviceName;

    private String serviceHash;

    private ServiceRecordBean srb = null;

    private List<ServiceRecordBean> srbs = new ArrayList<ServiceRecordBean>();

    /**
     * @param serviceName
     */
    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
        lookForService();
    }

    /**
     * @return
     */
    public String getServiceName() {
        return serviceName;
    }

    /**
     * @param serviceHash the serviceHash to set
     */
    public void setServiceHash(String serviceHash) {
        this.serviceHash = serviceHash;
        lookForService();
    }

    /**
     * @return the serviceHash
     */
    public String getServiceHash() {
        return serviceHash;
    }

    /** */
    private void lookForService() {
        // By Hash takes precedence:
        if (serviceHash != null && !"".equals(serviceHash)) {
            lookForServiceByHash();
            return;
        }
        if (serviceName != null && !"".equals(serviceName)) {
            lookForServiceByName();
        }
    }

    /**
     * 
     */
    private void lookForServiceByName() {
        log.info("Looking up service: " + this.serviceName);
        this.srbs = new ArrayList<ServiceRecordBean>();
        if (this.serviceName == null)
            return;

        // Get the service browser:
        ServiceBrowser sb = (ServiceBrowser) JSFUtil.getManagedObject("ServiceBrowser");

        // Need a consistent way of getting the full record...
        for (ServiceRecordBean srb : sb.getAllServicesAndRecords()) {
            if (this.serviceName.equals(srb.getName())) {
                log.info("Found matching Service Record Bean: " + srb.getName() + " : " + srb.getServiceRecord());
                this.srbs.add(srb);
            }
        }
    }

    /**
     * 
     */
    private void lookForServiceByHash() {
        log.info("Looking up service by hash: " + this.serviceHash);
        if (this.serviceHash == null)
            return;

        // Get the service browser:
        ServiceBrowser sb = (ServiceBrowser) JSFUtil.getManagedObject("ServiceBrowser");

        // Need a consistent way of getting the full record...
        for (ServiceRecordBean srb : sb.getAllServicesAndRecords()) {
            if (this.serviceHash.equals(srb.getServiceHash())) {
                log.info("Found matching Service Record Bean: " + srb.getName() + " : " + srb.getServiceRecord());
                this.srb = srb;
            }
        }
    }

    /**
     * @return
     */
    public ServiceRecordBean getService() {
        if (this.srb == null) {
            if (this.srbs.size() > 0) {
                return this.srbs.get(0);
            }
        }

        return this.srb;
    }

    public List<Experiment> getExperiments() {
        // Single Services:
        if (this.srb != null) {
            if (srb.getServiceRecord() != null) {
                return srb.getServiceRecord().getExperiments();
            } else {
                return new ArrayList<Experiment>();
            }
        }
        // Lists:
        HashMap<Long, Experiment> exps = new HashMap<Long, Experiment>();
        if (this.srbs != null) {
            for (ServiceRecordBean srb : srbs) {
                if (srb.getServiceRecord() != null) {
                    for (Experiment exp : srb.getServiceRecord().getExperiments()) {
                        exps.put(Long.valueOf(exp.getEntityID()), exp);
                    }
                }
            }
        }
        return new ArrayList<Experiment>(exps.values());
    }

    public int getNumberOfExperiments() {
        // Single Services:
        if (this.srb != null) {
            if (srb.getServiceRecord() != null) {
                return srb.getServiceRecord().getExperimentIds().size();
            } else {
                return 0;
            }
        }
        // Lists:
        HashSet<Long> uniques = new HashSet<Long>();
        if (this.srbs != null) {
            for (ServiceRecordBean srb : srbs) {
                if (srb.getServiceRecord() != null) {
                    for (Long id : srb.getServiceRecord().getExperimentIds()) {
                        uniques.add(id);
                    }
                }
            }
        }
        return uniques.size();
    }

    /**
     * @return
     */
    public List<ServiceRecordBean> getServiceVersions() {
        return this.srbs;
    }

}