Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package smc.plugin.form;
- import java.io.File;
- import java.util.HashMap;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.NodeList;
- import smc.broker.plugin.IVersionablePO;
- import smc.broker.plugin.PluginObjectFactory;
- import smc.broker.util.BrokerContext;
- import smc.broker.util.FolderUtils;
- import smc.transform.core.ClassBasedTrafo;
- import smc.transform.core.Plugin;
- import smc.transform.core.PluginException;
- import smc.util.Constants;
- import smc.util.Context;
- import smc.util.XMLHandler;
- import smc.xml.xpath.XPath;
- public class ProcessFieldDocuments implements ClassBasedTrafo {
- private static final Logger log = LoggerFactory
- .getLogger(ProcessFieldDocuments.class);
- public Document getDocument(Document sourceDoc,
- HashMap<String, String> params, Context context)
- throws PluginException {
- HashMap<String, String> trafos = new HashMap<String, String>();
- String language = params.get("language");
- String objType = params.get("objType");
- String uri = params.get("uri");
- String hardcodedFile = "fileriskdoc.xml";
- log.info("URI: "+uri);
- //filter object type to get document from form.project only
- if (objType.equals("form.project")) {
- BrokerContext bcontext = (BrokerContext) context;
- Plugin docPlugin = bcontext.getTransformerRepository().getPlugin("form");
- String path = new StringBuilder().append(docPlugin.getLocation()).append(File.separatorChar)
- .append("config").append(File.separatorChar).append(hardcodedFile).toString();
- log.info("fileLocation: " + path);
- try {
- //get the fields we need documents
- Document doc = XMLHandler.readDocument(path);
- if(doc!=null){
- loadFieldsTrafo(doc, trafos);
- // get all fields from document
- NodeList fieldList = XPath.selectNodeList(sourceDoc,
- "/Note/Field");
- for (int i = 0; i < fieldList.getLength(); i++) {
- Element field = (Element)fieldList.item(i);
- String fieldName = field.getAttribute("name");
- String txt = field.getTextContent();
- log.info(fieldName);
- applyTrafo(trafos,uri, fieldName, txt, bcontext, language);
- }
- }
- } catch (Exception e) {
- log.error("Error generating ACL", e);
- }
- }
- return sourceDoc;
- }
- private void loadFieldsTrafo(Document doc, HashMap<String, String>trafos) {
- NodeList fieldList = XPath.selectNodeList(doc,
- "/Fields/Field");
- for (int i = 0; i < fieldList.getLength(); i++) {
- Element field = (Element)fieldList.item(i);
- String fieldName = field.getAttribute("name");
- String fieldTrafo = field.getAttribute("trafo");
- trafos.put(fieldName, fieldTrafo);
- }
- }
- private void applyTrafo(HashMap<String, String>trafos, String uri, String docName,
- String txt, BrokerContext bcontext, String language) {
- if(trafos.containsKey(docName)){
- log.info("TRAFO: "+trafos.get(docName));
- String folder = uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf("."));
- String containerUri = uri.substring(0, uri.lastIndexOf("/"))+"/"+folder;
- try {
- //check and create folder if it doesn't exist
- //The folder has the same name that the form
- FolderUtils.mkFolders(containerUri, bcontext.getDataAPI(), bcontext.getCredentials());
- IVersionablePO po = PluginObjectFactory.getFileBasedPluginObject(Constants.OBJECT_TYPE_DOCUMENT, bcontext);
- if (!po.existsObject(containerUri, docName)){
- po.createObject(containerUri, docName, language, true);
- }
- //udate document with txt
- } catch (Exception e) {
- log.error("Problem creating/updating document", e);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement