| /* ==================================================================== |
| 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.xdgf.usermodel; |
| |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import com.microsoft.schemas.office.visio.x2012.main.PageType; |
| import com.microsoft.schemas.office.visio.x2012.main.PagesDocument; |
| import com.microsoft.schemas.office.visio.x2012.main.PagesType; |
| import org.apache.poi.ooxml.POIXMLDocumentPart; |
| import org.apache.poi.ooxml.POIXMLException; |
| import org.apache.poi.openxml4j.opc.PackagePart; |
| import org.apache.poi.util.Internal; |
| import org.apache.poi.xdgf.exceptions.XDGFException; |
| import org.apache.poi.xdgf.xml.XDGFXMLDocumentPart; |
| import org.apache.xmlbeans.XmlException; |
| |
| |
| /** |
| * Contains a list of Page objects (not page content!) |
| */ |
| public class XDGFPages extends XDGFXMLDocumentPart { |
| |
| PagesType _pagesObject; |
| |
| // ordered by page number |
| List<XDGFPage> _pages = new ArrayList<>(); |
| |
| /** |
| * @since POI 3.14-Beta1 |
| */ |
| public XDGFPages(PackagePart part) { |
| super(part); |
| } |
| |
| @Internal |
| PagesType getXmlObject() { |
| return _pagesObject; |
| } |
| |
| @Override |
| protected void onDocumentRead() { |
| try { |
| try { |
| _pagesObject = PagesDocument.Factory.parse(getPackagePart().getInputStream()).getPages(); |
| } catch (XmlException | IOException e) { |
| throw new POIXMLException(e); |
| } |
| |
| // this iteration is ordered by page number |
| for (PageType pageSettings: _pagesObject.getPageArray()) { |
| |
| String relId = pageSettings.getRel().getId(); |
| |
| POIXMLDocumentPart pageContentsPart = getRelationById(relId); |
| if (pageContentsPart == null) |
| throw new POIXMLException("PageSettings relationship for " + relId + " not found"); |
| |
| if (!(pageContentsPart instanceof XDGFPageContents)) |
| throw new POIXMLException("Unexpected pages relationship for " + relId + ": " + pageContentsPart); |
| |
| XDGFPageContents contents = (XDGFPageContents)pageContentsPart; |
| XDGFPage page = new XDGFPage(pageSettings, contents, _document, this); |
| |
| contents.onDocumentRead(); |
| |
| _pages.add(page); |
| } |
| |
| } catch (POIXMLException e) { |
| throw XDGFException.wrap(this, e); |
| } |
| } |
| |
| /** |
| * @return A list of pages ordered by page number |
| */ |
| public List<XDGFPage> getPageList() { |
| return Collections.unmodifiableList(_pages); |
| } |
| } |