All pastes #2074066 Raw Edit

Someone

public text v1 · immutable
#2074066 ·published 2011-06-03 10:14 UTC
rendered paste body
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<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.");
    }
    
}