package com.tinkerpop.blueprints.oupls.jung;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Edge;
import org.apache.commons.collections15.Transformer;
import java.util.List;
import java.util.Set;
public class EdgeLabelTransformer implements Transformer<Edge, Number> {
private Set<String> labels;
private Boolean filter;
private Number filterValue;
private Boolean probability;
public EdgeLabelTransformer(final Set<String> labels, final Boolean filterLabels, final Number filterValue, final Boolean probability) {
this.labels = labels;
if (null == filterLabels)
this.filter = false;
else
this.filter = filterLabels;
this.filterValue = filterValue;
this.probability = probability;
}
public EdgeLabelTransformer(final Set<String> labels, final Boolean filterLabels) {
this(labels, filterLabels, 0, false);
}
public Number transform(final Edge edge) {
if (labels.contains(edge.getLabel())) {
if (filter) {
return this.filterValue;
} else {
if (this.probability) {
List<Edge> allowedEdges = JungHelper.filterEdgeLabels(edge.getVertex(Direction.OUT).getEdges(Direction.OUT), this.labels, filter);
return 1.0d / allowedEdges.size();
} else {
return 1.0d;
}
}
} else {
if (filter) {
if (this.probability) {
List<Edge> allowedEdges = JungHelper.filterEdgeLabels(edge.getVertex(Direction.OUT).getEdges(Direction.OUT), this.labels, filter);
return 1.0d / allowedEdges.size();
} else {
return 1.0d;
}
} else {
return this.filterValue;
}
}
}
}