Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package cz.digipaper.fato.rule;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.DocumentBuilder;
- import org.w3c.dom.Document;
- import org.w3c.dom.NodeList;
- import org.w3c.dom.Node;
- import org.w3c.dom.Element;
- import java.io.File;
- import java.io.InputStream;
- import java.io.Serializable;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import org.w3c.dom.Document;
- import org.w3c.dom.NodeList;
- import org.alfresco.error.AlfrescoRuntimeException;
- import org.alfresco.model.ContentModel;
- import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
- import org.alfresco.service.ServiceRegistry;
- import org.alfresco.service.cmr.action.Action;
- import org.alfresco.service.cmr.action.ParameterDefinition;
- import org.alfresco.service.cmr.model.FileFolderService;
- import org.alfresco.service.cmr.repository.ContentData;
- import org.alfresco.service.cmr.repository.ContentReader;
- import org.alfresco.service.cmr.repository.NodeRef;
- import org.alfresco.service.cmr.repository.NodeService;
- import org.alfresco.service.cmr.repository.StoreRef;
- import org.alfresco.service.cmr.search.ResultSet;
- import org.alfresco.service.cmr.search.SearchService;
- import org.alfresco.service.namespace.QName;
- import org.springframework.extensions.webscripts.WebScriptException;
- public class ReadXml extends ActionExecuterAbstractBase {
- private ServiceRegistry serviceRegistry;
- @Override
- protected void executeImpl(Action action, NodeRef nodeRef) {
- // TODO Auto-generated method stub
- System.out.println("Ahoj já jsem tvoje pravidlo");
- // Zjisteni mimetype
- NodeService nodeService = serviceRegistry.getNodeService();
- ContentData contentData = (ContentData) nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
- String originalMimeType = contentData.getMimetype();
- System.out.println(originalMimeType);
- if (originalMimeType.equals("text/xml")) {
- try {
- ContentReader reader = serviceRegistry.getContentService().getReader(nodeRef, ContentModel.PROP_CONTENT);
- InputStream originalInputStream = reader.getContentInputStream();
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); //Tovární API pro vytvoření parseru pro XML hierarchii
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); //Vytvoření instance pro vytvoření dokumentu
- Document doc = dBuilder.parse(originalInputStream); //Vytvoření samotného dokumentu, do kterého jsou naparsovanány data z výše vytvořeného dokumentu
- doc.getDocumentElement().normalize(); // Normalizace dat v dokumentu (úprava, pro zjednodušení parsování)
- 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
- NodeList nList = doc.getElementsByTagName("Hlavicky"); //přiřazení prvků s tagem "Hlavicky" do listu
- System.out.println("----------------------------"); //vypiš ---------------------------
- for (int temp = 0; temp < nList.getLength(); temp++) { //Cyklus od 0 do N (počet prvků v dokumentu)
- Node nNode = nList.item(temp); //Vytvoření Uzlu z listu (prvek z listu získám na základě indexu "temp")
- System.out.println("\nRoot Element :" + nNode.getNodeName()); //vypiš Aktuálně první a hlavní element : "název aktuálního elemetnu" např. <zamestnanci></zamestnanci>
- if (nNode.getNodeType() == Node.ELEMENT_NODE) { // Pokud je uzel typu "Element" (obsahuje níže uvedené atributy jako ID, jméno, aj)
- Element eElement = (Element) nNode; // Vytvoření se objekt Element pomocí přetypování z uzlu a vypíšou se data, které obsahuje
- System.out.println("Číslo : " + eElement.getElementsByTagName("CISLO").item(0).getTextContent());
- System.out.println("Firma : " + eElement.getElementsByTagName("FIRMA").item(0).getTextContent()); //jelikož obsahuje text
- System.out.println("Ič : " + eElement.getElementsByTagName("IC").item(0).getTextContent());
- System.out.println("Termín zahájení : " + eElement.getElementsByTagName("DATUMZAHAJENI").item(0).getTextContent());
- System.out.println("Předpokládané ukončení : " + eElement.getElementsByTagName("DATUMPREDPUKON").item(0).getTextContent());
- System.out.println("Smluvní cena : " + eElement.getElementsByTagName("PLANOBRAT").item(0).getTextContent());
- System.out.println("Zbývá vyfakturovat : " + eElement.getElementsByTagName("ZISK").item(0).getTextContent());
- System.out.println("Náklad došlé faktury : " + eElement.getElementsByTagName("NAKLADY").item(0).getTextContent());
- //CISLO
- String cislo = eElement.getElementsByTagName("CISLO").item(0).getTextContent();
- String query = "@cm\\:name:\"subdodavka_" + cislo + "\"";
- System.out.println("Hledám: " + query);
- NodeRef subdodavkaFolder = search(query, cislo);
- System.out.println("Subdodavka OK: " + subdodavkaFolder);
- //FIRMA
- String subdodavatel = eElement.getElementsByTagName("FIRMA").item(0).getTextContent();
- //IC moje nejde
- String ico_subdodavatel = eElement.getElementsByTagName("IC").item(0).getTextContent();
- // PLANOBRAT moje nejde (protože je tam cislo 500,1 a asi to neni string)
- String celkova_cena_subdodavky = eElement.getElementsByTagName("PLANOBRAT").item(0).getTextContent();
- //nastaví metadata
- setMetadata(cislo, subdodavatel, ico_subdodavatel, celkova_cena_subdodavky, subdodavkaFolder);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else {
- throw new WebScriptException("Soubor neni text/xml");
- }
- }
- //spojení XML + metadata
- private void setMetadata(String cislo, String subdodavatel, String ico_subdodavatel, String celkova_cena_subdodavky, NodeRef nodeRef) {
- Map<QName,Serializable> metadata = new HashMap<QName,Serializable>();
- metadata.put(FatoXmlModel.PROP_FATO_SUBDODAVKA_CISLO, cislo);
- metadata.put(FatoXmlModel.PROP_FATO_SUBDODAVKA_SUBDODAVATEL_NAZEV, subdodavatel);
- metadata.put(FatoXmlModel.PROP_FATO_SUBDODAVKA_ICO_SUBDODAVATEL_NAZEV, ico_subdodavatel); //moje nejde
- metadata.put(FatoXmlModel.PROP_FATO_SUBDODAVKA_CELKOVA_CENA_SUBDODAVKY, celkova_cena_subdodavky); //moje nejde
- serviceRegistry.getNodeService().addProperties(nodeRef, metadata);
- }
- private NodeRef createSubdodavkaFolder(NodeRef parent, String cislo) {
- FileFolderService fileFolderService = serviceRegistry.getFileFolderService();
- NodeRef newSubdodavkaNodeRef = fileFolderService.create(parent, "subdodavka_" + cislo, FatoXmlModel.TYPE_FATO_SUBDODAVKA_SLOZKA)
- .getNodeRef();
- return newSubdodavkaNodeRef;
- }
- private NodeRef search(String query, String cislo) {
- SearchService searchService = serviceRegistry.getSearchService();
- StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore");
- // správně by to mělo najít složku
- ResultSet rs = searchService.query(storeRef, SearchService.LANGUAGE_LUCENE, query);
- NodeRef resultNodeRef = null;
- try {
- if (rs.length() == 0) {
- System.out.println("Didn't find query: " + query);
- NodeRef parent = search("@cm\\:name:\"subdodavka_homeFolder\"", cislo);
- NodeRef newSubdodavka = createSubdodavkaFolder(parent, cislo);
- return newSubdodavka;
- } else {
- resultNodeRef = rs.getNodeRef(0);
- System.out.println("Našel jsem: " + resultNodeRef);
- return resultNodeRef;
- }
- } finally {
- rs.close();
- }
- }
- @Override
- protected void addParameterDefinitions(List<ParameterDefinition> param) {
- // TODO Auto-generated method stub
- }
- public void setServiceRegistry(ServiceRegistry serviceRegistry) {
- this.serviceRegistry = serviceRegistry;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement