rendered paste bodyimport java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
/**
* @author pau.espin
*/
public class RulesTab extends GenericTableViewTab {
private final int NUM_ELEMENTS = 200;
private int index = 0;
private int NumRegles = 0;
private int iteratorReference = 0;
private int offset = 0;
private List<List<String>> cache;
ControladorVistaRegles controller;
private JButton buttonGen;
private JSpinner SpinN;
private JSpinner SpinM;
public RulesTab(ControladorVistaRegles controller) {
super(Arrays.asList("Original", "Derivative", "Frequency"));
this.controller = controller;
cache = new ArrayList();
final RulesTab self = this;
buttonGen = addButton("Generate", KeyEvent.VK_G,
new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
final Integer N = (Integer) SpinN.getValue();
final Integer M = (Integer) SpinM.getValue();
if(N<=0) throw new Exception();
System.out.println("Generating rules with N="+N+" and M="+M+"...");
//New thread to avoid hanging the GUI:
Thread t = new Thread(new Runnable() {
public void run() {
self.NumRegles = 0;
buttonGen.setEnabled(false);
try {
long t0 = System.nanoTime();
self.controller.generateAllReglesDetailed(N, M);
long t1 = System.nanoTime();
double tt = (t1 - t0)/1000000000.0;
self.cache = new ArrayList();
self.NumRegles = self.countNumRegles();
System.out.println("Generation of "+self.NumRegles+" different rules finished correctly. Elapsed Time: "+tt+" seconds.");
} catch( Exception exgen) {
System.out.println("Oops! something went wrong while generating rules... Please be sure you loaded the corpus before generating rules again.");
}
self.invalidateTable();
buttonGen.setEnabled(true);
}
});
t.start();
} catch (Exception eint) {
System.out.println("Wrong format!");
}
}
});
JLabel labelN = new JLabel("Maximum length:");
labelN.setHorizontalAlignment(JLabel.LEFT);
sidePanel.add(labelN, BorderLayout.WEST);
SpinnerModel SpinModN = new SpinnerNumberModel(3, //initial value
1, //min
100, //max
1); //step
SpinN = new JSpinner(SpinModN);
sidePanel.add(SpinN);
JLabel labelM = new JLabel("Num. of minimal subsets:");
labelM.setHorizontalAlignment(JLabel.LEFT);
sidePanel.add(labelM, BorderLayout.WEST);
SpinnerModel SpinModM = new SpinnerNumberModel(0, //initial value
0, //min
100, //max
1); //step
SpinM = new JSpinner(SpinModM);
sidePanel.add(SpinM);
}
/**
* counts the number of rules.
*/
private int countNumRegles() {
int n = 0;
int i = controller.getIteratorReference();
List l = new ArrayList();
do {
l = controller.getRegles(i, NUM_ELEMENTS);
if (l != null) {
n += l.size();
}
} while (l != null && !l.isEmpty());
return n;
}
@Override
protected void loadFromFile(String path) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void saveToFile() throws Exception {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void saveToFile(String path) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected boolean isEditingSupported() {
return false;
}
@Override
protected int getNumElements() {
return NumRegles;
}
@Override
protected List<String> getElement(int i) {
if (cache.isEmpty() || i < offset - (NUM_ELEMENTS-1) ) {
controller.clearIteratorReference(iteratorReference);
iteratorReference = controller.getIteratorReference();
cache = controller.getRegles(iteratorReference, NUM_ELEMENTS);
offset = NUM_ELEMENTS-1;
}
if (i > offset) {
while (i > offset) {
offset += NUM_ELEMENTS;
cache = controller.getRegles(iteratorReference, NUM_ELEMENTS);
}
}
List<String> l = new ArrayList<String>();
if (!cache.isEmpty()) {
l = cache.get(i % NUM_ELEMENTS);
}
return l;
}
@Override
protected String getElementName() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected int onCreate(List<String> element) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected boolean onChange(int row, int col, String value) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void onDelete(int i) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void close() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected String getMenuTitle() {
throw new UnsupportedOperationException("Not supported yet.");
}
}