001 package ca.uhn.hl7v2.conf.store;
002
003 import java.io.BufferedReader;
004 import java.io.BufferedWriter;
005 import java.io.File;
006 import java.io.FileReader;
007 import java.io.FileWriter;
008 import java.io.IOException;
009
010 import org.slf4j.Logger;
011 import org.slf4j.LoggerFactory;
012
013 /**
014 * Stores profiles in a local directory. Profiles are stored as text
015 * in files named ID.xml (where ID is the profile ID).
016 * @author Bryan Tripp
017 */
018 public class FileProfileStore implements ProfileStore {
019
020 private File root;
021 private static final Logger log = LoggerFactory.getLogger(FileProfileStore.class);
022
023 /** Creates a new instance of FileProfileStore */
024 public FileProfileStore(String file) {
025 root = new File(file);
026 if (!root.isDirectory())
027 if (!root.mkdirs())
028 throw new IllegalArgumentException(file + " is not a directory");
029 }
030
031 /**
032 * Retrieves profile from persistent storage (by ID). Returns null
033 * if the profile isn't found.
034 */
035 public String getProfile(String ID) throws IOException {
036 String profile = null;
037
038 File source = new File(getFileName(ID));
039 if (source.isFile()) {
040 BufferedReader in = new BufferedReader(new FileReader(source));
041 char[] buf = new char[(int) source.length()];
042 int check = in.read(buf, 0, buf.length);
043 in.close();
044 if (check != buf.length)
045 throw new IOException("Only read " + check + " of " + buf.length
046 + " bytes of file " + source.getAbsolutePath());
047 profile = new String(buf);
048 }
049 log.info("Got profile {}: \r\n {}", ID, profile);
050 return profile;
051 }
052
053 /**
054 * Stores profile in persistent storage with given ID.
055 */
056 public void persistProfile(String ID, String profile) throws IOException {
057 File dest = new File(getFileName(ID));
058 BufferedWriter out = new BufferedWriter(new FileWriter(dest));
059 out.write(profile);
060 out.flush();
061 out.close();
062 }
063
064 private String getFileName(String ID) {
065 return root.getAbsolutePath() + "/" + ID + ".xml";
066 }
067 }