1 package ca.uhn.hl7v2.testpanel.model.conf;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.ArrayList;
6 import java.util.HashMap;
7 import java.util.List;
8 import java.util.UUID;
9
10 import org.apache.commons.lang.StringUtils;
11 import org.slf4j.Logger;
12
13 import ca.uhn.hl7v2.testpanel.controller.Prefs;
14 import ca.uhn.hl7v2.testpanel.model.AbstractModelClass;
15
16 public class TableFileList extends AbstractModelClass {
17
18 private static final Logger ourLog = org.slf4j.LoggerFactory.getLogger(TableFileList.class);
19 public static final String PROP_FILES = TableFileList.class.getName() + "_FILES";
20
21 private HashMap<String, TableFile> myIdToTableFiles;
22 private List<TableFile> myTableFiles = new ArrayList<TableFile>();
23
24 public TableFileList() {
25 List<File> files = Prefs.getInstance().getOpenTableFiles();
26 for (File file : files) {
27 ourLog.info("Loading table file {}", file.getAbsoluteFile());
28 try {
29 TableFile next = TableFile.readFromFile(file);
30 if (!myTableFiles.contains(next)) {
31 myTableFiles.add(next);
32 }
33 } catch (IOException e) {
34 continue;
35 }
36 }
37 }
38
39 public void addNewFile(File theFileName) {
40 TableFile file = new TableFile();
41 file.setId(UUID.randomUUID().toString());
42 file.setFileName(theFileName);
43
44 if (!myTableFiles.contains(file)) {
45 myIdToTableFiles = null;
46 myTableFiles.add(file);
47 }
48
49 try {
50 file.flushToFile();
51 } catch (IOException e) {
52 ourLog.error("Failed to save file!", e);
53 return;
54 }
55
56 firePropertyChange(PROP_FILES, null, null);
57
58 updatePrefs();
59 }
60
61 @Override
62 public Object exportConfigToXml() {
63 return null;
64 }
65
66 public TableFile getTableFile(String theTableFileId) {
67 if (myIdToTableFiles == null) {
68 myIdToTableFiles = new HashMap<String, TableFile>();
69 for (TableFile next : myTableFiles) {
70 myIdToTableFiles.put(next.getId(), next);
71 }
72 }
73 return myIdToTableFiles.get(theTableFileId);
74 }
75
76
77
78
79 public List<TableFile> getTableFiles() {
80 return myTableFiles;
81 }
82
83 public void importFile(TableFile theFile) {
84 getTableFiles();
85 myTableFiles.add(theFile);
86 firePropertyChange(PROP_FILES, null, null);
87 updatePrefs();
88 }
89
90 public boolean openFile(File theChosenFile) {
91 try {
92 TableFile newFile = TableFile.readFromFile(theChosenFile);
93 if (!myTableFiles.contains(newFile)) {
94 myIdToTableFiles = null;
95 myTableFiles.add(newFile);
96 }
97 firePropertyChange(PROP_FILES, null, null);
98
99 if (StringUtils.isNotBlank(newFile.getId())) {
100 return true;
101 }
102 } catch (IOException e) {
103 return false;
104 }
105 return false;
106 }
107
108 public void removeTableFile(TableFile theSelectedFileOrTable) {
109 myTableFiles.remove(theSelectedFileOrTable);
110 myIdToTableFiles = null;
111 firePropertyChange(PROP_FILES, null, null);
112 }
113
114 private void updatePrefs() {
115 ArrayList<File> files = new ArrayList<File>();
116 for (TableFile next : myTableFiles) {
117 if (next.getFileName() != null) {
118 files.add(next.getFileName());
119 }
120 }
121 Prefs.getInstance().setOpenTableFiles(files);
122 }
123
124 }