1 package gov.bnl.gums.configuration;
2
3 import java.io.BufferedWriter;
4 import java.io.ByteArrayInputStream;
5 import java.io.IOException;
6 import java.io.StringWriter;
7 import java.net.URL;
8 import java.text.DateFormat;
9 import java.text.ParseException;
10 import java.text.SimpleDateFormat;
11 import java.util.Collection;
12 import java.util.Date;
13 import java.util.Iterator;
14
15 import javax.xml.parsers.ParserConfigurationException;
16
17 import org.apache.log4j.Logger;
18 import org.xml.sax.SAXException;
19
20 import gov.bnl.gums.GUMS;
21 import gov.bnl.gums.configuration.Configuration;
22 import gov.bnl.gums.db.ConfigurationDB;
23 import gov.bnl.gums.persistence.HibernatePersistenceFactory;
24 import gov.bnl.gums.persistence.LocalPersistenceFactory;
25 import gov.bnl.gums.persistence.PersistenceFactory;
26
27
28
29
30
31
32 public class DBConfigurationStore extends ConfigurationStore {
33 private Logger log = Logger.getLogger(FileConfigurationStore.class);
34 private ConfigurationDB configDB;
35 private Configuration conf;
36 private Date mostRecentModification = null;
37
38 public DBConfigurationStore(ConfigurationDB configDB) {
39 this.configDB = configDB;
40 }
41
42 public void deleteBackupConfiguration(String name) {
43 if (!configDB.deleteBackupConfiguration(name))
44 throw new RuntimeException("Could not delete backup configuration '"+name+"' from database");
45 }
46
47 public boolean isActive() {
48 return configDB.isActive();
49 }
50
51 public Collection getBackupNames() {
52 return configDB.getBackupNames(format);
53 }
54
55 public Date getLastModification() {
56 Date date = configDB.getLastModification();
57 if (log.isTraceEnabled())
58 log.trace("Last modification from database: "+date.toString());
59 return date;
60 }
61
62 public synchronized Configuration retrieveConfiguration() throws Exception {
63 ByteArrayInputStream stream = null;
64 try {
65 Date lastModification = getLastModification();
66 if (mostRecentModification==null || mostRecentModification.before(lastModification)) {
67 String configText = configDB.retrieveCurrentConfiguration();
68 this.conf = ConfigurationToolkit.parseConfiguration(configText, false);
69 log.debug("Configuration "+conf+" reloaded from database");
70 mostRecentModification = lastModification;
71 return conf;
72 }
73 } catch (Exception e) {
74 throw new RuntimeException(e.getMessage());
75 } finally {
76 if (stream != null)
77 stream.close();
78 }
79 return conf;
80 }
81
82 public synchronized Configuration restoreConfiguration(String name) throws Exception {
83 ByteArrayInputStream stream = null;
84 try {
85 String configText = configDB.restoreConfiguration(name);
86 this.conf = ConfigurationToolkit.parseConfiguration(configText, false);
87 log.debug("Configuration '" + name + "', "+conf+" restored from database");
88 mostRecentModification = getLastModification();
89 return conf;
90 } catch (Exception e) {
91 throw new RuntimeException(e.getMessage());
92 } finally {
93 if (stream != null)
94 stream.close();
95 }
96 }
97
98 public synchronized void setConfiguration(Configuration conf, boolean backupCopy, String name, Date date) throws Exception {
99 if (date==null)
100 date = new Date();
101
102 if (backupCopy && (name==null || name.length()==0))
103 name = format.format(date);
104
105 configDB.setConfiguration(conf.toXml(), backupCopy, name, date);
106 log.debug("Configuration "+conf+" saved to database");
107 this.conf = conf;
108 mostRecentModification = date;
109 }
110
111 }