(no commit message)
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / api / application / CdmApplicationUtils.java
1 package eu.etaxonomy.cdm.api.application;
2
3 import static eu.etaxonomy.cdm.common.XmlHelp.getRoot;
4
5 import java.io.File;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.net.URL;
10
11 import org.apache.log4j.Logger;
12 import org.jdom.output.Format;
13
14 import eu.etaxonomy.cdm.common.CdmUtils;
15 import eu.etaxonomy.cdm.common.XmlHelp;
16 import eu.etaxonomy.cdm.database.CdmDataSource;
17
18 public class CdmApplicationUtils {
19 private static final Logger logger = Logger.getLogger(CdmApplicationUtils.class);
20
21 //directory of the resources (configfiles etc.)
22 static File fileResourceDir;
23 static final String MUST_EXIST_FILE = "applicationContext.xml";
24
25 /**
26 * Returns the directory path to the writable resources. (Resources must be copied to this directory, this is automatically done for
27 * the cdm.datasource.xml, sessionfactory.xml and applicationContext.xml
28 * @return
29 */
30 public static File getWritableResourceDir(){
31 //compute only once
32 if (fileResourceDir == null){
33 //workaround to find out in which environment the library is executed
34 URL url = CdmUtils.class.getResource("/"+ MUST_EXIST_FILE);
35 if (url != null){
36 File file = new File(url.getPath());
37 if (file.exists()){
38 fileResourceDir= file.getParentFile();
39 }else{
40 String subPath = File.separator + "cdmResources" ;
41 file = new File(System.getProperty("user.home") + File.separator + ".cdmLibrary" + File.separator + "writableResources" );
42 //file = new File(System.getProperty("user.dir") + subPath ); //does not work in plugin-environmen (uses eclipse installation directory)
43
44 file.mkdirs();
45 copyResources(file);
46 fileResourceDir = file;
47 }
48 }
49 logger.debug("Resource directory: " + (fileResourceDir == null?"null":fileResourceDir.getAbsolutePath()));
50 }
51 return fileResourceDir;
52 }
53
54 static private void copyResources(File directory){
55 copyResource(directory, CdmDataSource.DATASOURCE_FILE_NAME);
56 }
57
58
59 /**
60 * Copies a file from the classpath resource (e.g. jar-File) to the resources directory in the file system (get
61 * @param directory
62 * @param resourceFileName
63 */
64 static private void copyResource(File directory, String resourceFileName){
65 try {
66 File fileToCopy = new File(directory + File.separator + resourceFileName);
67 if (fileToCopy.createNewFile()){
68 InputStream isDataSource = CdmUtils.class.getResourceAsStream("/"+ resourceFileName);
69 XmlHelp.saveToXml(getRoot(isDataSource).getDocument(), new FileOutputStream(fileToCopy), Format.getPrettyFormat());
70 }
71 } catch (IOException e) {
72 logger.error("File " + resourceFileName + " + could not be created");
73 }
74 }
75
76
77 }