All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dpfmanager.conformancechecker.configuration.Configuration Maven / Gradle / Ivy

/**
 * 

Configuration.java

This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later version; or, at your * choice, under the terms of the Mozilla Public License, v. 2.0. SPDX GPL-3.0+ or MPL-2.0+.

*

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License and the Mozilla Public License for more details.

You should * have received a copy of the GNU General Public License and the Mozilla Public License along with * this program. If not, see http://www.gnu.org/licenses/ * and at http://mozilla.org/MPL/2.0 .

NB: for the * © statement, include Easy Innova SL or other company/Person contributing the code.

© * 2015 Easy Innova, SL

* * @author Víctor Muñoz Sola * @version 1.0 * @since 23/7/2015 */ package dpfmanager.conformancechecker.configuration; import com.easyinnova.implementation_checker.ImplementationCheckerLoader; import com.easyinnova.policy_checker.model.Rule; import com.easyinnova.policy_checker.model.Rules; import dpfmanager.conformancechecker.tiff.metadata_fixer.Fix; import dpfmanager.conformancechecker.tiff.metadata_fixer.Fixes; import dpfmanager.shell.core.DPFManagerProperties; import dpfmanager.shell.core.DpFManagerConstants; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.URL; import java.nio.file.Files; import java.nio.file.Paths; import java.security.CodeSource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.ResourceBundle; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; /** * Created by easy on 06/10/2015. */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "isos", "modifiedIsos", "rules", "formats", "fixes", "output", "description", "version", "bundle" }) @XmlRootElement(name = "configuration") public class Configuration { private ArrayList isos; private Map> modifiedIsos; private Rules rules; private ArrayList formats; private Fixes fixes; private String output = null; private String description = null; private int version; private ResourceBundle bundle; /** * Instantiates a new Configuration. */ public Configuration() { isos = new ArrayList<>(); rules = new Rules(); formats = new ArrayList<>(); fixes = new Fixes(); version = 0; bundle = DPFManagerProperties.getBundle(); modifiedIsos = new HashMap<>(); } /** * Instantiates a new Configuration with params */ public Configuration(Rules rules, Fixes fixes, ArrayList formats) { isos = new ArrayList<>(); this.rules = rules; this.formats = formats; this.fixes = fixes; modifiedIsos = new HashMap<>(); } /** * Set the default values for a new configuration */ public void initDefault() { addISO(ImplementationCheckerLoader.getDefaultIso()); addFormat("HTML"); } /** * Gets isos. * * @return the isos */ public ArrayList getIsos() { return isos; } public void addISO(String iso) { if (!isos.contains(iso)) { isos.add(iso); } } public void addFormat(String format) { if (!formats.contains(format)) { formats.add(format); } } /** * Gets formats. * * @return the formats */ public ArrayList getFormats() { return formats; } /** * Gets fixes. * * @return the fixes */ public Fixes getFixes() { return fixes; } /** * Gets rules. * * @return the rules */ public Rules getRules() { return rules; } /** * Sets output. * * @param path the path */ public void setOutput(String path) { output = path; } /** * Sets description. * * @param desc the description */ public void setDescription(String desc) { description = desc; } /** * Gets output. Null means default. * * @return the output */ public String getOutput() { return output; } private void deleteNonCheckedModifiedIsos(){ Set keys = modifiedIsos.keySet(); for (String key : keys){ if (!isos.contains(key)){ modifiedIsos.remove(key); } } } /** * Save file. * * @param filename the filename * @throws Exception the exception */ public void SaveFile(String filename) throws Exception { deleteNonCheckedModifiedIsos(); DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.newDocument(); Element configurationE = doc.createElement("configuration"); // XML Version Element versionE = doc.createElement("version"); versionE.setTextContent(String.valueOf(DpFManagerConstants.CONFIGURATION_VERSION)); configurationE.appendChild(versionE); // ISOs Element isosE = doc.createElement("isos"); for (String iso : isos) { Element elem = doc.createElement("iso"); elem.setTextContent(iso); isosE.appendChild(elem); } configurationE.appendChild(isosE); // Formats Element formatsE = doc.createElement("formats"); for (String format : formats) { Element elem = doc.createElement("format"); elem.setTextContent(format); formatsE.appendChild(elem); } configurationE.appendChild(formatsE); // Modified Isos Element modifiedE = doc.createElement("modified-isos"); for (String key : modifiedIsos.keySet()) { List deletedIds = modifiedIsos.get(key); if (deletedIds.size() > 0) { Element modificationE = doc.createElement("modification"); Element isoE = doc.createElement("iso"); isoE.setTextContent(key); Element rulesE = doc.createElement("rules"); for (String id : deletedIds) { Element idE = doc.createElement("rule-id"); idE.setTextContent(id); rulesE.appendChild(idE); } modificationE.appendChild(isoE); modificationE.appendChild(rulesE); modifiedE.appendChild(modificationE); } } configurationE.appendChild(modifiedE); // Rules Element rulesE = doc.createElement("rules"); if (rules != null) { for (Rule rule : rules.getRules()) { Element ruleE = doc.createElement("rule"); if (rule.getTag() != null) { Element elem = doc.createElement("tag"); elem.setTextContent(rule.getTag()); ruleE.appendChild(elem); } if (rule.getOperator() != null) { Element elem = doc.createElement("operator"); elem.setTextContent(rule.getOperator()); ruleE.appendChild(elem); } if (rule.getValue() != null) { Element elem = doc.createElement("value"); elem.setTextContent(rule.getValue()); ruleE.appendChild(elem); } if (rule.getWarning()) { Element elem = doc.createElement("warning"); elem.setTextContent(String.valueOf(rule.getWarning())); ruleE.appendChild(elem); } rulesE.appendChild(ruleE); } } configurationE.appendChild(rulesE); Element fixesE = doc.createElement("fixes"); // Fixes if (fixes != null) { for (Fix fix : fixes.getFixes()) { Element fixE = doc.createElement("fix"); if (fix.getTag() != null) { Element elem = doc.createElement("tag"); elem.setTextContent(fix.getTag()); fixE.appendChild(elem); } if (fix.getOperator() != null) { Element elem = doc.createElement("operator"); elem.setTextContent(fix.getOperator()); fixE.appendChild(elem); } if (fix.getValue() != null) { Element elem = doc.createElement("value"); elem.setTextContent(fix.getValue()); fixE.appendChild(elem); } fixesE.appendChild(fixE); } } configurationE.appendChild(fixesE); // Output if (output != null) { Element elem = doc.createElement("output"); elem.setTextContent(output); configurationE.appendChild(elem); } // Description if (description != null) { Element elem = doc.createElement("description"); elem.setTextContent(description); configurationE.appendChild(elem); } // Finish doc.appendChild(configurationE); // write the content into xml file TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); DOMSource source = new DOMSource(doc); File f = new File(filename); StreamResult result = new StreamResult(f); transformer.transform(source, result); } public StreamResult configurationToDocument() { try { String filename = "configurationToString.xml"; SaveFile(filename); File fXmlFile = new File(filename); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); StreamResult result = new StreamResult(new StringWriter()); DOMSource source = new DOMSource(doc); transformer.transform(source, result); fXmlFile.delete(); return result; } catch (Exception e) { e.printStackTrace(); return null; } } private InputStream getInputStream(String filename) throws Exception { InputStream sc = null; if (Files.exists(Paths.get(filename))) { // Look in local dir sc = new FileInputStream(filename); } else { // Look in JAR CodeSource src = Configuration.class.getProtectionDomain().getCodeSource(); if (src != null) { URL jar = src.getLocation(); ZipInputStream zip = new ZipInputStream(jar.openStream()); ZipEntry zipFile; while ((zipFile = zip.getNextEntry()) != null) { String name = zipFile.getName(); if (name.contains(filename)) { try { sc = zip; } catch (Exception ex) { throw new Exception(""); } } } } else { throw new Exception(""); } } return sc; } /** * Read file new format (xml). From input stream * * @param is the input stream * @throws Exception the exception */ public void ReadFileNew(InputStream is) throws Exception { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(is); ReadFileNew(doc); } /** * Read file new format (xml). From path * * @param filename the file path * @throws Exception the exception */ public void ReadFileNew(String filename) throws Exception { File fXmlFile = new File(filename); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); ReadFileNew(doc); } /** * Read file new format (xml). From XML Document object * * @param doc the xml document object * @throws Exception the exception */ public void ReadFileNew(Document doc) throws Exception { // Read xml version, output and description NodeList nList = doc.getDocumentElement().getChildNodes(); for (int i = 0; i < nList.getLength(); i++) { Node node = nList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) node; switch (elem.getTagName()) { case "version": version = Integer.parseInt(elem.getTextContent()); break; case "output": output = elem.getTextContent(); break; case "description": description = elem.getTextContent(); break; } } } // Read ISOs NodeList tmpList = doc.getElementsByTagName("isos"); if (tmpList.getLength() > 0){ Node isosNode = tmpList.item(0); NodeList isoList = isosNode.getChildNodes(); for (int i = 0; i < isoList.getLength(); i++) { Node node = isoList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) node; String iso = elem.getTextContent(); if (version == 1) { // Old iso format if (parseOldToNewIso(iso) != null) { isos.add(parseOldToNewIso(iso)); } } else if (version >= 2) { // New iso format isos.add(elem.getTextContent()); } } } } // Read formats NodeList formatsList = doc.getElementsByTagName("format"); for (int i = 0; i < formatsList.getLength(); i++) { Node node = formatsList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) node; formats.add(elem.getTextContent()); } } // Read modified isos if (version >= 3) { NodeList modificationList = doc.getElementsByTagName("modification"); for (int i = 0; i < modificationList.getLength(); i++) { Node node = modificationList.item(i); NodeList childs = node.getChildNodes(); String iso = null; ArrayList idsList = new ArrayList<>(); for (int j = 0; j < childs.getLength(); j++) { Node child = childs.item(j); if (child.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) child; if (elem.getTagName().equals("iso")) { iso = elem.getTextContent(); } else if (elem.getTagName().equals("rules")) { NodeList grandsons = child.getChildNodes(); for (int x = 0; x < grandsons.getLength(); x++) { Node grandson = grandsons.item(x); if (grandson.getNodeType() == Node.ELEMENT_NODE) { Element elem2 = (Element) grandson; if (elem2.getTagName().equals("rule-id")) { idsList.add(elem2.getTextContent()); } } } } } } if (iso != null) { modifiedIsos.put(iso, idsList); } } } // Read rules NodeList rulesList = doc.getElementsByTagName("rule"); for (int i = 0; i < rulesList.getLength(); i++) { Node node = rulesList.item(i); String tag = null, operator = null, value = null; boolean warning = false; NodeList childs = node.getChildNodes(); for (int j = 0; j < childs.getLength(); j++) { Node child = childs.item(j); if (child.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) child; switch (elem.getTagName()) { case "tag": tag = elem.getTextContent(); break; case "operator": operator = elem.getTextContent(); break; case "value": value = elem.getTextContent(); break; case "warning": warning = elem.getTextContent().equals("true"); break; } } } rules.addRule(tag, operator, value, warning); } // Read fixes NodeList fixesList = doc.getElementsByTagName("fix"); for (int i = 0; i < fixesList.getLength(); i++) { Node node = fixesList.item(i); String tag = null, operator = null, value = null; NodeList childs = node.getChildNodes(); for (int j = 0; j < childs.getLength(); j++) { Node child = childs.item(j); if (child.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) child; switch (elem.getTagName()) { case "tag": tag = elem.getTextContent(); break; case "operator": operator = elem.getTextContent(); break; case "value": value = elem.getTextContent(); break; } } } fixes.addFix(tag, operator, value); } // Read output output = null; NodeList outputList = doc.getElementsByTagName("output"); if (outputList.getLength() > 0) { Node node = outputList.item(0); if (node.getNodeType() == Node.ELEMENT_NODE) { Element elem = (Element) node; output = elem.getTextContent(); } } } private String parseOldToNewIso(String old) { if (old.equals("Baseline")) return "TIFF_Baseline_Core_6_0"; if (old.equals("Tiff/EP")) return "TIFF_EP"; if (old.equals("Tiff/IT")) return "TiffITProfileChecker"; if (old.equals("Tiff/IT-1")) return "TiffITP1ProfileChecker"; if (old.equals("Tiff/IT-2")) return "TiffITP2ProfileChecker"; return null; } /** * Read file. * * @param filename the filename * @throws Exception the exception */ public void ReadFile(String filename) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(getInputStream(filename))); try { String line = br.readLine(); if (line != null && line.startsWith(" deleted) { modifiedIsos.put(isoId, deleted); } public void removeModifiedIso(String isoId) { modifiedIsos.remove(isoId); } public boolean hasModifiedIsos(String isoId) { if (modifiedIsos.containsKey(isoId)) { return modifiedIsos.get(isoId).size() > 0; } return false; } public List getModifiedIso(String isoId) { if (hasModifiedIsos(isoId)) { return modifiedIsos.get(isoId); } return new ArrayList<>(); } public Map> getModifiedIsos() { return modifiedIsos; } public void setFixes(Fixes fixes) { this.fixes = fixes; } public void setRules(Rules rules) { this.rules = rules; } public void setModifiedIsos(Map> modifiedIsos) { this.modifiedIsos = modifiedIsos; } public void setIsos(ArrayList isos) { this.isos = isos; } public void setFormats(ArrayList formats) { this.formats = formats; } public boolean hasRules(){ return rules != null && rules.getRules() != null && rules.getRules().size() > 0; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy