001/*
002 * To change this template, choose Tools | Templates
003 * and open the template in the editor.
004 */
005package csheets.ext.database.ui;
006
007import csheets.SpreadsheetAppEvent;
008import csheets.SpreadsheetAppListener;
009import csheets.core.Cell;
010import csheets.core.Spreadsheet;
011import csheets.core.formula.compiler.FormulaCompilationException;
012import csheets.ext.database.controller.ControllerImport;
013import java.awt.BorderLayout;
014import java.awt.Color;
015import java.awt.Container;
016import java.awt.Dimension;
017import java.awt.GridLayout;
018import java.awt.event.ActionEvent;
019import java.awt.event.ActionListener;
020import java.io.FileNotFoundException;
021import java.util.ArrayList;
022import javax.swing.JButton;
023import javax.swing.JFrame;
024import javax.swing.JLabel;
025import javax.swing.JList;
026import javax.swing.JPanel;
027import javax.swing.JScrollPane;
028import javax.swing.ListSelectionModel;
029import csheets.ext.database.ui.UIImport;
030import csheets.ui.ctrl.UIController;
031import java.util.logging.Level;
032import java.util.logging.Logger;
033import javax.swing.JOptionPane;
034
035/**
036 * Table selection GUI (to select a select from the database)
037 * @author João Carreira
038 */
039public class UITableSelect extends JFrame
040{
041    /* labels */
042    JLabel sysMsg = new JLabel("Select one table from above");
043    
044    /* buttons */
045    private JButton btnOk = new JButton("OK");
046    private JButton btnCancel = new JButton("Cancel");
047    private JButton btnPreview = new JButton("Preview");
048    
049    /* array with table list */
050    private String[] tableArray;
051    private ArrayList arrayQueries;
052    
053    /* array with database table content */
054    private String[][] tableData;
055    
056    /* tablelist */
057    private JList tableList;
058    
059    private ControllerImport ctrlImp;
060   
061    private UIController uiCtrl;
062    
063    private Spreadsheet spreadSheet;
064     
065    /**
066     * constructor of the GUI for table selection 
067     * @param dbName name of the database
068     * @throws Exception 
069     */
070    public UITableSelect(Spreadsheet spreadSheet, String dbName, ControllerImport ctrlImp)
071    {
072        /* window title */
073        super("Select a table from " + dbName);
074        
075        /* labels */
076        sysMsg.setForeground(Color.BLUE);
077        
078        this.ctrlImp = ctrlImp;
079        
080        this.spreadSheet = spreadSheet;
081        
082        /* gets the table list */
083        tableArray = ctrlImp.getTableList();
084             
085        /* Jlist with table list for database */
086        tableList = new JList(tableArray);
087        tableList.setVisibleRowCount(5);
088        tableList.setPreferredSize(new Dimension(100,100));
089        tableList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
090        tableList.setSelectedIndex(0);
091        JScrollPane scroll = new JScrollPane(tableList); 
092        
093        /* main panel */
094        JPanel mainPanel = new JPanel(new GridLayout(3,3));
095        
096        /* list panel */
097        JPanel anotherPanel = new JPanel();
098        anotherPanel.add(scroll);
099        anotherPanel.add(sysMsg);
100        
101        /* sysMsg panel */
102        JPanel msgPanel = new JPanel();
103        msgPanel.add(sysMsg);
104        
105        /* button panel */
106        JPanel buttonPanel = new JPanel();
107        buttonPanel.add(btnOk);
108//        buttonPanel.add(btnPreview);
109        buttonPanel.add(btnCancel);
110        
111        /* setting up action listeners */
112        HandlesEvent t = new HandlesEvent();
113        btnOk.addActionListener(t);
114        btnCancel.addActionListener(t);
115//        btnPreview.addActionListener(t);
116        
117        /* putting everything together */
118        Container c = getContentPane();
119        mainPanel.add(anotherPanel);
120        mainPanel.add(msgPanel, BorderLayout.CENTER);
121        mainPanel.add(buttonPanel, BorderLayout.SOUTH);
122        c.add(mainPanel);     
123        
124        /* other window settings */
125        setSize(300,350);
126        setVisible(true);
127        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
128        setLocationRelativeTo(null);
129        setResizable(false);
130    }
131    
132    
133    /**
134     * handles events on different GUI objects
135     */
136    public class HandlesEvent implements ActionListener
137    {
138        @Override
139        public void actionPerformed(ActionEvent e) 
140        {
141            boolean flag = false;
142            
143            /* ok button */
144            if(e.getSource() == btnOk)
145            {
146                /* loads a given database table to the table data array */
147                tableData = ctrlImp.loadTable(tableList.getSelectedValue().toString());
148                
149                /* launches window for user to confirm import */
150                ConfirmImportUI confImpUI = new ConfirmImportUI(spreadSheet, tableData);
151                dispose();
152
153            }
154            /* cancel button */
155            else if(e.getSource() == btnCancel)
156            {
157                dispose();
158            }     
159        }
160    }
161}
162