Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 4.05 KB | None | 0 0
  1. package smc.plugin.form;
  2.  
  3. import java.io.File;
  4. import java.util.HashMap;
  5.  
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.w3c.dom.Document;
  9. import org.w3c.dom.Element;
  10. import org.w3c.dom.NodeList;
  11.  
  12. import smc.broker.plugin.IVersionablePO;
  13. import smc.broker.plugin.PluginObjectFactory;
  14. import smc.broker.util.BrokerContext;
  15. import smc.broker.util.FolderUtils;
  16. import smc.transform.core.ClassBasedTrafo;
  17. import smc.transform.core.Plugin;
  18. import smc.transform.core.PluginException;
  19. import smc.util.Constants;
  20. import smc.util.Context;
  21. import smc.util.XMLHandler;
  22. import smc.xml.xpath.XPath;
  23.  
  24. public class ProcessFieldDocuments implements ClassBasedTrafo {
  25.     private static final Logger log = LoggerFactory
  26.     .getLogger(ProcessFieldDocuments.class);
  27.  
  28.    
  29.  
  30.     public Document getDocument(Document sourceDoc,
  31.             HashMap<String, String> params, Context context)
  32.             throws PluginException {
  33.         HashMap<String, String> trafos = new HashMap<String, String>();
  34.         String language = params.get("language");
  35.         String objType = params.get("objType");
  36.         String uri = params.get("uri");
  37.         String field2doc = "form.field2doc.xml";
  38.         log.info("URI: "+uri);
  39.        
  40.         //filter object type to get document from form.project only
  41.         if (objType.equals("form.project")) {
  42.             BrokerContext bcontext = (BrokerContext) context;
  43.             Plugin  docPlugin = bcontext.getTransformerRepository().getPlugin("form");
  44.             String path = new StringBuilder().append(docPlugin.getLocation()).append(File.separatorChar)
  45.             .append("config").append(File.separatorChar).append(field2doc).toString();
  46.             log.info("fileLocation: " + path);
  47.            
  48.  
  49.             try {
  50.                 //get the fields we need documents
  51.                 Document doc =  XMLHandler.readDocument(path);
  52.                 if(doc!=null){
  53.                     loadFieldsTrafo(doc, trafos);
  54.                     // get all fields from document
  55.                     NodeList fieldList = XPath.selectNodeList(sourceDoc,
  56.                             "/Note/Field");
  57.                     for (int i = 0; i < fieldList.getLength(); i++) {
  58.                         Element fieldElem = (Element)fieldList.item(i);
  59.                         String fieldName = fieldElem.getAttribute("name");
  60.                         if(trafos.containsKey(fieldName)){
  61.                             applyTrafo(fieldElem, trafos, uri, bcontext, language);
  62.                         }
  63.                     }
  64.                 }
  65.             } catch (Exception e) {
  66.                 log.error("Error generating ACL", e);
  67.             }
  68.  
  69.         }
  70.         return sourceDoc;
  71.     }
  72.  
  73.     private void loadFieldsTrafo(Document doc, HashMap<String, String>trafos) {
  74.         NodeList fieldList = XPath.selectNodeList(doc,
  75.         "/Fields/Field");
  76.         for (int i = 0; i < fieldList.getLength(); i++) {
  77.             Element field = (Element)fieldList.item(i);
  78.             String fieldName = field.getAttribute("name");
  79.             String fieldTrafo = field.getAttribute("trafo");
  80.             trafos.put(fieldName, fieldTrafo);
  81.         }
  82.     }
  83.  
  84.     private void applyTrafo(Element fieldElem, HashMap<String, String> trafos, String uri, BrokerContext bcontext, String language) {
  85.  
  86.         //log.info("TRAFO: "+trafos.get(docName));
  87.         String docName = fieldElem.getAttribute("name");
  88.         String trafoName = trafos.get(docName);
  89.         //get name's folder, it matches with form's name
  90.         String folderName = uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf("."));
  91.         //the folder should be at the same level than the form
  92.         String folderPath = uri.substring(0, uri.lastIndexOf("/")+1)+folderName;
  93.         //the document's name matches with field's name. There should be one document for each
  94.         //field set up in fielWithDoc
  95.         String docUri = folderPath+"/"+docName+".theme";
  96.         try {
  97.             //check and create folders if they don't exist
  98.             //The foldes has the same name that the form               
  99.             FolderUtils.mkFolders(folderPath, bcontext.getDataAPI(), bcontext.getCredentials());
  100.             IVersionablePO po = PluginObjectFactory.getFileBasedPluginObject(Constants.OBJECT_TYPE_DOCUMENT, bcontext);
  101.             if (!po.existsObject(folderPath, docName)){
  102.                 po.createObject(folderPath, docName, language, true);
  103.             }
  104.             Document contentDoc = po.transform(XMLHandler.createDocument(fieldElem), language, trafoName, null);
  105.             po.save(docUri, language, contentDoc);
  106.         } catch (Exception e) {
  107.             log.error("Problem creating/updating document", e);
  108.         }          
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement