Mercurial > hg > mpdl-group
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; + } +}