/*
* Copyright 2015-Present Entando Inc. (http://www.entando.com) All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library 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 Lesser General Public License for more
* details.
*/
package org.entando.entando.aps.system.services.api;
import java.io.StringReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.agiletec.aps.system.exception.ApsSystemException;
/**
* @author E.Santoboni
*/
public class ServiceExtraConfigDOM {
private static final Logger _logger = LoggerFactory.getLogger(ServiceExtraConfigDOM.class);
protected ServiceExtraConfigDOM() throws ApsSystemException {
this._doc = new Document();
Element elementRoot = new Element("config");
this._doc.setRootElement(elementRoot);
}
protected ServiceExtraConfigDOM(String xml) throws ApsSystemException {
if (null == xml || xml.trim().length() == 0) {
return;
}
this.decodeDOM(xml);
}
protected String[] extractFreeParameters() {
String[] freeParameters = null;
Element freeParametersElement = this._doc.getRootElement().getChild(FREE_PARAMETERS_ELEMENT_NAME);
if (null != freeParametersElement) {
List<Element> freeParametersElements = freeParametersElement.getChildren(FREE_PARAMETER_ELEMENT_NAME);
if (null != freeParametersElements && freeParametersElements.size() > 0) {
freeParameters = new String[freeParametersElements.size()];
for (int i = 0; i < freeParametersElements.size(); i++) {
freeParameters[i] = freeParametersElements.get(i).getAttributeValue(FREE_PARAMETER_ATTRIBUTE_NAME);
}
}
}
return freeParameters;
}
private void decodeDOM(String xml) throws ApsSystemException {
SAXBuilder builder = new SAXBuilder();
builder.setValidation(false);
StringReader reader = new StringReader(xml);
try {
this._doc = builder.build(reader);
} catch (Throwable t) {
_logger.error("Error while parsing xml. {} ", xml, t);
throw new ApsSystemException("Error detected while parsing the XML", t);
}
}
public String extractXml(String[] freeParameters) {
this.fillDocument(freeParameters);
return this.getXMLDocument();
}
protected void fillDocument(String[] freeParameters) {
if (null != freeParameters && freeParameters.length > 0) {
Element freeParametersElement = new Element(FREE_PARAMETERS_ELEMENT_NAME);
this._doc.getRootElement().addContent(freeParametersElement);
for (int i = 0; i < freeParameters.length; i++) {
String paramName = freeParameters[i];
Element freeParameterElement = new Element(FREE_PARAMETER_ELEMENT_NAME);
freeParameterElement.setAttribute(FREE_PARAMETER_ATTRIBUTE_NAME, paramName);
freeParametersElement.addContent(freeParameterElement);
}
}
}
protected String getXMLDocument() {
XMLOutputter out = new XMLOutputter();
Format format = Format.getPrettyFormat();
out.setFormat(format);
return out.outputString(this._doc);
}
private Document _doc;
private static final String FREE_PARAMETERS_ELEMENT_NAME = "freeparameters";
private static final String FREE_PARAMETER_ELEMENT_NAME = "parameter";
private static final String FREE_PARAMETER_ATTRIBUTE_NAME = "name";
}