All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.anotheria.moskito.webui.journey.api.JourneyCallIntermediateContainer Maven / Gradle / Ivy

There is a newer version: 4.0.3
Show newest version
package net.anotheria.moskito.webui.journey.api;

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

/**
 * This class holds some information of the currently proceed (aka prepared for presentation) journey call.
 * It holds some intermediate results of the calculations. It dies after the request.
 * @author lrosenberg
 *
 */
public class JourneyCallIntermediateContainer {
	/**
	 * The reversed map of steps used to determine duplicates.
	 */
	private Map stepsReversed = new HashMap<>();
	/**
	 * Element in this countainer.
	 */
	private List elements = new ArrayList<>();
	/**
	 * Counter.
	 */
	private int counter = 0;

	/**
	 * Parent holder ;-)
	 */
	private final ParentHolder parentHolder = new ParentHolder();
	
	public JourneyCallIntermediateContainer(){
		
	}

	/**
	 * Adds a new TracedCallStepAO.
	 * @param step
	 */
	public void add(TracedCallStepAO step){
		elements.add(step);
		step.setId((counter++));
		ReversedCallHelper helper = stepsReversed.get(step.getCall());
		if (helper == null){
			helper = new ReversedCallHelper();
			stepsReversed.put(step.getCall(), helper);
		}
		
		helper.add(step.getNiceId(), step.getTimespent(), step.getDuration());
		step.setParentId(parentHolder.getParentIdByLayer(step.getLayer(), step.getNiceId()));
	}
	
	public List getElements(){
		return elements;
	}

	/**
	 * Returns the map with collected steps.
	 * @return
	 */
	public Map getReversedSteps(){
		return stepsReversed;
	}
	
	/**
	 * A small helper for calculation of duplicates.
	 * @author lrosenberg
	 *
	 */
	public static class ReversedCallHelper{
		private List positions = new ArrayList<>();
		private long timespent = 0;
		private long duration = 0;
		
		public void add(String aPosition, long someTimespent, long aDuration){
			positions.add(aPosition);
			timespent += someTimespent;
			duration += aDuration;
		}
		
		public List getPositions(){
			return positions;
		}
		
		public long getTimespent(){
			return timespent;
		}
		
		public long getDuration(){
			return duration;
		}
	}
	
	/**
	 * Helper class for parentId linkage.
	 * @author lrosenberg
	 *
	 */
	static private class ParentHolder{
		/**
		 * Holds known parents.
 		 */
		private Map parents = new HashMap<>();
		
		private int getParentIdByLayer(int layer, String currentId){
			int _currentId = Integer.parseInt(currentId);
			parents.put(layer, _currentId);
			
			if (layer==0)
				return -1;

			int storedId = parents.get(layer-1);
			return storedId;
		}
	}
	
	
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy