Fix some warnings in OOXMLLite and move copyFile to IOUtils
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1808621 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b644047b70
commit
2917583bd2
@ -17,13 +17,7 @@
|
|||||||
|
|
||||||
package org.apache.poi.util;
|
package org.apache.poi.util;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.*;
|
||||||
import java.io.Closeable;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.PushbackInputStream;
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.channels.ReadableByteChannel;
|
import java.nio.channels.ReadableByteChannel;
|
||||||
import java.util.zip.CRC32;
|
import java.util.zip.CRC32;
|
||||||
@ -331,6 +325,10 @@ public final class IOUtils {
|
|||||||
/**
|
/**
|
||||||
* Copies all the data from the given InputStream to the OutputStream. It
|
* Copies all the data from the given InputStream to the OutputStream. It
|
||||||
* leaves both streams open, so you will still need to close them once done.
|
* leaves both streams open, so you will still need to close them once done.
|
||||||
|
*
|
||||||
|
* @param inp The {@link InputStream} which provides the data
|
||||||
|
* @param out The {@link OutputStream} to write the data to
|
||||||
|
* @throws IOException If copying the data fails.
|
||||||
*/
|
*/
|
||||||
public static void copy(InputStream inp, OutputStream out) throws IOException {
|
public static void copy(InputStream inp, OutputStream out) throws IOException {
|
||||||
byte[] buff = new byte[4096];
|
byte[] buff = new byte[4096];
|
||||||
@ -345,6 +343,24 @@ public final class IOUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy the contents of the stream to a new file.
|
||||||
|
*
|
||||||
|
* @param srcStream The {@link InputStream} which provides the data
|
||||||
|
* @param destFile The file where the data should be stored
|
||||||
|
* @throws IOException If the target directory does not exist and cannot be created
|
||||||
|
* or if copying the data fails.
|
||||||
|
*/
|
||||||
|
public static void copy(InputStream srcStream, File destFile) throws IOException {
|
||||||
|
File destDirectory = destFile.getParentFile();
|
||||||
|
if (!(destDirectory.exists() || destDirectory.mkdirs())) {
|
||||||
|
throw new RuntimeException("Can't create destination directory: "+destDirectory);
|
||||||
|
}
|
||||||
|
try (OutputStream destStream = new FileOutputStream(destFile)) {
|
||||||
|
IOUtils.copy(srcStream, destStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate checksum on input data
|
* Calculate checksum on input data
|
||||||
*/
|
*/
|
||||||
|
@ -18,10 +18,7 @@
|
|||||||
package org.apache.poi.util;
|
package org.apache.poi.util;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@ -52,6 +49,7 @@ import org.junit.runner.Result;
|
|||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public final class OOXMLLite {
|
public final class OOXMLLite {
|
||||||
|
private static final Pattern SCHEMA_PATTERN = Pattern.compile("schemaorg_apache_xmlbeans/(system|element)/.*\\.xsb");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destination directory to copy filtered classes
|
* Destination directory to copy filtered classes
|
||||||
@ -80,9 +78,17 @@ public final class OOXMLLite {
|
|||||||
String dest = null, test = null, ooxml = null;
|
String dest = null, test = null, ooxml = null;
|
||||||
|
|
||||||
for (int i = 0; i < args.length; i++) {
|
for (int i = 0; i < args.length; i++) {
|
||||||
if (args[i].equals("-dest")) dest = args[++i];
|
switch (args[i]) {
|
||||||
else if (args[i].equals("-test")) test = args[++i];
|
case "-dest":
|
||||||
else if (args[i].equals("-ooxml")) ooxml = args[++i];
|
dest = args[++i];
|
||||||
|
break;
|
||||||
|
case "-test":
|
||||||
|
test = args[++i];
|
||||||
|
break;
|
||||||
|
case "-ooxml":
|
||||||
|
ooxml = args[++i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
OOXMLLite builder = new OOXMLLite(dest, test, ooxml);
|
OOXMLLite builder = new OOXMLLite(dest, test, ooxml);
|
||||||
builder.build();
|
builder.build();
|
||||||
@ -152,7 +158,7 @@ public final class OOXMLLite {
|
|||||||
String className = cls.getName();
|
String className = cls.getName();
|
||||||
String classRef = className.replace('.', '/') + ".class";
|
String classRef = className.replace('.', '/') + ".class";
|
||||||
File destFile = new File(_destDest, classRef);
|
File destFile = new File(_destDest, classRef);
|
||||||
copyFile(cls.getResourceAsStream('/' + classRef), destFile);
|
IOUtils.copy(cls.getResourceAsStream('/' + classRef), destFile);
|
||||||
|
|
||||||
if(cls.isInterface()){
|
if(cls.isInterface()){
|
||||||
/// Copy classes and interfaces declared as members of this class
|
/// Copy classes and interfaces declared as members of this class
|
||||||
@ -160,25 +166,21 @@ public final class OOXMLLite {
|
|||||||
className = fc.getName();
|
className = fc.getName();
|
||||||
classRef = className.replace('.', '/') + ".class";
|
classRef = className.replace('.', '/') + ".class";
|
||||||
destFile = new File(_destDest, classRef);
|
destFile = new File(_destDest, classRef);
|
||||||
copyFile(fc.getResourceAsStream('/' + classRef), destFile);
|
IOUtils.copy(fc.getResourceAsStream('/' + classRef), destFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//finally copy the compiled .xsb files
|
//finally copy the compiled .xsb files
|
||||||
System.out.println("Copying .xsb resources");
|
System.out.println("Copying .xsb resources");
|
||||||
JarFile jar = new JarFile(_ooxmlJar);
|
try (JarFile jar = new JarFile(_ooxmlJar)) {
|
||||||
Pattern p = Pattern.compile("schemaorg_apache_xmlbeans/(system|element)/.*\\.xsb");
|
for (Enumeration<JarEntry> e = jar.entries(); e.hasMoreElements(); ) {
|
||||||
try {
|
|
||||||
for(Enumeration<JarEntry> e = jar.entries(); e.hasMoreElements(); ){
|
|
||||||
JarEntry je = e.nextElement();
|
JarEntry je = e.nextElement();
|
||||||
if(p.matcher(je.getName()).matches()) {
|
if (SCHEMA_PATTERN.matcher(je.getName()).matches()) {
|
||||||
File destFile = new File(_destDest, je.getName());
|
File destFile = new File(_destDest, je.getName());
|
||||||
copyFile(jar.getInputStream(je), destFile);
|
IOUtils.copy(jar.getInputStream(je), destFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
|
||||||
jar.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,18 +298,4 @@ public final class OOXMLLite {
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void copyFile(InputStream srcStream, File destFile) throws IOException {
|
|
||||||
File destDirectory = destFile.getParentFile();
|
|
||||||
if (!(destDirectory.exists() || destDirectory.mkdirs())) {
|
|
||||||
throw new RuntimeException("Can't create destination directory: "+destDirectory);
|
|
||||||
}
|
|
||||||
OutputStream destStream = new FileOutputStream(destFile);
|
|
||||||
try {
|
|
||||||
IOUtils.copy(srcStream, destStream);
|
|
||||||
} finally {
|
|
||||||
destStream.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user