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

com.crawljax.plugins.crawloverview.model.StateStatistics Maven / Gradle / Ivy

There is a newer version: 5.2.3
Show newest version
package com.crawljax.plugins.crawloverview.model;

import java.util.Collection;

import javax.annotation.concurrent.Immutable;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableSetMultimap;

@Immutable
public class StateStatistics {

	private final StateCounter leastFanOut;
	private final StateCounter leastFanIn;
	private final StateCounter mostFanOut;
	private final StateCounter mostFanIn;
	private final int totalNumberOfStates;
	private final ImmutableSetMultimap urls;

	public StateStatistics(Collection states) {
		totalNumberOfStates = states.size();

		State randomState = states.iterator().next();
		State tmpLeastFanOut = randomState;
		State tmpMostFanOut = randomState;
		State tmpLeastFanIn = randomState;
		State tmpMostFanIn = randomState;
		ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder();
		for (State state : states) {
			if (state.getFanIn() > tmpMostFanIn.getFanIn()) {
				tmpMostFanIn = state;
			} else if (state.getFanIn() < tmpLeastFanIn.getFanIn()) {
				tmpLeastFanIn = state;
			}
			if (state.getFanOut() > tmpMostFanOut.getFanOut()) {
				tmpMostFanOut = state;
			} else if (state.getFanOut() < tmpLeastFanOut.getFanOut()) {
				tmpLeastFanOut = state;
			}
			builder.put(state.getUrl(), state.getName());
		}
		this.urls = builder.build();
		this.leastFanOut = new StateCounter(tmpLeastFanOut.getName(), tmpLeastFanOut.getFanOut());
		this.leastFanIn = new StateCounter(tmpLeastFanIn.getName(), tmpLeastFanIn.getFanIn());
		this.mostFanOut = new StateCounter(tmpMostFanOut.getName(), tmpMostFanOut.getFanOut());
		this.mostFanIn = new StateCounter(tmpMostFanIn.getName(), tmpMostFanIn.getFanIn());
	}

	@JsonCreator
	public StateStatistics(@JsonProperty("leastFanOut") StateCounter leastFanOut,
	        @JsonProperty("leastFanIn") StateCounter leastFanIn,
	        @JsonProperty("mostFanOut") StateCounter mostFanOut,
	        @JsonProperty("mostFanIn") StateCounter mostFanIn,
	        @JsonProperty("totalNumberOfStates") int totalNumberOfStates,
	        @JsonProperty("urls") ImmutableSetMultimap urls) {
		this.leastFanOut = leastFanOut;
		this.leastFanIn = leastFanIn;
		this.mostFanOut = mostFanOut;
		this.mostFanIn = mostFanIn;
		this.totalNumberOfStates = totalNumberOfStates;
		this.urls = urls;
	}

	public StateCounter getLeastFanIn() {
		return leastFanIn;
	}

	public StateCounter getLeastFanOut() {
		return leastFanOut;
	}

	public StateCounter getMostFanIn() {
		return mostFanIn;
	}

	public StateCounter getMostFanOut() {
		return mostFanOut;
	}

	public int getTotalNumberOfStates() {
		return totalNumberOfStates;
	}

	/**
	 * @return A mapping from the {@link String} url to the {@link String} state name.
	 */
	public ImmutableSetMultimap getUrls() {
		return urls;
	}

	@Override
	public int hashCode() {
		return Objects.hashCode(leastFanOut, leastFanIn, mostFanOut, mostFanIn,
		        totalNumberOfStates, urls);
	}

	@Override
	public boolean equals(Object object) {
		if (object instanceof StateStatistics) {
			StateStatistics that = (StateStatistics) object;
			return Objects.equal(this.leastFanOut, that.leastFanOut)
			        && Objects.equal(this.leastFanIn, that.leastFanIn)
			        && Objects.equal(this.mostFanOut, that.mostFanOut)
			        && Objects.equal(this.mostFanIn, that.mostFanIn)
			        && Objects.equal(this.totalNumberOfStates, that.totalNumberOfStates)
			        && Objects.equal(this.urls, that.urls);
		}
		return false;
	}

	@Override
	public String toString() {
		return Objects.toStringHelper(this)
		        .add("leastFanOut", leastFanOut)
		        .add("leastFanIn", leastFanIn)
		        .add("mostFanOut", mostFanOut)
		        .add("mostFanIn", mostFanIn)
		        .add("totalNumberOfStates", totalNumberOfStates)
		        .add("urls", urls)
		        .toString();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy