1
2
3
4 package com.webstersmalley.mediacollection.controller;
5
6 import java.io.BufferedOutputStream;
7 import java.io.File;
8 import java.io.FileOutputStream;
9 import java.io.IOException;
10 import java.io.PrintWriter;
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13 import java.util.Iterator;
14 import java.util.Set;
15
16 import javax.swing.JFileChooser;
17
18 import org.apache.log4j.Logger;
19 import org.apache.log4j.PropertyConfigurator;
20
21 import ca.odell.glazedlists.EventList;
22
23 import com.webstersmalley.mediacollection.database.DatabaseConnection;
24 import com.webstersmalley.mediacollection.database.Installer;
25 import com.webstersmalley.mediacollection.model.SimpleMediaCollectionBean;
26 import com.webstersmalley.mediacollection.ui.BrowserFrame;
27 import com.webstersmalley.mediacollection.ui.DatabaseFileFilter;
28 import com.webstersmalley.mediacollection.ui.ImportWizardFrame;
29
30 /**
31 */
32 public class BrowserController
33 {
34 private static Logger log = Logger.getLogger(BrowserController.class);
35 static
36 {
37 PropertyConfigurator.configure("log4j.properties");
38 }
39 private BrowserFrame frame;
40 private EventList list;
41 private JFileChooser chooser;
42 private String databaseName;
43 private DatabaseConnection connection;
44 private ImportWizardFrame importWizardFrame;
45
46 public BrowserController(BrowserFrame frame, EventList list)
47 {
48 this.frame = frame;
49 this.list = list;
50 chooser = new JFileChooser();
51 chooser.setFileFilter(new DatabaseFileFilter());
52 log.debug("Browser Controller initialised");
53 }
54
55 private String sanitiseDatabaseName(String input) throws IOException
56 {
57 String canonicalName = new File(input).getCanonicalPath();
58 if (canonicalName.endsWith(".mcdb"))
59 {
60 return canonicalName;
61 }
62 else
63 {
64 return canonicalName + ".mcdb";
65 }
66 }
67
68 private String deriveFilename(String input)
69 {
70 return input.substring(0, input.length() - ".mcdb".length());
71 }
72
73 public void newDatabase() throws IOException, ClassNotFoundException, SQLException
74 {
75 showMessage("Creating new database");
76 int returnVal = chooser.showSaveDialog(frame.getJFrame());
77 if(returnVal == JFileChooser.APPROVE_OPTION)
78 {
79 String controlFilename = sanitiseDatabaseName(chooser.getSelectedFile().getCanonicalPath());
80 log.debug("Creating new database: " + controlFilename);
81 databaseName = deriveFilename(controlFilename);
82 Installer installer = new Installer(databaseName);
83 showMessage("Installing database");
84 installer.go();
85 PrintWriter out = new PrintWriter(new BufferedOutputStream(new FileOutputStream(controlFilename)));
86 out.println("Database created: " + new java.util.Date().toString());
87 out.flush();
88 out.close();
89 connection = new DatabaseConnection(databaseName, true);
90 log.debug("Database creation complete");
91 showMessage("Done");
92 populateFromDatabase();
93 }
94 }
95
96 public void openDatabase() throws IOException, ClassNotFoundException, SQLException
97 {
98 int returnVal = chooser.showOpenDialog(frame.getJFrame());
99 if(returnVal == JFileChooser.APPROVE_OPTION)
100 {
101 String controlFilename = chooser.getSelectedFile().getCanonicalPath();
102 String databaseName = deriveFilename(controlFilename);
103 log.debug("Opening existing database: " + controlFilename);
104 connection = new DatabaseConnection(databaseName, false);
105 log.debug("Database creation complete");
106 populateFromDatabase();
107 }
108 }
109
110 private void populateFromDatabase()
111 {
112 log.debug("Attempting population from database");
113 try
114 {
115 list.clear();
116 ResultSet rs = connection.executeQuery("select * from vCollectionsResolved");
117 while (rs.next())
118 {
119 SimpleMediaCollectionBean bean = SimpleMediaCollectionBean.createFromResultSet(rs);
120 log.debug("Adding bean: " + bean);
121 list.add(bean);
122 }
123 }
124 catch (SQLException e)
125 {
126
127 e.printStackTrace();
128 }
129 }
130
131 public void importFileSystem()
132 {
133 importWizardFrame = new ImportWizardFrame(this);
134 }
135
136 public void importFileSystem(String path, String collection, String format)
137 {
138 if (importWizardFrame != null)
139 {
140 importWizardFrame.close();
141 }
142 log.debug("Importing: " + path + ", " + collection + ", " + format);
143 DirectoryParser dp = new DirectoryParser(path, collection, format);
144 Set beans = dp.parse();
145 Iterator it = beans.iterator();
146 while (it.hasNext())
147 {
148 SimpleMediaCollectionBean bean = (SimpleMediaCollectionBean) it.next();
149 log.debug("Persisting: " + bean);
150 try
151 {
152 bean.persist(connection);
153 list.add(bean);
154 }
155 catch (SQLException e)
156 {
157 log.error("Error persisting bean " + bean, e);
158 }
159 }
160 }
161
162 public void showMessage(String message)
163 {
164 frame.showMessage(message);
165 }
166 }