/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.gephi.appearance; import org.gephi.graph.api.AttributeUtils; import org.gephi.graph.api.Column; import org.gephi.graph.api.Element; import org.gephi.graph.api.ElementIterable; import org.gephi.graph.api.Estimator; import org.gephi.graph.api.Graph; import org.gephi.graph.api.Index; import org.gephi.graph.api.types.TimeMap; /** * * @author mbastian */ public class AttributeRankingImpl extends RankingImpl { protected final Index index; protected final Column column; protected final Graph graph; public AttributeRankingImpl(Column column, Graph graph, Index index) { super(); this.column = column; this.graph = graph; this.index = index; } @Override protected void refresh() { if (index != null && index.isSortable(column)) { min = index.getMinValue(column); max = index.getMaxValue(column); } else { ElementIterable<? extends Element> iterable = AttributeUtils.isNodeColumn(column) ? graph.getNodes() : graph.getEdges(); if (column.isDynamic()) { refreshDynamic(iterable); } else { refreshNotIndexed(iterable); } } } protected void refreshDynamic(ElementIterable<? extends Element> iterable) { double minN = Double.POSITIVE_INFINITY; double maxN = Double.NEGATIVE_INFINITY; for (Element el : iterable) { TimeMap timeMap = (TimeMap) el.getAttribute(column); if (timeMap != null) { double numMin = ((Number) timeMap.get(graph.getView().getTimeInterval(), Estimator.MIN)).doubleValue(); double numMax = ((Number) timeMap.get(graph.getView().getTimeInterval(), Estimator.MAX)).doubleValue(); if (numMin < minN) { minN = numMin; } if (numMax > maxN) { maxN = numMax; } } } min = minN; max = maxN; } protected void refreshNotIndexed(ElementIterable<? extends Element> iterable) { double minN = Double.POSITIVE_INFINITY; double maxN = Double.NEGATIVE_INFINITY; for (Element el : iterable) { double num = ((Number) el.getAttribute(column)).doubleValue(); if (num < minN) { minN = num; } if (num > maxN) { maxN = num; } } min = minN; max = maxN; } @Override public Number getValue(Element element, Graph gr) { if (graph != null) { return (Number) element.getAttribute(column, gr.getView()); } return (Number) element.getAttribute(column); } @Override public int hashCode() { int hash = 3; hash = 67 * hash + (this.column != null ? this.column.hashCode() : 0); return hash; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final AttributeRankingImpl other = (AttributeRankingImpl) obj; if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) { return false; } return true; } }