Advertisement
Wity

ReadXML.java

Oct 17th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package cz.digipaper.fato.rule;
  2.  
  3. import javax.xml.parsers.DocumentBuilderFactory;
  4. import javax.xml.parsers.DocumentBuilder;
  5. import org.w3c.dom.Document;
  6. import org.w3c.dom.NodeList;
  7. import org.w3c.dom.Node;
  8. import org.w3c.dom.Element;
  9. import java.io.File;
  10. import java.io.InputStream;
  11. import java.io.Serializable;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15.  
  16. import javax.xml.parsers.DocumentBuilder;
  17. import javax.xml.parsers.DocumentBuilderFactory;
  18. import org.w3c.dom.Document;
  19. import org.w3c.dom.NodeList;
  20. import org.alfresco.error.AlfrescoRuntimeException;
  21. import org.alfresco.model.ContentModel;
  22. import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
  23. import org.alfresco.service.ServiceRegistry;
  24. import org.alfresco.service.cmr.action.Action;
  25. import org.alfresco.service.cmr.action.ParameterDefinition;
  26. import org.alfresco.service.cmr.model.FileFolderService;
  27. import org.alfresco.service.cmr.repository.ContentData;
  28. import org.alfresco.service.cmr.repository.ContentReader;
  29. import org.alfresco.service.cmr.repository.NodeRef;
  30. import org.alfresco.service.cmr.repository.NodeService;
  31. import org.alfresco.service.cmr.repository.StoreRef;
  32. import org.alfresco.service.cmr.search.ResultSet;
  33. import org.alfresco.service.cmr.search.SearchService;
  34. import org.alfresco.service.namespace.QName;
  35. import org.springframework.extensions.webscripts.WebScriptException;
  36.  
  37. public class ReadXml extends ActionExecuterAbstractBase {
  38.  
  39.     private ServiceRegistry serviceRegistry;
  40.  
  41.     @Override
  42.     protected void executeImpl(Action action, NodeRef nodeRef) {
  43.         // TODO Auto-generated method stub
  44.         System.out.println("Ahoj já jsem tvoje pravidlo");
  45.  
  46.         // Zjisteni mimetype
  47.         NodeService nodeService = serviceRegistry.getNodeService();
  48.         ContentData contentData = (ContentData) nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
  49.         String originalMimeType = contentData.getMimetype();
  50.  
  51.         System.out.println(originalMimeType);
  52.  
  53.         if (originalMimeType.equals("text/xml")) {
  54.             try {
  55.            
  56.                 ContentReader reader = serviceRegistry.getContentService().getReader(nodeRef, ContentModel.PROP_CONTENT);
  57.                 InputStream originalInputStream = reader.getContentInputStream();
  58.            
  59.                 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); //Tovární API pro vytvoření parseru pro XML hierarchii  
  60.                 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); //Vytvoření instance pro vytvoření dokumentu
  61.                 Document doc = dBuilder.parse(originalInputStream); //Vytvoření samotného dokumentu, do kterého jsou naparsovanány data z výše vytvořeného dokumentu
  62.    
  63.                 doc.getDocumentElement().normalize(); // Normalizace dat v dokumentu (úprava, pro zjednodušení parsování)
  64.    
  65.                 System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); //vypiš Aktuální element : "název aktuálního elemetnu" např. <zamestnanci></zamestnanci> Nejspíš vždy první element
  66.    
  67.                 NodeList nList = doc.getElementsByTagName("Hlavicky"); //přiřazení prvků s tagem "Hlavicky" do listu
  68.    
  69.                 System.out.println("----------------------------"); //vypiš ---------------------------
  70.    
  71.                 for (int temp = 0; temp < nList.getLength(); temp++) { //Cyklus od 0 do N (počet prvků v dokumentu)
  72.  
  73.                     Node nNode = nList.item(temp); //Vytvoření Uzlu z listu (prvek z listu získám na základě indexu "temp")
  74.  
  75.                     System.out.println("\nRoot Element :" + nNode.getNodeName()); //vypiš Aktuálně první a hlavní element : "název aktuálního elemetnu" např. <zamestnanci></zamestnanci>
  76.                    
  77.                    
  78.                     if (nNode.getNodeType() == Node.ELEMENT_NODE) { // Pokud je uzel typu "Element" (obsahuje níže uvedené atributy jako ID, jméno, aj)
  79.  
  80.                         Element eElement = (Element) nNode; // Vytvoření se objekt Element pomocí přetypování z uzlu a vypíšou se data, které obsahuje
  81.  
  82.                         System.out.println("Číslo : " + eElement.getElementsByTagName("CISLO").item(0).getTextContent());                                            
  83.                         System.out.println("Firma : " + eElement.getElementsByTagName("FIRMA").item(0).getTextContent()); //jelikož obsahuje text
  84.                         System.out.println("Ič : " + eElement.getElementsByTagName("IC").item(0).getTextContent());
  85.                         System.out.println("Termín zahájení : " + eElement.getElementsByTagName("DATUMZAHAJENI").item(0).getTextContent());
  86.                         System.out.println("Předpokládané ukončení : " + eElement.getElementsByTagName("DATUMPREDPUKON").item(0).getTextContent());
  87.                         System.out.println("Smluvní cena : " + eElement.getElementsByTagName("PLANOBRAT").item(0).getTextContent());
  88.                         System.out.println("Zbývá vyfakturovat : " + eElement.getElementsByTagName("ZISK").item(0).getTextContent());
  89.                         System.out.println("Náklad došlé faktury : " + eElement.getElementsByTagName("NAKLADY").item(0).getTextContent());
  90.  
  91.                         //CISLO
  92.                         String cislo = eElement.getElementsByTagName("CISLO").item(0).getTextContent();
  93.                         String query = "@cm\\:name:\"subdodavka_" + cislo + "\"";
  94.                         System.out.println("Hledám: " + query);
  95.            
  96.                         NodeRef subdodavkaFolder = search(query, cislo);
  97.            
  98.                         System.out.println("Subdodavka OK: " + subdodavkaFolder);
  99.                        
  100.                         //FIRMA
  101.                         String subdodavatel = eElement.getElementsByTagName("FIRMA").item(0).getTextContent();
  102.                        
  103.                         //IC moje nejde
  104.                         String ico_subdodavatel = eElement.getElementsByTagName("IC").item(0).getTextContent();
  105.                        
  106.                         //  PLANOBRAT   moje nejde (protože je tam cislo 500,1 a asi to neni string)
  107.                         String celkova_cena_subdodavky = eElement.getElementsByTagName("PLANOBRAT").item(0).getTextContent();
  108.                        
  109.                        
  110.                         //nastaví metadata
  111.                         setMetadata(cislo, subdodavatel, ico_subdodavatel, celkova_cena_subdodavky, subdodavkaFolder);
  112.                     }
  113.                 }
  114.                
  115.             } catch (Exception e) {
  116.                 e.printStackTrace();
  117.             }
  118.         } else {
  119.             throw new WebScriptException("Soubor neni text/xml");
  120.         }
  121.  
  122.     }
  123.     //spojení XML + metadata
  124.     private void setMetadata(String cislo, String subdodavatel, String ico_subdodavatel, String celkova_cena_subdodavky, NodeRef nodeRef) {
  125.         Map<QName,Serializable> metadata = new HashMap<QName,Serializable>();
  126.         metadata.put(FatoXmlModel.PROP_FATO_SUBDODAVKA_CISLO, cislo);
  127.         metadata.put(FatoXmlModel.PROP_FATO_SUBDODAVKA_SUBDODAVATEL_NAZEV, subdodavatel);
  128.         metadata.put(FatoXmlModel.PROP_FATO_SUBDODAVKA_ICO_SUBDODAVATEL_NAZEV, ico_subdodavatel); //moje nejde
  129.         metadata.put(FatoXmlModel.PROP_FATO_SUBDODAVKA_CELKOVA_CENA_SUBDODAVKY, celkova_cena_subdodavky); //moje nejde
  130.        
  131.         serviceRegistry.getNodeService().addProperties(nodeRef, metadata);
  132.     }
  133.  
  134.     private NodeRef createSubdodavkaFolder(NodeRef parent, String cislo) {
  135.         FileFolderService fileFolderService = serviceRegistry.getFileFolderService();
  136.         NodeRef newSubdodavkaNodeRef = fileFolderService.create(parent, "subdodavka_" + cislo, FatoXmlModel.TYPE_FATO_SUBDODAVKA_SLOZKA)
  137.                 .getNodeRef();
  138.  
  139.         return newSubdodavkaNodeRef;
  140.  
  141.     }
  142.  
  143.     private NodeRef search(String query, String cislo) {
  144.         SearchService searchService = serviceRegistry.getSearchService();
  145.         StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore");
  146.  
  147.         // správně by to mělo najít složku
  148.         ResultSet rs = searchService.query(storeRef, SearchService.LANGUAGE_LUCENE, query);
  149.  
  150.         NodeRef resultNodeRef = null;
  151.  
  152.         try {
  153.             if (rs.length() == 0) {
  154.                 System.out.println("Didn't find query: " + query);
  155.                 NodeRef parent = search("@cm\\:name:\"subdodavka_homeFolder\"", cislo);
  156.  
  157.                 NodeRef newSubdodavka = createSubdodavkaFolder(parent, cislo);
  158.  
  159.                 return newSubdodavka;
  160.  
  161.             } else {
  162.                 resultNodeRef = rs.getNodeRef(0);
  163.  
  164.                 System.out.println("Našel jsem: " + resultNodeRef);
  165.  
  166.                 return resultNodeRef;
  167.             }
  168.         } finally {
  169.             rs.close();
  170.         }
  171.  
  172.     }
  173.  
  174.     @Override
  175.     protected void addParameterDefinitions(List<ParameterDefinition> param) {
  176.         // TODO Auto-generated method stub
  177.  
  178.     }
  179.  
  180.     public void setServiceRegistry(ServiceRegistry serviceRegistry) {
  181.         this.serviceRegistry = serviceRegistry;
  182.     }
  183.  
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement