Added backend support for multiple files in XSLT. #272
@@ -4,15 +4,11 @@ import com.google.gson.Gson;
 | 
				
			|||||||
import com.r11.tools.controller.internal.*;
 | 
					import com.r11.tools.controller.internal.*;
 | 
				
			||||||
import com.r11.tools.model.XMLMultipleFilesBody;
 | 
					import com.r11.tools.model.XMLMultipleFilesBody;
 | 
				
			||||||
import com.r11.tools.model.XMLResponseBody;
 | 
					import com.r11.tools.model.XMLResponseBody;
 | 
				
			||||||
import com.r11.tools.xml.Saxon;
 | 
					 | 
				
			||||||
import com.r11.tools.xml.XmlEngine;
 | 
					import com.r11.tools.xml.XmlEngine;
 | 
				
			||||||
import net.sf.saxon.s9api.SaxonApiException;
 | 
					 | 
				
			||||||
import org.apache.logging.log4j.Logger;
 | 
					import org.apache.logging.log4j.Logger;
 | 
				
			||||||
import spark.Request;
 | 
					import spark.Request;
 | 
				
			||||||
import spark.Response;
 | 
					import spark.Response;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.IOException;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@GlobalControllerManifest
 | 
					@GlobalControllerManifest
 | 
				
			||||||
public class MultipleXMLController implements RestController {
 | 
					public class MultipleXMLController implements RestController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,6 @@ package com.r11.tools.controller;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.google.gson.Gson;
 | 
					import com.google.gson.Gson;
 | 
				
			||||||
import com.r11.tools.controller.internal.*;
 | 
					import com.r11.tools.controller.internal.*;
 | 
				
			||||||
import com.r11.tools.model.XMLMultipleFilesBody;
 | 
					 | 
				
			||||||
import com.r11.tools.model.XMLRequestBody;
 | 
					import com.r11.tools.model.XMLRequestBody;
 | 
				
			||||||
import com.r11.tools.model.XMLResponseBody;
 | 
					import com.r11.tools.model.XMLResponseBody;
 | 
				
			||||||
import com.r11.tools.model.XPathQueryResult;
 | 
					import com.r11.tools.model.XPathQueryResult;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,6 @@
 | 
				
			|||||||
package com.r11.tools.controller.internal;
 | 
					package com.r11.tools.controller.internal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.r11.tools.model.XMLMultipleFilesBody;
 | 
					import com.r11.tools.model.XMLMultipleFilesBody;
 | 
				
			||||||
import com.r11.tools.model.XMLRequestBody;
 | 
					 | 
				
			||||||
import com.r11.tools.xml.Saxon;
 | 
					 | 
				
			||||||
import com.r11.tools.xml.XmlEngine;
 | 
					import com.r11.tools.xml.XmlEngine;
 | 
				
			||||||
| 
						
							
	
	
	
	
	
	
	
	 | 
				|||||||
import spark.Response;
 | 
					import spark.Response;
 | 
				
			||||||
| 
						
							
	
	
	
	
	
	
	
	 
				
					
						bema
						commented  
			
		Same as above Same as above 
			
			
		 | 
				|||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,27 +24,16 @@ public class Saxon implements XmlEngine{
 | 
				
			|||||||
     * @param transform XSLT
 | 
					     * @param transform XSLT
 | 
				
			||||||
     * @return transformed xml
 | 
					     * @return transformed xml
 | 
				
			||||||
     * @throws SaxonApiException thrown on stylesheet or transformation error
 | 
					     * @throws SaxonApiException thrown on stylesheet or transformation error
 | 
				
			||||||
 | 
					     * @throws IOException thrown when file does not exist, or cannot be read.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public String processXSLT(XMLMultipleFilesData[] data, String transform) throws SaxonApiException, IOException{
 | 
					    public String processXSLT(XMLMultipleFilesData[] data, String transform) throws SaxonApiException, IOException{
 | 
				
			||||||
        Processor processor = new Processor(false);
 | 
					        Processor processor = new Processor(false);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        XsltCompiler compiler = processor.newXsltCompiler();
 | 
					        XsltCompiler compiler = processor.newXsltCompiler();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String filesPath = "/tmp/"+UUID.randomUUID()+"/";
 | 
					        String filesPath = "/tmp/"+UUID.randomUUID()+"/";
 | 
				
			||||||
        try{
 | 
					        try{
 | 
				
			||||||
            Path processPath = Paths.get(filesPath);
 | 
					            createXMLFilesFromData(data, filesPath);
 | 
				
			||||||
            Files.createDirectories(processPath);
 | 
					            Path transformPath = createXSLTFileAndReturnPath(transform,filesPath);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            for (XMLMultipleFilesData fileData : data) {
 | 
					 | 
				
			||||||
                Path filePath = Files.createFile( Paths.get(filesPath + fileData.getFilename() ) );
 | 
					 | 
				
			||||||
                try (FileWriter writer = new FileWriter(filePath.toFile())) {
 | 
					 | 
				
			||||||
                    writer.write(fileData.getData());
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            Path transformPath = Files.createFile( Paths.get(filesPath + "transform.xsl") );
 | 
					 | 
				
			||||||
            FileWriter writer = new FileWriter(transformPath.toFile());
 | 
					 | 
				
			||||||
            writer.write(transform);
 | 
					 | 
				
			||||||
            writer.close();
 | 
					 | 
				
			||||||
            XsltExecutable stylesheet = compiler.compile( new StreamSource( transformPath.toFile() ));
 | 
					            XsltExecutable stylesheet = compiler.compile( new StreamSource( transformPath.toFile() ));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            StringWriter sw = new StringWriter();
 | 
					            StringWriter sw = new StringWriter();
 | 
				
			||||||
@@ -54,17 +43,39 @@ public class Saxon implements XmlEngine{
 | 
				
			|||||||
            Xslt30Transformer transformer = stylesheet.load30();
 | 
					            Xslt30Transformer transformer = stylesheet.load30();
 | 
				
			||||||
            transformer.transform( new StreamSource( new File(filesPath+data[0].getFilename()) ) , out );
 | 
					            transformer.transform( new StreamSource( new File(filesPath+data[0].getFilename()) ) , out );
 | 
				
			||||||
            return sw.toString();
 | 
					            return sw.toString();
 | 
				
			||||||
 | 
					 | 
				
			||||||
        } finally {
 | 
					        } finally {
 | 
				
			||||||
            Files
 | 
					            deleteTemporaryFiles(filesPath);
 | 
				
			||||||
                    .walk( Paths.get(filesPath) )
 | 
					 | 
				
			||||||
                    .sorted(Comparator.reverseOrder())
 | 
					 | 
				
			||||||
                    .map(Path::toFile)
 | 
					 | 
				
			||||||
                    .forEach(File::delete);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void createXMLFilesFromData( XMLMultipleFilesData[] data , String filesPath ) throws IOException {
 | 
				
			||||||
 | 
					        Files.createDirectories(Paths.get(filesPath));
 | 
				
			||||||
 | 
					        for (XMLMultipleFilesData fileData : data) {
 | 
				
			||||||
 | 
					            Path filePath = Files.createFile( Paths.get(filesPath + fileData.getFilename() ) );
 | 
				
			||||||
 | 
					            try (FileWriter writer = new FileWriter(filePath.toFile())) {
 | 
				
			||||||
 | 
					                writer.write(fileData.getData());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Path createXSLTFileAndReturnPath( String xsltTransform, String filesPath ) throws IOException {
 | 
				
			||||||
 | 
					        Path transformPath = Files.createFile( Paths.get(filesPath + "transform.xsl") );
 | 
				
			||||||
 | 
					        FileWriter writer = new FileWriter(transformPath.toFile());
 | 
				
			||||||
 | 
					        writer.write(xsltTransform);
 | 
				
			||||||
 | 
					        writer.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return transformPath;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void deleteTemporaryFiles(String filesPath) throws IOException {
 | 
				
			||||||
 | 
					        Files
 | 
				
			||||||
 | 
					                .walk( Paths.get(filesPath) )
 | 
				
			||||||
 | 
					                .sorted(Comparator.reverseOrder())
 | 
				
			||||||
 | 
					                .map(Path::toFile)
 | 
				
			||||||
 | 
					                .forEach(File::delete);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Transforms string containing xml document via xslt
 | 
					     * Transforms string containing xml document via xslt
 | 
				
			||||||
     * @param data xml to be transformed
 | 
					     * @param data xml to be transformed
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user
	
Unused import, removal needed