/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
Gephi is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Gephi. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.visualization.opengl.text;
import org.gephi.data.attributes.api.AttributeColumn;
import org.gephi.data.attributes.api.Estimator;
import org.gephi.data.attributes.type.DynamicType;
import org.gephi.data.attributes.type.TimeInterval;
import org.gephi.graph.api.EdgeData;
import org.gephi.graph.api.NodeData;
import org.gephi.graph.api.TextData;
import org.gephi.graph.spi.TextDataFactory;
import org.gephi.visualization.impl.TextDataImpl;
import org.gephi.visualization.opengl.text.TextModel;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author Mathieu Bastian
*/
public class TextDataBuilderImpl {
private Estimator defaultEstimator;
private Estimator numberEstimator;
public void buildNodeText(NodeData nodeData, TextDataImpl textDataImpl, TextModel model, TimeInterval timeInterval) {
if (model.getNodeTextColumns() != null) {
String str = "";
int i = 0;
for (AttributeColumn c : model.getNodeTextColumns()) {
if (i++ > 0) {
str += " - ";
}
Object val = nodeData.getAttributes().getValue(c.getIndex());
if (val instanceof DynamicType) {
DynamicType dynamicType = (DynamicType) val;
Estimator estimator = defaultEstimator;
if (Number.class.isAssignableFrom(dynamicType.getUnderlyingType())) {
estimator = numberEstimator;
}
if (timeInterval != null) {
val = dynamicType.getValue(timeInterval.getLow(), timeInterval.getHigh(), estimator);
} else {
val = dynamicType.getValue(estimator);
}
}
str += val != null ? val : "";
}
textDataImpl.setText(str);
}
}
public void buildEdgeText(EdgeData edgeData, TextDataImpl textDataImpl, TextModel model, TimeInterval timeInterval) {
if (model.getEdgeTextColumns() != null) {
String str = "";
int i = 0;
for (AttributeColumn c : model.getEdgeTextColumns()) {
if (i++ > 0) {
str += " - ";
}
Object val = edgeData.getAttributes().getValue(c.getIndex());
if (val instanceof DynamicType) {
DynamicType dynamicType = (DynamicType) val;
Estimator estimator = defaultEstimator;
if (Number.class.isAssignableFrom(dynamicType.getUnderlyingType())) {
estimator = numberEstimator;
}
if (timeInterval != null) {
val = dynamicType.getValue(timeInterval.getLow(), timeInterval.getHigh(), estimator);
} else {
val = dynamicType.getValue(estimator);
}
}
str += val != null ? val : "";
}
textDataImpl.setText(str);
}
}
public void setDefaultEstimator(Estimator defaultEstimator) {
this.defaultEstimator = defaultEstimator;
}
public void setNumberEstimator(Estimator numberEstimator) {
this.numberEstimator = numberEstimator;
}
}