View Javadoc

1   /*
2    * Created on 28-Mar-2005
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 			// TODO Auto-generated catch block
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 }