diff software/mpdl-services/mpiwg-mpdl-cms/src/de/mpg/mpiwg/berlin/mpdl/cms/confmanager/ConfManager.java @ 23:e845310098ba

diverse Korrekturen
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 27 Nov 2012 12:35:19 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/software/mpdl-services/mpiwg-mpdl-cms/src/de/mpg/mpiwg/berlin/mpdl/cms/confmanager/ConfManager.java	Tue Nov 27 12:35:19 2012 +0100
@@ -0,0 +1,139 @@
+package de.mpg.mpiwg.berlin.mpdl.cms.confmanager;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.xpath.XPathExpressionException;
+
+import de.mpg.mpiwg.berlin.mpdl.cms.harvester.PathExtractor;
+
+import de.mpg.mpiwg.berlin.mpdl.xml.xquery.XQueryEvaluator;
+
+import de.mpg.mpiwg.berlin.mpdl.cms.general.Constants;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
+
+public class ConfManager {
+  private ConfManagerResultWrapper cmrw;
+  private HashMap<String, ConfManagerResultWrapper> wrapperContainer;
+  private static ConfManager confManager;
+
+  private ConfManager() {
+    wrapperContainer = new HashMap<String, ConfManagerResultWrapper>();
+    try {
+      checkCollectionConfFiles();
+    } catch (XPathExpressionException e) {
+      e.printStackTrace();
+    }
+  }
+
+  public static ConfManager getInstance(){
+    if(confManager == null)
+      confManager = new ConfManager();
+    return confManager;
+  }
+  
+  /**
+   * checks if an update of a project is necessary by checking configuration
+   * file
+   * 
+   * @throws XPathExpressionException
+   */
+  private void checkCollectionConfFiles() throws XPathExpressionException {
+    System.out.println("---------------");
+    System.out.println("checking configuration files...");
+    // holt alle Konfiguratiuonsdateien aus dem konf-Ordner
+    PathExtractor ext = new PathExtractor();
+    List<String> configsList = ext.extractPathLocally(Constants.getInstance().getConfDir());
+    System.out.println("Anzahl der Konfigurationsdateien : " + configsList.size());
+    try {
+      File configFile = null;
+      // Ueberprueft alle Konf-dateien auf update und fuehrt es bei Bedarf aus
+      for (String configXml : configsList) {
+        System.out.println("checking : " + configXml);
+        XQueryEvaluator xQueryEvaluator = new XQueryEvaluator();
+        configFile = new File(configXml);
+        URL srcUrl = configFile.toURI().toURL();
+        String update = xQueryEvaluator.evaluateAsString(srcUrl, "//collection/update/text()");
+        if (update != null && update.equals("true")) {
+          System.out.println("update tag is set on : " + update);
+          cmrw = new ConfManagerResultWrapper();
+          String collectionId = xQueryEvaluator.evaluateAsString(srcUrl, "//collectionId/text()");
+          if (collectionId != null) {
+            cmrw.setCollectionId(collectionId);
+          }
+          String mainLanguage = xQueryEvaluator.evaluateAsString(srcUrl, "//mainLanguage/text()");
+          if (mainLanguage != null) {
+            cmrw.setMainLanguage(mainLanguage);
+          }
+          String name = xQueryEvaluator.evaluateAsString(srcUrl, "//name/text()");
+          if (name != null) {
+            cmrw.setCollectionName(name);
+          }
+          String fieldsStr = xQueryEvaluator.evaluateAsStringValueJoined(srcUrl, "//field");
+          ArrayList<String> fields = new ArrayList<String>();
+          if (fields != null) {
+            fieldsStr = fieldsStr.trim();
+            String[] fieldsArray = fieldsStr.split(" ");
+            for (int i=0; i<fieldsArray.length; i++) {
+              String field = fieldsArray[i];
+              fields.add(field);
+            }
+            cmrw.setFields(fields);
+          }
+          String collectionDataUrl = xQueryEvaluator.evaluateAsString(srcUrl, "//specifyUrl/collectionDataUrl/text()");
+          if (collectionDataUrl != null) {
+            cmrw.setCollectionDataUrl(collectionDataUrl);
+            String excludesStr = xQueryEvaluator.evaluateAsStringValueJoined(srcUrl, "//specifyUrl/exclude");
+            if(collectionDataUrl.endsWith("/"))
+              extractUrlsFromCollections(collectionDataUrl, cmrw, excludesStr);
+            else{
+              List<String> collectionUrls = new ArrayList<String>();
+              collectionUrls.add(collectionDataUrl);
+              cmrw.setCollectionUrls(collectionUrls);
+            }
+            // flag im Konfigurations-File auf false setzen durch serialisierung in das File
+            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = docFactory.newDocumentBuilder();
+            Document configFileDocument = builder.parse(configFile);
+            NodeList updateNodeList = configFileDocument.getElementsByTagName("update");
+            Node n = updateNodeList.item(0);
+            n.setTextContent("false");
+            FileOutputStream os = new FileOutputStream(configFile);
+            XMLSerializer ser = new XMLSerializer(os, null);
+            ser.serialize(configFileDocument);  //  Vorsicht: wenn es auf true ist: es wird alles neu indexiert
+          }
+          wrapperContainer.put(collectionId, cmrw);
+        }
+      }
+    } catch(Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  /**
+   * der Extractor holt alle Projekt zugehoerigen Urls
+   */
+  private void extractUrlsFromCollections(String collectionDataUrl, ConfManagerResultWrapper cmrw, String excludesStr) {
+    System.out.println("collecting urls of resources that need update...");
+    if(!collectionDataUrl.equals("")){
+      PathExtractor extractor = new PathExtractor();
+      List<String> collectionUrls = extractor.initExtractor(collectionDataUrl, excludesStr);
+      cmrw.setCollectionUrls(collectionUrls);
+    }
+  }
+
+  public ConfManagerResultWrapper getResultWrapper(String collectionId) {
+    ConfManagerResultWrapper cmrw = wrapperContainer.get(collectionId);
+    return cmrw;
+  }
+}