1 package uba.db.client.model;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.io.Reader;
7 import java.io.StringReader;
8 import java.io.Writer;
9
10 import javax.swing.JFileChooser;
11
12 import uba.db.client.structure.ClientDataConverter;
13 import uba.db.client.ui.ClientWindow;
14
15 /***
16 * Administrador del comportamiento del cliente.
17 *
18 * @version $Revision 1.0$
19 */
20 public class ClientManager {
21
22 private ClientWindow window;
23
24 private ConnectionToServer connection;
25
26 private boolean running;
27
28 private ClientDataConverter converter;
29
30 /***
31 * Constructor default.
32 *
33 */
34 public ClientManager() {
35 super();
36 initialize();
37 }
38
39 /***
40 * Inicialización privada.
41 *
42 */
43 void initialize() {
44 connection = new ConnectionToServer();
45 converter = new ClientDataConverter();
46 running = false;
47 }
48
49 /***
50 * Muestra la ventana cliente.
51 */
52 public void showWindow() {
53 if (window == null) {
54 window = new ClientWindow(this);
55 }
56
57 window.setVisible(true);
58 }
59
60 /***
61 * Cierra la ventana cliente TODO buscar una mejor opcion
62 */
63 public void close() {
64 if (window != null) {
65 window.setVisible(false);
66 }
67 running = false;
68 }
69
70 /***
71 * Intenta grabar los datos en el archivo, o muestra una ventana de error si
72 * no puede
73 *
74 * @param s
75 * el stream con los datos a grabar
76 * @param p
77 * el path absoluto del archivo
78 */
79 public void write(Writer w) throws IOException {
80 Reader r = new StringReader(window.result());
81 int c;
82 while ((c = r.read()) != -1) {
83 w.write(c);
84 }
85 w.close();
86 }
87
88 /***
89 * Pregunta al usuario por una ubicación y nombre de archivo para guardar la
90 * tabla actual de resultados.
91 *
92 */
93 public void export() {
94 JFileChooser saveFile = new JFileChooser("");
95 int result = saveFile.showSaveDialog(window);
96 try {
97 File filePath = saveFile.getCurrentDirectory();
98 String fileName = saveFile.getName(saveFile.getSelectedFile());
99 FileWriter writer = new FileWriter(filePath + "/" + fileName);
100 write(writer);
101 } catch (IOException ie) {
102 System.err.println("Error al intentar grabar el archivo");
103 }
104 }
105
106 /***
107 * Ejecuta la consulta, devuelve un error y un result set nulo si hay algún
108 * problema
109 *
110 * @param s
111 * la consulta
112 * @return el resultado o un null result set
113 */
114
115 public void execute(String s) {
116 String executionResult;
117 ResultSet dataResult;
118 try {
119 executionResult = connection.execute(s);
120 dataResult = converter.convertToResultSet(executionResult);
121 window.setResult(dataResult.getTuples());
122 window.setQueryPlan(dataResult.getQueryPlan());
123 } catch (Exception ex) {
124 window.notifyError("Error al ejecutar la consulta.");
125 }
126 }
127
128 /***
129 * Inicia la conexión entre el cliente y el servidor.
130 *
131 * @throws IOException
132 * Error de socket.
133 */
134 public void connect() throws IOException {
135 connection.connect(this);
136 running = true;
137 showWindow();
138 while (running) {
139 }
140 }
141 }