import 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> 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 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 l = new ArrayList(); 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 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."); } }