Package eu.planets_project.tb.gui.backing.service

Source Code of eu.planets_project.tb.gui.backing.service.ServiceInspector

/*******************************************************************************
* 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;
    }

}
TOP

Related Classes of eu.planets_project.tb.gui.backing.service.ServiceInspector

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.