comparison software/mpdl-services-new/mpiwg-mpdl-cms/src/de/mpg/mpiwg/berlin/mpdl/cms/confmanager/ConfManager.java @ 25:e9fe3186670c default tip

letzter Stand eingecheckt
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 21 May 2013 10:19:32 +0200
parents
children
comparison
equal deleted inserted replaced
23:e845310098ba 25:e9fe3186670c
1 package de.mpg.mpiwg.berlin.mpdl.cms.confmanager;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.net.URL;
6 import java.util.ArrayList;
7 import java.util.HashMap;
8 import java.util.List;
9
10 import javax.xml.parsers.DocumentBuilder;
11 import javax.xml.parsers.DocumentBuilderFactory;
12 import javax.xml.xpath.XPathExpressionException;
13
14 import de.mpg.mpiwg.berlin.mpdl.cms.harvester.PathExtractor;
15
16 import de.mpg.mpiwg.berlin.mpdl.xml.xquery.XQueryEvaluator;
17
18 import de.mpg.mpiwg.berlin.mpdl.cms.general.Constants;
19 import org.w3c.dom.Document;
20 import org.w3c.dom.Node;
21 import org.w3c.dom.NodeList;
22
23 import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
24
25 public class ConfManager {
26 private ConfManagerResultWrapper cmrw;
27 private HashMap<String, ConfManagerResultWrapper> wrapperContainer;
28 private static ConfManager confManager;
29
30 private ConfManager() {
31 wrapperContainer = new HashMap<String, ConfManagerResultWrapper>();
32 try {
33 checkCollectionConfFiles();
34 } catch (XPathExpressionException e) {
35 e.printStackTrace();
36 }
37 }
38
39 public static ConfManager getInstance(){
40 if(confManager == null)
41 confManager = new ConfManager();
42 return confManager;
43 }
44
45 /**
46 * checks if an update of a project is necessary by checking configuration
47 * file
48 *
49 * @throws XPathExpressionException
50 */
51 private void checkCollectionConfFiles() throws XPathExpressionException {
52 System.out.println("---------------");
53 System.out.println("checking configuration files...");
54 // holt alle Konfiguratiuonsdateien aus dem konf-Ordner
55 PathExtractor ext = new PathExtractor();
56 List<String> configsList = ext.extractPathLocally(Constants.getInstance().getConfDir());
57 System.out.println("Anzahl der Konfigurationsdateien : " + configsList.size());
58 try {
59 File configFile = null;
60 // Ueberprueft alle Konf-dateien auf update und fuehrt es bei Bedarf aus
61 for (String configXml : configsList) {
62 System.out.println("checking : " + configXml);
63 XQueryEvaluator xQueryEvaluator = new XQueryEvaluator();
64 configFile = new File(configXml);
65 URL srcUrl = configFile.toURI().toURL();
66 String update = xQueryEvaluator.evaluateAsString(srcUrl, "//collection/update/text()");
67 if (update != null && update.equals("true")) {
68 System.out.println("update tag is set on : " + update);
69 cmrw = new ConfManagerResultWrapper();
70 String collectionId = xQueryEvaluator.evaluateAsString(srcUrl, "//collectionId/text()");
71 if (collectionId != null) {
72 cmrw.setCollectionId(collectionId);
73 }
74 String mainLanguage = xQueryEvaluator.evaluateAsString(srcUrl, "//mainLanguage/text()");
75 if (mainLanguage != null) {
76 cmrw.setMainLanguage(mainLanguage);
77 }
78 String name = xQueryEvaluator.evaluateAsString(srcUrl, "//name/text()");
79 if (name != null) {
80 cmrw.setCollectionName(name);
81 }
82 String fieldsStr = xQueryEvaluator.evaluateAsStringValueJoined(srcUrl, "//field");
83 ArrayList<String> fields = new ArrayList<String>();
84 if (fields != null) {
85 fieldsStr = fieldsStr.trim();
86 String[] fieldsArray = fieldsStr.split(" ");
87 for (int i=0; i<fieldsArray.length; i++) {
88 String field = fieldsArray[i];
89 fields.add(field);
90 }
91 cmrw.setFields(fields);
92 }
93 String collectionDataUrl = xQueryEvaluator.evaluateAsString(srcUrl, "//specifyUrl/collectionDataUrl/text()");
94 if (collectionDataUrl != null) {
95 cmrw.setCollectionDataUrl(collectionDataUrl);
96 String excludesStr = xQueryEvaluator.evaluateAsStringValueJoined(srcUrl, "//specifyUrl/exclude");
97 if(collectionDataUrl.endsWith("/"))
98 extractUrlsFromCollections(collectionDataUrl, cmrw, excludesStr);
99 else{
100 List<String> collectionUrls = new ArrayList<String>();
101 collectionUrls.add(collectionDataUrl);
102 cmrw.setCollectionUrls(collectionUrls);
103 }
104 // flag im Konfigurations-File auf false setzen durch serialisierung in das File
105 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
106 DocumentBuilder builder = docFactory.newDocumentBuilder();
107 Document configFileDocument = builder.parse(configFile);
108 NodeList updateNodeList = configFileDocument.getElementsByTagName("update");
109 Node n = updateNodeList.item(0);
110 n.setTextContent("false");
111 FileOutputStream os = new FileOutputStream(configFile);
112 XMLSerializer ser = new XMLSerializer(os, null);
113 ser.serialize(configFileDocument); // Vorsicht: wenn es auf true ist: es wird alles neu indexiert
114 }
115 wrapperContainer.put(collectionId, cmrw);
116 }
117 }
118 } catch(Exception e) {
119 e.printStackTrace();
120 }
121 }
122
123 /**
124 * der Extractor holt alle Projekt zugehoerigen Urls
125 */
126 private void extractUrlsFromCollections(String collectionDataUrl, ConfManagerResultWrapper cmrw, String excludesStr) {
127 System.out.println("collecting urls of resources that need update...");
128 if(!collectionDataUrl.equals("")){
129 PathExtractor extractor = new PathExtractor();
130 List<String> collectionUrls = extractor.initExtractor(collectionDataUrl, excludesStr);
131 cmrw.setCollectionUrls(collectionUrls);
132 }
133 }
134
135 public ConfManagerResultWrapper getResultWrapper(String collectionId) {
136 ConfManagerResultWrapper cmrw = wrapperContainer.get(collectionId);
137 return cmrw;
138 }
139 }