diff --git a/src/ooxml/java/org/apache/poi/sl/SlideShowFactory.java b/src/ooxml/java/org/apache/poi/sl/SlideShowFactory.java deleted file mode 100644 index 19446c98c..000000000 --- a/src/ooxml/java/org/apache/poi/sl/SlideShowFactory.java +++ /dev/null @@ -1,298 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ -package org.apache.poi.sl; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.PushbackInputStream; -import java.security.GeneralSecurityException; - -import org.apache.poi.EmptyFileException; -import org.apache.poi.EncryptedDocumentException; -import org.apache.poi.POIXMLDocument; -import org.apache.poi.hslf.usermodel.HSLFSlideShow; -import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.openxml4j.opc.PackageAccess; -import org.apache.poi.poifs.crypt.Decryptor; -import org.apache.poi.poifs.crypt.EncryptionInfo; -import org.apache.poi.poifs.filesystem.DirectoryNode; -import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; -import org.apache.poi.poifs.filesystem.OfficeXmlFileException; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; -import org.apache.poi.sl.usermodel.SlideShow; -import org.apache.poi.util.IOUtils; -import org.apache.poi.xslf.usermodel.XMLSlideShow; - -public class SlideShowFactory { - /** - * Creates a HSLFSlideShow from the given POIFSFileSystem - *

Note that in order to properly release resources the - * SlideShow should be closed after use. - */ - public static SlideShow create(POIFSFileSystem fs) throws IOException { - return new HSLFSlideShow(fs); - } - - /** - * Creates a HSLFSlideShow from the given NPOIFSFileSystem - *

Note that in order to properly release resources the - * SlideShow should be closed after use. - */ - public static SlideShow create(NPOIFSFileSystem fs) throws IOException { - try { - return create(fs, null); - } catch (InvalidFormatException e) { - // Special case of OOXML-in-POIFS which is broken - throw new IOException(e); - } - } - - /** - * Creates a SlideShow from the given NPOIFSFileSystem, which may - * be password protected - * - * @param fs The {@link NPOIFSFileSystem} to read the document from - * @param password The password that should be used or null if no password is necessary. - * - * @return The created SlideShow - * - * @throws IOException if an error occurs while reading the data - * @throws InvalidFormatException if the contents of the file cannot be parsed into a {@link SlideShow} - */ - private static SlideShow create(NPOIFSFileSystem fs, String password) throws IOException, InvalidFormatException { - DirectoryNode root = fs.getRoot(); - - // Encrypted OOXML files go inside OLE2 containers, is this one? - if (root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) { - EncryptionInfo info = new EncryptionInfo(fs); - Decryptor d = Decryptor.getInstance(info); - - boolean passwordCorrect = false; - InputStream stream = null; - try { - if (password != null && d.verifyPassword(password)) { - passwordCorrect = true; - } - if (!passwordCorrect && d.verifyPassword(Decryptor.DEFAULT_PASSWORD)) { - passwordCorrect = true; - } - if (passwordCorrect) { - stream = d.getDataStream(root); - } - } catch (GeneralSecurityException e) { - throw new IOException(e); - } - - if (! passwordCorrect) { - if (password != null) - throw new EncryptedDocumentException("Password incorrect"); - else - throw new EncryptedDocumentException("The supplied spreadsheet is protected, but no password was supplied"); - } - - OPCPackage pkg = OPCPackage.open(stream); - return create(pkg); - } - - // If we get here, it isn't an encrypted PPTX file - // So, treat it as a regular HSLF PPT one - if (password != null) { - Biff8EncryptionKey.setCurrentUserPassword(password); - } - SlideShow wb = new HSLFSlideShow(root); - Biff8EncryptionKey.setCurrentUserPassword(null); - return wb; - } - - /** - * Creates a XMLSlideShow from the given OOXML Package - * - *

Note that in order to properly release resources the - * SlideShow should be closed after use.

- * - * @param pkg The {@link OPCPackage} opened for reading data. - * - * @return The created SlideShow - * - * @throws IOException if an error occurs while reading the data - */ - public static SlideShow create(OPCPackage pkg) throws IOException { - return new XMLSlideShow(pkg); - } - - /** - * Creates the appropriate HSLFSlideShow / XMLSlideShow from - * the given InputStream. - * - *

Your input stream MUST either support mark/reset, or - * be wrapped as a {@link PushbackInputStream}! Note that - * using an {@link InputStream} has a higher memory footprint - * than using a {@link File}.

- * - *

Note that in order to properly release resources the - * SlideShow should be closed after use. Note also that loading - * from an InputStream requires more memory than loading - * from a File, so prefer {@link #create(File)} where possible. - * - * @param inp The {@link InputStream} to read data from. - * - * @return The created SlideShow - * - * @throws IOException if an error occurs while reading the data - * @throws InvalidFormatException if the contents of the file cannot be parsed into a {@link SlideShow} - * @throws EncryptedDocumentException If the SlideShow given is password protected - */ - public static SlideShow create(InputStream inp) throws IOException, InvalidFormatException, EncryptedDocumentException { - return create(inp, null); - } - - /** - * Creates the appropriate HSLFSlideShow / XMLSlideShow from - * the given InputStream, which may be password protected. - *

Your input stream MUST either support mark/reset, or - * be wrapped as a {@link PushbackInputStream}! Note that - * using an {@link InputStream} has a higher memory footprint - * than using a {@link File}.

- * - *

Note that in order to properly release resources the - * SlideShow should be closed after use. Note also that loading - * from an InputStream requires more memory than loading - * from a File, so prefer {@link #create(File)} where possible.

- * - * @param inp The {@link InputStream} to read data from. - * @param password The password that should be used or null if no password is necessary. - * - * @return The created SlideShow - * - * @throws IOException if an error occurs while reading the data - * @throws InvalidFormatException if the contents of the file cannot be parsed into a {@link SlideShow} - * @throws EncryptedDocumentException If the wrong password is given for a protected file - * @throws EmptyFileException If an empty stream is given - */ - public static SlideShow create(InputStream inp, String password) throws IOException, InvalidFormatException, EncryptedDocumentException { - // If clearly doesn't do mark/reset, wrap up - if (! inp.markSupported()) { - inp = new PushbackInputStream(inp, 8); - } - - // Ensure that there is at least some data there - byte[] header8 = IOUtils.peekFirst8Bytes(inp); - - // Try to create - if (NPOIFSFileSystem.hasPOIFSHeader(header8)) { - NPOIFSFileSystem fs = new NPOIFSFileSystem(inp); - return create(fs, password); - } - if (POIXMLDocument.hasOOXMLHeader(inp)) { - return new XMLSlideShow(OPCPackage.open(inp)); - } - throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream"); - } - - /** - * Creates the appropriate HSLFSlideShow / XMLSlideShow from - * the given File, which must exist and be readable. - *

Note that in order to properly release resources the - * SlideShow should be closed after use. - * - * @param file The file to read data from. - * - * @return The created SlideShow - * - * @throws IOException if an error occurs while reading the data - * @throws InvalidFormatException if the contents of the file cannot be parsed into a {@link SlideShow} - * @throws EncryptedDocumentException If the SlideShow given is password protected - */ - public static SlideShow create(File file) throws IOException, InvalidFormatException, EncryptedDocumentException { - return create(file, null); - } - - /** - * Creates the appropriate HSLFSlideShow / XMLSlideShow from - * the given File, which must exist and be readable, and - * may be password protected - *

Note that in order to properly release resources the - * SlideShow should be closed after use. - * - * @param file The file to read data from. - * @param password The password that should be used or null if no password is necessary. - * - * @return The created SlideShow - * - * @throws IOException if an error occurs while reading the data - * @throws InvalidFormatException if the contents of the file cannot be parsed into a {@link SlideShow} - * @throws EncryptedDocumentException If the wrong password is given for a protected file - * @throws EmptyFileException If an empty stream is given - */ - public static SlideShow create(File file, String password) throws IOException, InvalidFormatException, EncryptedDocumentException { - return create(file, password, false); - } - - /** - * Creates the appropriate HSLFSlideShow / XMLSlideShow from - * the given File, which must exist and be readable, and - * may be password protected - *

Note that in order to properly release resources the - * SlideShow should be closed after use. - * - * @param file The file to read data from. - * @param password The password that should be used or null if no password is necessary. - * @param readOnly If the SlideShow should be opened in read-only mode to avoid writing back - * changes when the document is closed. - * - * @return The created SlideShow - * - * @throws IOException if an error occurs while reading the data - * @throws InvalidFormatException if the contents of the file cannot be parsed into a {@link SlideShow} - * @throws EncryptedDocumentException If the wrong password is given for a protected file - * @throws EmptyFileException If an empty stream is given - */ - public static SlideShow create(File file, String password, boolean readOnly) throws IOException, InvalidFormatException, EncryptedDocumentException { - if (! file.exists()) { - throw new FileNotFoundException(file.toString()); - } - - try { - NPOIFSFileSystem fs = new NPOIFSFileSystem(file, readOnly); - return create(fs, password); - } catch(OfficeXmlFileException e) { - // opening as .ppt failed => try opening as .pptx - OPCPackage pkg = OPCPackage.open(file, readOnly ? PackageAccess.READ : PackageAccess.READ_WRITE); - try { - return new XMLSlideShow(pkg); -// } catch (IOException ioe) { -// // ensure that file handles are closed (use revert() to not re-write the file) -// pkg.revert(); -// //pkg.close(); -// -// // rethrow exception -// throw ioe; - } catch (IllegalArgumentException ioe) { - // ensure that file handles are closed (use revert() to not re-write the file) - pkg.revert(); - //pkg.close(); - - // rethrow exception - throw ioe; - } - } - } -}