In [ ]:
public interface ITableProducer {
String[] requestAttributes();
String[][] requestInstances();
}
In [ ]:
public interface IDataSetProperties {
public String getDataSource();
public void setDataSource(String dataSource);
}
In [ ]:
public interface IDataSet extends IDataSetProperties, ITableProducer {
}
In [ ]:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class DataSetComponent implements IDataSet {
private String dataSource = null;
private String[] attributes = null;
private String[][] instances = null;
public DataSetComponent() {
/* nothing */
}
public String getDataSource() {
return dataSource;
}
public void setDataSource(String dataSource) {
this.dataSource = dataSource;
if (dataSource == null) {
attributes = null;
instances = null;
} else
readDS();
}
public String[] requestAttributes() {
return attributes;
}
public String[][] requestInstances() {
return instances;
}
private void readDS() {
ArrayList<String[]> instArray = new ArrayList<String[]>();
try {
BufferedReader file = new BufferedReader(new FileReader(dataSource));
String line = file.readLine();
if (line != null) {
attributes = line.split(",");
line = file.readLine();
while (line != null) {
String[] instLine = line.split(",");
instArray.add(instLine);
line = file.readLine();
}
instances = instArray.toArray(new String[0][]);
}
file.close();
} catch (IOException erro) {
erro.printStackTrace();
}
}
}
In [ ]:
public interface ITableReceptacle {
public void connect(ITableProducer producer);
}
In [ ]:
public interface IConsoleUpdate {
public void update();
}
In [ ]:
public interface IConsole extends ITableReceptacle, IConsoleUpdate {
}
In [ ]:
public class ConsoleComponent implements IConsole {
private ITableProducer iProducer;
public void connect(ITableProducer producer) {
iProducer = producer;
}
public void update() {
if (iProducer != null) {
System.out.println("=== Attributes ===");
String attributes[] = iProducer.requestAttributes();
for (int a = 0; a < attributes.length-1; a++)
System.out.print(attributes[a] + ", ");
System.out.println(attributes[attributes.length-1]);
System.out.println();
System.out.println("=== Instances ===");
String instances[][] = iProducer.requestInstances();
for (int i = 0; i < instances.length; i++) {
for (int a = 0; a < attributes.length-1; a ++)
System.out.print(instances[i][a] + ", ");
System.out.println(instances[i][attributes.length-1]);
}
}
}
}
In [ ]:
public interface IProjectionProperties {
String[] getAttributes();
void setAttributes(String attribute[]);
}
In [ ]:
public interface IProjection extends IProjectionProperties, ITableProducer, ITableReceptacle {
}
In [ ]:
public class ProjectionComponent implements IProjection {
private ITableProducer provider;
private String attributes[] = null;
public String[] getAttributes() {
return attributes;
}
public void setAttributes(String attributes[]) {
this.attributes = attributes;
}
public void connect(ITableProducer provider) {
this.provider = provider;
}
public String[] requestAttributes() {
return attributes;
}
public String[][] requestInstances() {
String[][] instances = null;
if (provider != null) {
String[][] allInstances = provider.requestInstances();
if (allInstances != null && attributes != null) {
instances = new String[allInstances.length][];
// busca a posicao dos atributos selecionados na tabela original
String[] allAttributes = provider.requestAttributes();
int attrPos[] = new int[attributes.length];
for (int as = 0; as < attributes.length; as++) {
int aa;
for (aa = 0; aa < allAttributes.length &&
!attributes[as].equalsIgnoreCase(allAttributes[aa]); aa++)
/* nothing */;
if (aa < allAttributes.length)
attrPos[as] = aa;
else
attrPos[as] = -1;
}
// filtra atributos selecionados
for (int i = 0; i < allInstances.length; i++) {
instances[i] = new String[attributes.length];
for (int as = 0; as < attributes.length; as++)
if (attrPos[as] > -1)
instances[i][as] = allInstances[i][attrPos[as]];
}
}
}
return instances;
}
}
In [ ]:
In [ ]:
public interface ISelectionProperties {
String getAttribute();
void setAttribute(String attributeA);
public String getOperator();
public void setOperator(String operator);
public String getValue();
public void setValue(String value);
boolean isNominalComparison();
void setNominalComparison(boolean nominalComparison);
}
In [ ]:
public interface ISelection extends ISelectionProperties, ITableProducer, ITableReceptacle {
}
In [ ]:
import java.util.ArrayList;
public class SelectionComponent implements ISelection {
private ITableProducer provider;
private String attribute = null,
operator = null,
value = null;
private boolean nominalComparison = true;
public String getAttribute() {
return attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public boolean isNominalComparison() {
return nominalComparison;
}
public void setNominalComparison(boolean nominalComparison) {
this.nominalComparison = nominalComparison;
}
public void connect(ITableProducer provider) {
this.provider = provider;
}
public String[] requestAttributes() {
return (provider == null) ? null : provider.requestAttributes();
}
public String[][] requestInstances() {
ArrayList<String[]> instances = null;
if (provider != null) {
String[][] allInstances = provider.requestInstances();
if (allInstances != null) {
// busca a posicao dos atributos selecionados na tabela original
String[] allAttributes = provider.requestAttributes();
int atrPos;
for (atrPos = 0; atrPos < allAttributes.length &&
!attribute.equalsIgnoreCase(allAttributes[atrPos]); atrPos++)
/* nothing */;
if (atrPos < allAttributes.length) {
instances = new ArrayList<String[]>();
for (String[] ai: allInstances) {
boolean match = false;
if (nominalComparison) {
switch (operator.charAt(0)) {
case '=': if (ai[atrPos].equalsIgnoreCase(value))
match = true;
break;
case '<': if (ai[atrPos].compareTo(value) < 0)
match = true;
break;
case '>': if (ai[atrPos].compareTo(value) > 0)
match = true;
break;
case '!': if (!ai[atrPos].equalsIgnoreCase(value))
match = true;
break;
}
} else {
switch (operator.charAt(0)) {
case '=': if (Double.parseDouble(ai[atrPos]) == Double.parseDouble(value))
match = true;
break;
case '<': if (Double.parseDouble(ai[atrPos]) < Double.parseDouble(value))
match = true;
break;
case '>': if (Double.parseDouble(ai[atrPos]) > Double.parseDouble(value))
match = true;
break;
case '!': if (Double.parseDouble(ai[atrPos]) != Double.parseDouble(value))
match = true;
break;
}
}
if (match)
instances.add(ai);
}
}
}
}
return (instances == null) ? null : instances.toArray(new String[1][]);
}
}
In [ ]:
In [ ]:
In [ ]:
public interface IChartProperties {
String getTitle();
void setTitle(String title);
String getXTitle();
void setXTitle(String title);
String getYTitle();
void setYTitle(String title);
}
In [ ]:
public interface IRun {
public boolean start();
public boolean stop();
}
In [ ]:
public interface IChart extends ITableReceptacle, IRun, IChartProperties {
/* Component Interfaces Set */
}
In [ ]:
%classpath add jar ../../../../src/lib/xchart-3.5.2.jar
In [ ]:
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.io.IOException;
import org.knowm.xchart.BubbleChart;
import org.knowm.xchart.BubbleChartBuilder;
import org.knowm.xchart.SwingWrapper;
import org.knowm.xchart.BitmapEncoder;
import org.knowm.xchart.BitmapEncoder.BitmapFormat;
import com.twosigma.beakerx.mimetype.MIMEContainer;
import java.io.File;
import java.nio.file.Files;
public class ChartBubbleComponent implements IChart {
private BubbleChart chart = null;
private String title = "Chart";
private String xTitle = "X",
yTitle = "Y";
private ITableProducer producer = null;
public void connect(ITableProducer producer) {
this.producer = producer;
}
public ChartBubbleComponent() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getXTitle() {
return xTitle;
}
public void setXTitle(String title) {
xTitle = title;
}
public String getYTitle() {
return title;
}
public void setYTitle(String title) {
yTitle = title;
}
public boolean start() {
boolean status = true;
chart = new BubbleChartBuilder().width(600).height(400).title(title).xAxisTitle(xTitle).yAxisTitle(yTitle).build();
try{
buildChart();
BitmapEncoder.saveBitmap(chart, "./chart", BitmapFormat.PNG);
File file = new File("chart.png");
byte[] data = Files.readAllBytes(file.toPath());
MIMEContainer image = new MIMEContainer(MIMEContainer.MIME.IMAGE_PNG, data);
display(image);
}catch(IOException ex){
status = false;
System.out.println (ex.toString());
}
return status;
}
public boolean stop() {
return true;
}
public double[] toDouble(String[][] instances, int column ) {
double[] numbers = new double[instances.length];
for (int i = 0; i < instances.length; i++)
numbers[i] = Double.parseDouble(instances[i][column]);
return numbers;
}
private void buildChart() {
if (chart != null && producer != null) {
String[][] instances = producer.requestInstances();
if (instances != null) {
double[] xData = toDouble(instances, 0),
yData = toDouble(instances, 1);
String[] categoryData = null;
if (instances[0].length > 2) {
categoryData = new String[instances.length];
for (int c = 0; c < instances.length; c++)
categoryData[c] = instances[c][2];
}
double[] bubbleData = null;
if (instances[0].length > 3)
bubbleData = toDouble(producer.requestInstances(), 3);
else {
bubbleData = new double[instances.length];
for (int i = 0; i < xData.length; i++)
bubbleData[i] = 10;
}
if (categoryData == null ||
xData.length != yData.length || yData.length != bubbleData.length ||
bubbleData.length != categoryData.length) {
chart.addSeries(" ", xData, yData, bubbleData);
} else {
Hashtable<String,String> hash = new Hashtable<String,String>();
int outer = 0;
int size = categoryData.length;
while (outer < size) {
if (hash.containsKey(categoryData[outer]))
outer++;
else {
hash.put(categoryData[outer],categoryData[outer]);
List<Double> xSub = new ArrayList<Double>(),
ySub = new ArrayList<Double>(),
bubbleSub = new ArrayList<Double>();
for (int inner = outer; inner < size; inner++)
if (categoryData[inner].equalsIgnoreCase(categoryData[outer])) {
xSub.add(xData[inner]);
ySub.add(yData[inner]);
bubbleSub.add(bubbleData[inner]);
}
chart.addSeries(categoryData[outer], xSub, ySub, bubbleSub);
outer++;
}
}
}
}
}
}
}
In [ ]:
In [ ]:
In [ ]: