Package org.jboss.bpm.monitor.gui.server

Source Code of org.jboss.bpm.monitor.gui.server.ChartDataService

/* jboss.org */
package org.jboss.bpm.monitor.gui.server;

import org.jboss.bpm.monitor.gui.client.ChartData;
import org.jboss.bpm.monitor.model.BPAFDataSource;
import org.jboss.bpm.monitor.model.DataSourceFactory;
import org.jboss.bpm.monitor.model.bpaf.Event;
import org.jboss.bpm.monitor.model.bpaf.State;
import org.jboss.bpm.monitor.model.json.XYDataSetJSO;
import org.jboss.bpm.monitor.model.metric.Grouping;
import org.jboss.bpm.monitor.model.metric.Timespan;
import org.jboss.bpm.monitor.model.metric.TimespanFactory;
import org.jboss.errai.bus.server.annotations.Service;

import java.util.*;

/**
* Turn history records into JSON data that can be consumed by the chart renderer.
* @author: Heiko Braun <hbraun@redhat.com>
* @date: Mar 12, 2010
*/
@Service
public class ChartDataService implements ChartData
{
    private BPAFDataSource dataSource;

    public ChartDataService()
    {
        this.dataSource = DataSourceFactory.createDataSource();
    }

    /**
     * @param processDefiniton a processDefinitionID
     * @param timespanValue a timespan string identifier
     * @return JSON data
     */
    public String getCompletedInstances(String processDefiniton, String timespanValue)
    {
        assertDataSource();

        final Timespan timespan = TimespanFactory.fromValue(timespanValue);

        List<Event> events = dataSource.getInstanceEvents(processDefiniton, timespan, State.Closed_Completed);

        return createDatasetJSO(
                new String[]{"Completed"}, timespan, true, events);
    }

    /**
     * @param processDefiniton a processDefinitionID
     * @param timespanValue a timespan string identifier
     * @return JSON data
     */
    public String getFailedInstances(String processDefiniton, String timespanValue)
    {
        assertDataSource();

        final Timespan timespan = TimespanFactory.fromValue(timespanValue);

        List<Event> completed = dataSource.getInstanceEvents(processDefiniton, timespan, State.Closed_Completed);
        List<Event> failed  = dataSource.getInstanceEvents(processDefiniton, timespan, State.Closed_Completed_Failed);
        List<Event> terminated = dataSource.getInstanceEvents(processDefiniton, timespan, State.Closed_Cancelled_Terminated);

        return createDatasetJSO(
                new String[]{"Completed", "Failed", "Terminated"}, timespan, true, completed, failed, terminated);
    }
 
    private static String createDatasetJSO(String[] title, Timespan timespan, boolean matchParity, List<Event>... events) {

        XYDataSetJSO dataSet = new XYDataSetJSO(
                title,
                UUID.randomUUID().toString()
        );

        for(List<Event> subset : events)
        {

            SortedMap<Date, List<Event>> grouped = group(timespan, subset);

            List<Long> domainData = new ArrayList<Long>(grouped.size());
            List<Long> rangeData = new ArrayList<Long>(grouped.size());
            for(Date d : grouped.keySet())
            {
                domainData.add(d.getTime());

                // if parity matched datasets, then we get Open and Closed events.
                int actualSize = matchParity ? grouped.get(d).size()/2 : grouped.get(d).size();
                rangeData.add(new Integer(actualSize).longValue());
            }

            dataSet.getDomain().add(domainData);
            dataSet.getRange().add(rangeData);
        }

        dataSet.setAxis("date");

        return dataSet.toJSO();
    }

    private static SortedMap<Date, List<Event>> group(Timespan timespan, List<Event> events) {
        SortedMap<Date, List<Event>> grouped;

        switch (timespan.getUnit())
        {
            case HOUR:
                grouped = Grouping.byHour(events, timespan);
                break;
            case DAY:
                grouped = Grouping.byDay(events, timespan);
                break;
            case WEEK:
                grouped = Grouping.byWeek(events, timespan);
                break;
            case MONTH:
                grouped = Grouping.byMonth(events, timespan);
                break;
            default:
                throw new IllegalArgumentException("UNIT not supported: "+timespan.getUnit());

        }
        return grouped;
    }

    private void assertDataSource() {
        if(null==this.dataSource)
            throw new IllegalStateException("BPAFDataSource not initialized");

    }
}
TOP

Related Classes of org.jboss.bpm.monitor.gui.server.ChartDataService

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.