View Javadoc

1   /*
2    * Copyright 2010 Fraunhofer Gesellschaft, Munich, Germany,
3    * for its Fraunhofer Institute for Computer Architecture and Software
4    * Technology (FIRST), Berlin, Germany. All rights reserved.
5    * http://www.first.fraunhofer.de/
6    */
7   package net.kwfgrid.gwes.workflowanalyzer;
8   
9   import net.kwfgrid.gwes.Activity;
10  import net.kwfgrid.gwes.Constants;
11  import net.kwfgrid.gworkflowdl.structure.GenericProperties;
12  
13  import java.util.Map;
14  import java.util.Hashtable;
15  
16  /**
17   * @author Andreas Hoheisel
18   *         (<a href="http://www.andreas-hoheisel.de">www.andreas-hoheisel.de</a>)
19   * @version $Id: TransitionActivityStatistics.java 1540 2011-08-17 13:30:37Z hoheisel $
20   */
21  public class TransitionActivityStatistics {
22  
23      private Map<OperationResourcePair,DistributionSet> distributionMap;
24  
25      public TransitionActivityStatistics() {
26          distributionMap = new Hashtable<OperationResourcePair,DistributionSet>();
27      }
28  
29      public Map<OperationResourcePair, DistributionSet> getDistributionMap() {
30          return distributionMap;
31      }
32  
33      /**
34       * Put an activity to the correct distribution set, considering the operation/resource pair of this activity.
35       * @param activity
36       */
37      public void put(Activity activity) {
38          if (activity==null) return;
39          OperationResourcePair orp = new OperationResourcePair(activity.getOperationName(), activity.getResourceName());
40          DistributionSet set = distributionMap.get(orp);
41          if (set==null) {
42              set = new DistributionSet();
43              distributionMap.put(orp,set);
44          }
45          set.put(activity);
46      }
47  
48      /**
49       * Get the distribution set for a specific operation/resource pair.
50       * @return The set of distributions.
51       */
52      public DistributionSet get(OperationResourcePair orp) {
53          return distributionMap.get(orp);
54      }
55  
56      /**
57       * Updates and returns the aggregated set of distributions, that means the overall distribution regarding
58       * the distributions for all operation/resource pairs.
59       * This method may be expensive, as it iterates through all distribution sets.
60       * @return The aggregated distribution set.
61       */
62      public DistributionSet getAggregatedSet() {
63          DistributionSet aggregatedSet = new DistributionSet();
64          for (DistributionSet set : distributionMap.values()) {
65              aggregatedSet.add(set);
66          }
67          return aggregatedSet;
68      }
69  
70      public void updateTransitionProperties(GenericProperties props) {
71          DistributionSet aggregatedSet = getAggregatedSet();
72          props.put(Constants.PROP_TRANSITION_NUMBER_ACTIVITIES, "" + aggregatedSet.durationTotal.getNumber());
73          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_MEAN, "" + aggregatedSet.durationTotal.getMean());
74          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_STDDEVIATION, "" + aggregatedSet.durationTotal.getStdDeviation());
75          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_EXPSMOOTH, "" + aggregatedSet.durationTotal.getExpSmooth());
76          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_MIN, "" + aggregatedSet.durationTotal.getMin());
77          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_MAX, "" + aggregatedSet.durationTotal.getMax());
78          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_MEAN, "" + aggregatedSet.durationActive.getMean());
79          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_STDDEVIATION, "" + aggregatedSet.durationActive.getStdDeviation());
80          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_EXPSMOOTH, "" + aggregatedSet.durationActive.getExpSmooth());
81          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_MIN, "" + aggregatedSet.durationActive.getMin());
82          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_MAX, "" + aggregatedSet.durationActive.getMax());
83          for (OperationResourcePair orp : distributionMap.keySet()) {
84              updateTransitionProperties(orp,distributionMap.get(orp),props);
85          }
86      }
87  
88      private void updateTransitionProperties(OperationResourcePair orp, DistributionSet set, GenericProperties props) {
89          props.put(Constants.PROP_TRANSITION_NUMBER_ACTIVITIES+orp, "" + set.durationTotal.getNumber());
90          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_MEAN+orp, "" + set.durationTotal.getMean());
91          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_STDDEVIATION+orp, "" + set.durationTotal.getStdDeviation());
92          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_EXPSMOOTH+orp, "" + set.durationTotal.getExpSmooth());
93          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_MIN+orp, "" + set.durationTotal.getMin());
94          props.put(Constants.PROP_TRANSITION_DURATION_TOTAL_MS_MAX+orp, "" + set.durationTotal.getMax());
95          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_MEAN+orp, "" + set.durationActive.getMean());
96          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_STDDEVIATION+orp, "" + set.durationActive.getStdDeviation());
97          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_EXPSMOOTH+orp, "" + set.durationActive.getExpSmooth());
98          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_MIN+orp, "" + set.durationActive.getMin());
99          props.put(Constants.PROP_TRANSITION_DURATION_ACTIVE_MS_MAX+orp, "" + set.durationActive.getMax());
100     }
101     
102 }