| /************************************************************************ |
| * |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER |
| * |
| * Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved. |
| * |
| * Use is subject to license terms. |
| * |
| * Licensed 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. You can also |
| * obtain a copy of the License at http://odftoolkit.org/docs/license.txt |
| * |
| * 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.odftoolkit.simple.presentation; |
| |
| import java.awt.Rectangle; |
| import java.util.IdentityHashMap; |
| import java.util.Iterator; |
| import java.util.logging.Level; |
| import java.util.logging.Logger; |
| |
| import org.odftoolkit.odfdom.dom.OdfDocumentNamespace; |
| import org.odftoolkit.odfdom.dom.attribute.presentation.PresentationClassAttribute; |
| import org.odftoolkit.odfdom.dom.attribute.text.TextAnchorTypeAttribute; |
| import org.odftoolkit.odfdom.dom.element.draw.DrawFrameElement; |
| import org.odftoolkit.odfdom.dom.element.draw.DrawObjectElement; |
| import org.odftoolkit.odfdom.dom.element.draw.DrawPageElement; |
| import org.odftoolkit.odfdom.dom.element.draw.DrawTextBoxElement; |
| import org.odftoolkit.odfdom.dom.element.presentation.PresentationNotesElement; |
| import org.odftoolkit.odfdom.dom.element.style.StyleGraphicPropertiesElement; |
| import org.odftoolkit.odfdom.dom.element.style.StylePresentationPageLayoutElement; |
| import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeStyles; |
| import org.odftoolkit.odfdom.pkg.OdfElement; |
| import org.odftoolkit.odfdom.pkg.OdfFileDom; |
| import org.odftoolkit.odfdom.type.CellRangeAddressList; |
| import org.odftoolkit.simple.Component; |
| import org.odftoolkit.simple.Document; |
| import org.odftoolkit.simple.PresentationDocument; |
| import org.odftoolkit.simple.SpreadsheetDocument; |
| import org.odftoolkit.simple.chart.AbstractChartContainer; |
| import org.odftoolkit.simple.chart.Chart; |
| import org.odftoolkit.simple.chart.ChartContainer; |
| import org.odftoolkit.simple.chart.DataSet; |
| import org.odftoolkit.simple.draw.AbstractTextboxContainer; |
| import org.odftoolkit.simple.draw.FrameRectangle; |
| import org.odftoolkit.simple.draw.Textbox; |
| import org.odftoolkit.simple.draw.TextboxContainer; |
| import org.odftoolkit.simple.table.AbstractTableContainer; |
| import org.odftoolkit.simple.table.Table; |
| import org.odftoolkit.simple.table.TableContainer; |
| import org.odftoolkit.simple.table.Table.TableBuilder; |
| import org.odftoolkit.simple.text.list.AbstractListContainer; |
| import org.odftoolkit.simple.text.list.List; |
| import org.odftoolkit.simple.text.list.ListContainer; |
| import org.odftoolkit.simple.text.list.ListDecorator; |
| import org.w3c.dom.NodeList; |
| |
| /** |
| * <code>Slide</code> represents the presentation slide feature of the ODF |
| * document. <code>Slide</code> provides methods to get the slide index,get the |
| * content of the current slide, etc. |
| */ |
| public class Slide extends Component implements ListContainer, TableContainer, TextboxContainer, ChartContainer { |
| |
| DrawPageElement maSlideElement; |
| private ListContainerImpl listContainerImpl; |
| private TableContainerImpl tableContainerImpl; |
| private TextboxContainerImpl mTextboxContainerImpl; |
| private ChartContainerImpl chartContainerImpl; |
| |
| /** |
| * This is a tool class which supplies all of the slide creation detail. |
| * <p> |
| * The end user isn't allowed to create it directly, otherwise an |
| * <code>IllegalStateException</code> will be thrown. |
| * |
| *@since 0.3.5 |
| */ |
| public static class SlideBuilder { |
| |
| private final IdentityHashMap<DrawPageElement, Slide> maSlideRepository = new IdentityHashMap<DrawPageElement, Slide>(); |
| |
| /** |
| * SlideBuilder constructor. This constructor should only be use in |
| * owner {@link org.odftoolkit.simple.PresentationDocument |
| * PresentationDocument} constructor. The end user isn't allowed to call |
| * it directly, otherwise an <code>IllegalStateException</code> will be |
| * thrown. |
| * |
| * @param doc |
| * the owner <code>PresentationDocument</code>. |
| * @throws IllegalStateException |
| * if new SlideBuilder out of owner PresentationDocument |
| * constructor, this exception will be thrown. |
| */ |
| public SlideBuilder(PresentationDocument doc) { |
| if (doc.getSlideBuilder() != null) { |
| throw new IllegalStateException( |
| "SlideBuilder only can be created in owner PresentationDocument constructor."); |
| } |
| } |
| |
| /** |
| * Get a presentation slide instance by an instance of |
| * <code>DrawPageElement</code>. |
| * |
| * @param pageElement |
| * an instance of <code>DrawPageElement</code> |
| * @return an instance of <code>Slide</code> that can represent |
| * <code>pageElement</code> |
| */ |
| public synchronized Slide getSlideInstance(DrawPageElement pageElement) { |
| if (maSlideRepository.containsKey(pageElement)) { |
| return maSlideRepository.get(pageElement); |
| } else { |
| Slide newSlide = new Slide(pageElement); |
| maSlideRepository.put(pageElement, newSlide); |
| return newSlide; |
| } |
| } |
| } |
| |
| private Slide(DrawPageElement pageElement) { |
| maSlideElement = pageElement; |
| } |
| |
| /** |
| * Get a presentation slide instance by an instance of |
| * <code>DrawPageElement</code>. |
| * |
| * @param pageElement |
| * an instance of <code>DrawPageElement</code> |
| * @return an instance of <code>Slide</code> that can represent |
| * <code>pageElement</code> |
| */ |
| public static Slide getInstance(DrawPageElement pageElement) { |
| PresentationDocument ownerDocument = (PresentationDocument) ((OdfFileDom) (pageElement.getOwnerDocument())) |
| .getDocument(); |
| return ownerDocument.getSlideBuilder().getSlideInstance(pageElement); |
| } |
| |
| /** |
| * Return an instance of <code>DrawPageElement</code> which represents |
| * presentation slide feature. |
| * |
| * @return an instance of <code>DrawPageElement</code> |
| */ |
| public DrawPageElement getOdfElement() { |
| return maSlideElement; |
| } |
| |
| /** |
| * Get the current slide index in the owner document. |
| * |
| * @return the slide index in the owner document |
| * <p> |
| * -1, if the odf element which can represent this slide is not in |
| * the document DOM tree |
| */ |
| public int getSlideIndex() { |
| OdfFileDom contentDom = (OdfFileDom) maSlideElement.getOwnerDocument(); |
| NodeList slideNodes = contentDom.getElementsByTagNameNS(OdfDocumentNamespace.DRAW.getUri(), "page"); |
| for (int i = 0; i < slideNodes.getLength(); i++) { |
| DrawPageElement slideEle = (DrawPageElement) slideNodes.item(i); |
| if (slideEle == maSlideElement)// should not equals here, see |
| // OdfElement.equals(Object obj) |
| { |
| return i; |
| } |
| } |
| return -1; |
| } |
| |
| /** |
| * Get the current slide name. |
| * <p> |
| * If the "draw:name" attribute is not present there, create an unique name |
| * for this slide |
| * |
| * @return the name of the current slide |
| */ |
| public String getSlideName() { |
| String slideName = maSlideElement.getDrawNameAttribute(); |
| if (slideName == null) { |
| slideName = makeUniqueSlideName(); |
| maSlideElement.setDrawNameAttribute(slideName); |
| } |
| return slideName; |
| } |
| |
| /** |
| * Set the current slide name. |
| * <p> |
| * It must be unique slide name in the current presentation. If not, an |
| * IllegalArgumentException will be thrown. If the given name is null, an |
| * IllegalArgumentException will also be thrown. |
| * |
| * @param name |
| * the new name of the current slide |
| * @throws IllegalArgumentException |
| * if the given name is null or it is not unique in the current |
| * presentation. |
| */ |
| public void setSlideName(String name) { |
| if (name == null) { |
| throw new IllegalArgumentException("slide name is null is not accepted in the presentation document"); |
| } |
| // check if name is unique in this presentation |
| OdfFileDom contentDom = (OdfFileDom) maSlideElement.getOwnerDocument(); |
| NodeList slideNodes = contentDom.getElementsByTagNameNS(OdfDocumentNamespace.DRAW.getUri(), "page"); |
| for (int i = 0; i < slideNodes.getLength(); i++) { |
| DrawPageElement slideEle = (DrawPageElement) slideNodes.item(i); |
| Slide slide = Slide.getInstance(slideEle); |
| String slideName = slide.getSlideName(); |
| if (slideName.equals(name)) { |
| throw new IllegalArgumentException( |
| "the given slide name is already exist in the current presentation document"); |
| } |
| } |
| maSlideElement.setDrawNameAttribute(name); |
| } |
| |
| /** |
| * Get the Notes page of this slide |
| * |
| * @return the instance of <code>Notes</code> which represent the notes page |
| * of the current slide |
| */ |
| public Notes getNotesPage() { |
| NodeList notesList = maSlideElement.getElementsByTagNameNS(OdfDocumentNamespace.PRESENTATION.getUri(), "notes"); |
| if (notesList.getLength() > 0) { |
| PresentationNotesElement noteEle = (PresentationNotesElement) notesList.item(0); |
| return Notes.getInstance(noteEle); |
| |
| } |
| return null; |
| } |
| |
| private String makeUniqueSlideName() { |
| int index = getSlideIndex(); |
| String slideName = "page" + (index + 1) + "-" + String.format("a%06x", (int) (Math.random() * 0xffffff)); |
| return slideName; |
| } |
| |
| /** |
| * A slide layout is a slide with some predefine place holder. |
| * |
| * we define some template layout as below: |
| * <ul> |
| * <li>"BLANK" template is a slide without any filled element.</li> |
| * <li>"TITLE_ONLY" template is a slide with a title only.</li> |
| * <li>"TITLE_SUBTITLE" template is a slide with a title and a subtitle.</li> |
| * <li>"TITLE_OUTLINE" template is a slide with a title and an outline |
| * block.</li> |
| * <li>"TITLE_PLUS_TEXT" template is a slide with a title and a text block.</li> |
| * <li>"TITLE_PLUS_CHART" template is a slide with a title and a chart |
| * block.</li> |
| * <li>"TITLE_PLUS_2_TEXT_BLOCK" template is a slide with a title and two |
| * text blocks.</li> |
| * <li>"TITLE_PLUS_2_CHART" template is a slide with a title and two chart |
| * blocks.</li> |
| * <li>"TITLE_LEFT_CHART_RIGHT_OUTLINE" template is a slide with a title, a |
| * chart block on the left and an outline block on the right.</li> |
| * <li>"TITLE_PLUS_3_OBJECT" template is a slide with a title, an outline |
| * block and two chart blocks.</li> |
| * <li>"TITLE_PLUS_4_OBJECT" template is a slide with a title, an outline |
| * block and three chart blocks.</li> |
| * <ul> |
| */ |
| public enum SlideLayout { |
| |
| /** |
| * Blank, a blank presentation |
| */ |
| BLANK("blank") { |
| public void apply(DrawPageElement page) { |
| //do nothing. |
| } |
| }, |
| /** |
| * Title_only, the presentation with title only |
| */ |
| TITLE_ONLY("title_only") { |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = "AL1T" + makeUniqueName(); |
| try { |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| layout.newPresentationPlaceholderElement("title", "2.058cm", "1.743cm", "23.91cm", "3.507cm"); |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setProperty(StyleGraphicPropertiesElement.StyleShadow, "true"); |
| frame1.setProperty(StyleGraphicPropertiesElement.AutoGrowHeight, "true"); |
| frame1.setProperty(StyleGraphicPropertiesElement.MinHeight, "3.507"); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.006cm"); |
| frame1.setSvgWidthAttribute("24.299cm"); |
| frame1.setSvgXAttribute("1.35cm"); |
| frame1.setSvgYAttribute("0.717cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| } |
| }, |
| /** |
| * title_subtitle, the presentation with title and subtitle. |
| */ |
| TITLE_SUBTITLE("title_subtitle") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName ="AL1T" + makeUniqueName(); |
| try { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| //String presentationObjectValue, String svgHeightValue, String svgWidthValue, String svgXValue, String svgYValue |
| layout.newPresentationPlaceholderElement("title", "3.507cm", "23.912cm", "2.058cm", "1.743cm"); |
| layout.newPresentationPlaceholderElement("subtitle", "13.23cm", "23.912cm", "2.058cm", "5.838cm"); |
| |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("4.244cm"); |
| frame1.setSvgWidthAttribute("23.848cm"); |
| frame1.setSvgXAttribute("2.075cm"); |
| frame1.setSvgYAttribute("6.621cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| frame2.setPresentationStyleNameAttribute(frame2.getStyleName()); |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("5.097cm"); |
| frame2.setSvgWidthAttribute("19.631cm"); |
| frame2.setSvgXAttribute("4.183cm"); |
| frame2.setSvgYAttribute("12.003cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.SUBTITLE.toString()); |
| frame2.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.newDrawTextBoxElement(); |
| } |
| }, |
| /** |
| * Title_outline, the presentation with outline |
| */ |
| TITLE_OUTLINE("title_outline") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = makeUniqueName(); |
| try { |
| if (styles == null) { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| } |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| layout.newPresentationPlaceholderElement("title", "2.058cm", "1.743cm", "23.91cm", "3.507cm"); |
| layout.newPresentationPlaceholderElement("outline", "2.058cm", "1.743cm", "23.91cm", "3.507cm"); |
| |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setProperty(StyleGraphicPropertiesElement.StyleShadow, "true"); |
| frame1.setProperty(StyleGraphicPropertiesElement.AutoGrowHeight, "true"); |
| frame1.setProperty(StyleGraphicPropertiesElement.MinHeight, "3.507"); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.006cm"); |
| frame1.setSvgWidthAttribute("24.299cm"); |
| frame1.setSvgXAttribute("1.35cm"); |
| frame1.setSvgYAttribute("0.717cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| |
| frame2.setProperty(StyleGraphicPropertiesElement.FillColor, "#ffffff"); |
| frame2.setProperty(StyleGraphicPropertiesElement.MinHeight, "13.114"); |
| frame2.setPresentationStyleNameAttribute(frame2.getStyleName()); |
| |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("11.629cm"); |
| frame2.setSvgWidthAttribute("24.199cm"); |
| frame2.setSvgXAttribute("1.35cm"); |
| frame2.setSvgYAttribute("4.337cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.OUTLINE.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.newDrawTextBoxElement(); |
| } |
| }, |
| /** |
| * Title_text, the presentation with title and one text block |
| */ |
| TITLE_PLUS_TEXT("title_text") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = makeUniqueName(); |
| try { |
| if (styles == null) { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| } |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| layout.newPresentationPlaceholderElement("title", "2.058cm", "1.743cm", "23.91cm", "1.743cm"); |
| layout.newPresentationPlaceholderElement("subtitle", "2.058cm", "5.838cm", "23.91cm", "13.23cm"); |
| |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setProperty(StyleGraphicPropertiesElement.AutoGrowHeight, "true"); |
| frame1.setProperty(StyleGraphicPropertiesElement.MinHeight, "3.507"); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.006cm"); |
| frame1.setSvgWidthAttribute("24.299cm"); |
| frame1.setSvgXAttribute("1.35cm"); |
| frame1.setSvgYAttribute("0.717cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| frame2.setProperty(StyleGraphicPropertiesElement.AutoGrowHeight, "true"); |
| frame2.setProperty(StyleGraphicPropertiesElement.MinHeight, "3.507"); |
| frame2.setPresentationStyleNameAttribute(frame2.getStyleName()); |
| |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("11.88cm"); |
| frame2.setSvgWidthAttribute("24.299cm"); |
| frame2.setSvgXAttribute("1.35cm"); |
| frame2.setSvgYAttribute("4.712cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.SUBTITLE.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.newDrawTextBoxElement(); |
| } |
| }, |
| /** |
| * title_two_text_block, the presentation with title and two text blocks |
| */ |
| TITLE_PLUS_2_TEXT_BLOCK("title_two_text_block") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = makeUniqueName(); |
| try { |
| if (styles == null) { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| } |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| layout.newPresentationPlaceholderElement("outline", "2.058cm", "1.743cm", "23.91cm", "1.743cm"); |
| layout.newPresentationPlaceholderElement("outline", "1.35cm", "4.212cm", "11.857cm", "11.629cm"); |
| layout.newPresentationPlaceholderElement("outline", "4.212cm", "13.8cm", "11.857cm", "11.629cm"); |
| |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setProperty(StyleGraphicPropertiesElement.AutoGrowHeight, "true"); |
| frame1.setProperty(StyleGraphicPropertiesElement.MinHeight, "3.507"); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.006cm"); |
| frame1.setSvgWidthAttribute("24.299cm"); |
| frame1.setSvgXAttribute("1.35cm"); |
| frame1.setSvgYAttribute("0.717cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| frame2.setProperty(StyleGraphicPropertiesElement.AutoGrowHeight, "true"); |
| frame2.setProperty(StyleGraphicPropertiesElement.MinHeight, "3.507"); |
| frame2.setPresentationStyleNameAttribute(frame2.getStyleName()); |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("11.629cm"); |
| frame2.setSvgWidthAttribute("11.857cm"); |
| frame2.setSvgXAttribute("1.35cm"); |
| frame2.setSvgYAttribute("4.212cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.OUTLINE.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame3 = page.newDrawFrameElement(); |
| frame3.setProperty(StyleGraphicPropertiesElement.AutoGrowHeight, "true"); |
| frame3.setProperty(StyleGraphicPropertiesElement.MinHeight, "3.507"); |
| frame3.setPresentationStyleNameAttribute(frame3.getStyleName()); |
| frame3.setDrawLayerAttribute("layout"); |
| frame3.setSvgHeightAttribute("11.62cm"); |
| frame3.setSvgWidthAttribute("11.857cm"); |
| frame3.setSvgXAttribute("13.8cm"); |
| frame3.setSvgYAttribute("4.212cm"); |
| frame3.setPresentationClassAttribute(PresentationClassAttribute.Value.OUTLINE.toString()); |
| frame3.setPresentationPlaceholderAttribute(true); |
| frame3.newDrawTextBoxElement(); |
| } |
| }, |
| /** |
| * title_three_objects, the presentation with title, chart and outline blocks. |
| */ |
| TITLE_LEFT_CHART_RIGHT_OUTLINE("title_left_chart_right_outline") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = makeUniqueName(); |
| try { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| //String presentationObjectValue, String svgHeightValue, String svgWidthValue, String svgXValue, String svgYValue |
| layout.newPresentationPlaceholderElement("title", "3.507cm", "25.199cm", "1.4cm", "0.837cm"); |
| layout.newPresentationPlaceholderElement("chart", "13.86cm", "12.296cm", "1.4cm", "4.914cm"); |
| layout.newPresentationPlaceholderElement("outline", "13.86cm", "12.296cm", "14.311cm", "4.914cm"); |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.507cm"); |
| frame1.setSvgWidthAttribute("25.199cm"); |
| frame1.setSvgXAttribute("1.4cm"); |
| frame1.setSvgYAttribute("0.837cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| frame2.setDrawStyleNameAttribute(frame2.getStyleName()); |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("13.86cm"); |
| frame2.setSvgWidthAttribute("12.296cm"); |
| frame2.setSvgXAttribute("1.4cm"); |
| frame2.setSvgYAttribute("4.914cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame2.newDrawObjectElement(); |
| |
| DrawFrameElement frame3 = page.newDrawFrameElement(); |
| frame3.setPresentationStyleNameAttribute(frame3.getStyleName()); |
| frame3.setDrawLayerAttribute("layout"); |
| frame3.setSvgHeightAttribute("13.86cm"); |
| frame3.setSvgWidthAttribute("12.296cm"); |
| frame3.setSvgXAttribute("14.311cm"); |
| frame3.setSvgYAttribute("4.914cm"); |
| frame3.setPresentationClassAttribute(PresentationClassAttribute.Value.OUTLINE.toString()); |
| frame3.setPresentationPlaceholderAttribute(true); |
| frame3.newDrawTextBoxElement(); |
| } |
| }, |
| /** |
| * title_plus_chart, the presentation with title and chart. |
| */ |
| TITLE_PLUS_CHART("title_plus_chart") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = "AL1T" + makeUniqueName(); |
| try { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| //String presentationObjectValue, String svgHeightValue, String svgWidthValue, String svgXValue, String svgYValue |
| layout.newPresentationPlaceholderElement("title", "3.507cm", "25.199cm", "1.4cm", "0.837cm"); |
| layout.newPresentationPlaceholderElement("chart", "13.86cm", "25.199cm", "1.4cm", "4.914cm"); |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.507cm"); |
| frame1.setSvgWidthAttribute("25.199cm"); |
| frame1.setSvgXAttribute("1.4cm"); |
| frame1.setSvgYAttribute("0.837cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| frame2.setDrawStyleNameAttribute(frame2.getStyleName()); |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("13.86cm"); |
| frame2.setSvgWidthAttribute("25.199cm"); |
| frame2.setSvgXAttribute("1.4cm"); |
| frame2.setSvgYAttribute("4.914cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame2.newDrawObjectElement(); |
| } |
| }, |
| /** |
| * title_plus_two_chart, the presentation with title and two charts. |
| */ |
| TITLE_PLUS_2_CHART("title_plus_2_chart") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = makeUniqueName(); |
| try { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| //String presentationObjectValue, String svgHeightValue, String svgWidthValue, String svgXValue, String svgYValue |
| layout.newPresentationPlaceholderElement("title", "3.507cm", "25.199cm", "1.4cm", "0.837cm"); |
| layout.newPresentationPlaceholderElement("chart", "6.61cm", "25.199cm", "1.4cm", "4.914cm"); |
| layout.newPresentationPlaceholderElement("chart", "6.61cm", "25.199cm", "1.4cm", "12.153cm"); |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.507cm"); |
| frame1.setSvgWidthAttribute("25.199cm"); |
| frame1.setSvgXAttribute("1.4cm"); |
| frame1.setSvgYAttribute("0.837cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| frame2.setDrawStyleNameAttribute(frame2.getStyleName()); |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("6.61cm"); |
| frame2.setSvgWidthAttribute("25.199cm"); |
| frame2.setSvgXAttribute("1.4cm"); |
| frame2.setSvgYAttribute("4.914cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame2.newDrawObjectElement(); |
| |
| DrawFrameElement frame3 = page.newDrawFrameElement(); |
| frame3.setDrawStyleNameAttribute(frame3.getStyleName()); |
| frame3.setDrawLayerAttribute("layout"); |
| frame3.setSvgHeightAttribute("6.61cm"); |
| frame3.setSvgWidthAttribute("25.199cm"); |
| frame3.setSvgXAttribute("1.4cm"); |
| frame3.setSvgYAttribute("12.153cm"); |
| frame3.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame3.setPresentationPlaceholderAttribute(true); |
| frame2.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame3.newDrawObjectElement(); |
| } |
| }, |
| /** |
| * title_three_object, the presentation with title and three object blocks. |
| */ |
| TITLE_PLUS_3_OBJECT("title_plus_three_object") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = makeUniqueName(); |
| try { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| //String presentationObjectValue, String svgHeightValue, String svgWidthValue, String svgXValue, String svgYValue |
| layout.newPresentationPlaceholderElement("title", "3.507cm", "25.199cm", "1.4cm", "0.837cm"); |
| layout.newPresentationPlaceholderElement("chart", "6.61cm", "12.296cm", "1.4cm", "4.914cm"); |
| layout.newPresentationPlaceholderElement("outline", "6.61cm", "12.296cm", "14.311cm", "4.914cm"); |
| layout.newPresentationPlaceholderElement("chart", "6.61cm", "25.199cm", "1.4cm", "12.153cm"); |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.507cm"); |
| frame1.setSvgWidthAttribute("25.199cm"); |
| frame1.setSvgXAttribute("1.4cm"); |
| frame1.setSvgYAttribute("0.837cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| frame2.setDrawStyleNameAttribute(frame2.getStyleName()); |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("6.61cm"); |
| frame2.setSvgWidthAttribute("12.296cm"); |
| frame2.setSvgXAttribute("1.4cm"); |
| frame2.setSvgYAttribute("4.914cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame2.newDrawObjectElement(); |
| |
| DrawFrameElement frame3 = page.newDrawFrameElement(); |
| frame3.setPresentationStyleNameAttribute(frame3.getStyleName()); |
| frame3.setDrawLayerAttribute("layout"); |
| frame3.setSvgHeightAttribute("6.61cm"); |
| frame3.setSvgWidthAttribute("12.296cm"); |
| frame3.setSvgXAttribute("14.311cm"); |
| frame3.setSvgYAttribute("4.914cm"); |
| frame3.setPresentationClassAttribute(PresentationClassAttribute.Value.OUTLINE.toString()); |
| frame3.setPresentationPlaceholderAttribute(true); |
| frame3.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame3.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame4 = page.newDrawFrameElement(); |
| frame4.setDrawStyleNameAttribute(frame4.getStyleName()); |
| frame4.setDrawLayerAttribute("layout"); |
| frame4.setSvgHeightAttribute("6.61cm"); |
| frame4.setSvgWidthAttribute("25.199cm"); |
| frame4.setSvgXAttribute("1.4cm"); |
| frame4.setSvgYAttribute("12.153cm"); |
| frame4.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame4.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame4.setPresentationPlaceholderAttribute(true); |
| frame4.newDrawObjectElement(); |
| } |
| }, |
| /** |
| * title_four_object, the presentation with title and four object blocks. |
| */ |
| TITLE_PLUS_4_OBJECT("title_four_object") { |
| |
| public void apply(DrawPageElement page) { |
| Document doc = (Document) ((OdfFileDom) page.getOwnerDocument()).getDocument(); |
| OdfOfficeStyles styles = doc.getOrCreateDocumentStyles(); |
| String layoutName; |
| layoutName = makeUniqueName(); |
| try { |
| styles = doc.getStylesDom().getOfficeStyles(); |
| if (styles == null) { |
| styles = doc.getStylesDom().newOdfElement(OdfOfficeStyles.class); |
| } |
| StylePresentationPageLayoutElement layout = styles.newStylePresentationPageLayoutElement(layoutName); |
| //String presentationObjectValue, String svgHeightValue, String svgWidthValue, String svgXValue, String svgYValue |
| layout.newPresentationPlaceholderElement("title", "3.507cm", "25.199cm", "1.4cm", "0.837cm"); |
| layout.newPresentationPlaceholderElement("chart", "6.61cm", "12.296cm", "1.4cm", "4.914cm"); |
| layout.newPresentationPlaceholderElement("outline", "6.61cm", "12.296cm", "14.311cm", "4.914cm"); |
| layout.newPresentationPlaceholderElement("chart", "6.61cm", "12.296cm", "1.4cm", "12.153cm"); |
| layout.newPresentationPlaceholderElement("chart", "6.61cm", "12.296cm", "14.311cm", "12.153cm"); |
| } catch (Exception e1) { |
| Logger.getLogger(SlideLayout.class.getName()).log(Level.SEVERE, null, e1); |
| } |
| page.setPresentationPresentationPageLayoutNameAttribute(layoutName); |
| |
| DrawFrameElement frame1 = page.newDrawFrameElement(); |
| frame1.setPresentationStyleNameAttribute(frame1.getStyleName()); |
| frame1.setDrawLayerAttribute("layout"); |
| frame1.setSvgHeightAttribute("3.507cm"); |
| frame1.setSvgWidthAttribute("25.199cm"); |
| frame1.setSvgXAttribute("1.4cm"); |
| frame1.setSvgYAttribute("0.837cm"); |
| frame1.setPresentationClassAttribute(PresentationClassAttribute.Value.TITLE.toString()); |
| frame1.setPresentationPlaceholderAttribute(true); |
| frame1.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame2 = page.newDrawFrameElement(); |
| frame2.setDrawStyleNameAttribute(frame2.getStyleName()); |
| frame2.setDrawLayerAttribute("layout"); |
| frame2.setSvgHeightAttribute("6.61cm"); |
| frame2.setSvgWidthAttribute("12.296cm"); |
| frame2.setSvgXAttribute("1.4cm"); |
| frame2.setSvgYAttribute("4.914cm"); |
| frame2.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame2.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame2.setPresentationPlaceholderAttribute(true); |
| frame2.newDrawObjectElement(); |
| |
| DrawFrameElement frame3 = page.newDrawFrameElement(); |
| frame3.setPresentationStyleNameAttribute(frame3.getStyleName()); |
| frame3.setDrawLayerAttribute("layout"); |
| frame3.setSvgHeightAttribute("6.61cm"); |
| frame3.setSvgWidthAttribute("12.296cm"); |
| frame3.setSvgXAttribute("14.311cm"); |
| frame3.setSvgYAttribute("4.914cm"); |
| frame3.setPresentationClassAttribute(PresentationClassAttribute.Value.OUTLINE.toString()); |
| frame3.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame3.setPresentationUserTransformedAttribute(true); |
| frame3.setPresentationPlaceholderAttribute(true); |
| frame3.newDrawTextBoxElement(); |
| |
| DrawFrameElement frame4 = page.newDrawFrameElement(); |
| frame4.setDrawStyleNameAttribute(frame4.getStyleName()); |
| frame4.setDrawLayerAttribute("layout"); |
| frame4.setSvgHeightAttribute("6.61cm"); |
| frame4.setSvgWidthAttribute("12.296cm"); |
| frame4.setSvgXAttribute("1.4cm"); |
| frame4.setSvgYAttribute("12.153cm"); |
| frame4.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame4.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame4.setPresentationPlaceholderAttribute(true); |
| frame4.newDrawObjectElement(); |
| |
| DrawFrameElement frame5 = page.newDrawFrameElement(); |
| frame5.setDrawStyleNameAttribute(frame5.getStyleName()); |
| frame5.setDrawLayerAttribute("layout"); |
| frame5.setSvgHeightAttribute("6.61cm"); |
| frame5.setSvgWidthAttribute("12.296cm"); |
| frame5.setSvgXAttribute("14.311cm"); |
| frame5.setSvgYAttribute("12.153cm"); |
| frame5.setPresentationClassAttribute(PresentationClassAttribute.Value.CHART.toString()); |
| frame5.setTextAnchorTypeAttribute(TextAnchorTypeAttribute.Value.PAGE.toString()); |
| frame5.setPresentationPlaceholderAttribute(true); |
| frame5.newDrawObjectElement(); |
| } |
| }; |
| |
| private String mValue; |
| |
| SlideLayout(String aValue) { |
| mValue = aValue; |
| } |
| |
| /** |
| * Applies this layout on a slide page. |
| * |
| * @param page |
| * the slide element which this layout is applied on. |
| * @since 0.6 |
| */ |
| public abstract void apply(DrawPageElement page); |
| |
| /** |
| * Return the slide template type value. |
| * |
| * @return the template type value |
| */ |
| @Override |
| public String toString() { |
| return mValue; |
| } |
| |
| /** |
| * Return the name of the template slide type. |
| * |
| * @param aEnum |
| * a <code>SlideLayout</code> |
| * @return the name of slide template type |
| */ |
| public static String toString(SlideLayout aEnum) { |
| return aEnum.toString(); |
| } |
| |
| /** |
| * Return a template slide type. |
| * |
| * @param aString |
| * the name of the slide template type |
| * @return a <code>SlideLayout</code> |
| */ |
| public static SlideLayout enumValueOf(String aString) { |
| for (SlideLayout aIter : values()) { |
| if (aString.equals(aIter.toString())) { |
| return aIter; |
| } |
| } |
| return null; |
| } |
| |
| //return an unique name. |
| private static String makeUniqueName() { |
| return String.format("a%06x", (int) (Math.random() * 0xffffff)); |
| } |
| } |
| |
| public OdfElement getListContainerElement() { |
| return getListContainerImpl().getListContainerElement(); |
| } |
| |
| public List addList() { |
| return getListContainerImpl().addList(); |
| } |
| |
| public List addList(ListDecorator decorator) { |
| return getListContainerImpl().addList(decorator); |
| } |
| |
| public void clearList() { |
| getListContainerImpl().clearList(); |
| } |
| |
| public Iterator<List> getListIterator() { |
| return getListContainerImpl().getListIterator(); |
| } |
| |
| public boolean removeList(List list) { |
| return getListContainerImpl().removeList(list); |
| } |
| |
| private ListContainerImpl getListContainerImpl() { |
| if (listContainerImpl == null) { |
| listContainerImpl = new ListContainerImpl(); |
| } |
| return listContainerImpl; |
| } |
| |
| private class ListContainerImpl extends AbstractListContainer { |
| |
| public OdfElement getListContainerElement() { |
| DrawFrameElement frame = null; |
| DrawTextBoxElement textBox = null; |
| NodeList frameList = maSlideElement.getElementsByTagNameNS(OdfDocumentNamespace.DRAW.getUri(), "frame"); |
| if (frameList.getLength() > 0) { |
| int index = frameList.getLength() - 1; |
| while (index >= 0) { |
| frame = (DrawFrameElement) frameList.item(index); |
| String presentationClass = frame.getPresentationClassAttribute(); |
| if (presentationClass == null || "outline".equals(presentationClass) |
| || "text".equals(presentationClass) || "subtitle".equals(presentationClass)) { |
| break; |
| } else { |
| index--; |
| } |
| frame = null; |
| } |
| } |
| if (frame == null) { |
| throw new UnsupportedOperationException( |
| "There is no list container in this slide, please chose a proper slide layout."); |
| } |
| NodeList textBoxList = frame.getElementsByTagNameNS(OdfDocumentNamespace.DRAW.getUri(), "text-box"); |
| if (textBoxList.getLength() <= 0) { |
| textBox = frame.newDrawTextBoxElement(); |
| } else { |
| textBox = (DrawTextBoxElement) textBoxList.item(textBoxList.getLength() - 1); |
| } |
| return textBox; |
| } |
| } |
| |
| public Table addTable() { |
| return getTableContainerImpl().addTable(); |
| } |
| |
| public Table addTable(int numRows, int numCols) { |
| return getTableContainerImpl().addTable(numRows, numCols); |
| } |
| |
| public Table getTableByName(String name) { |
| return getTableContainerImpl().getTableByName(name); |
| } |
| |
| public java.util.List<Table> getTableList() { |
| return getTableContainerImpl().getTableList(); |
| } |
| |
| public TableBuilder getTableBuilder() { |
| return getTableContainerImpl().getTableBuilder(); |
| } |
| |
| public OdfElement getTableContainerElement() { |
| return getTableContainerImpl().getTableContainerElement(); |
| } |
| |
| protected TableContainer getTableContainerImpl() { |
| if (tableContainerImpl == null) { |
| tableContainerImpl = new TableContainerImpl(); |
| } |
| return tableContainerImpl; |
| } |
| |
| private class TableContainerImpl extends AbstractTableContainer { |
| |
| public OdfElement getTableContainerElement() { |
| DrawFrameElement frame = null; |
| NodeList frameList = maSlideElement.getElementsByTagNameNS(OdfDocumentNamespace.DRAW.getUri(), "frame"); |
| if (frameList.getLength() > 0) { |
| int index = frameList.getLength() - 1; |
| while (index >= 0) { |
| frame = (DrawFrameElement) frameList.item(index); |
| String presentationClass = frame.getPresentationClassAttribute(); |
| if (presentationClass == null || "table".equals(presentationClass)) { |
| break; |
| } else { |
| index--; |
| } |
| frame = null; |
| } |
| } |
| if (frame == null) { |
| frame = maSlideElement.newDrawFrameElement(); |
| frame.setPresentationClassAttribute("table"); |
| frame.setDrawLayerAttribute("layout"); |
| frame.setStyleName("standard"); |
| frame.setSvgHeightAttribute("1.945cm"); |
| frame.setSvgWidthAttribute("14.098cm"); |
| frame.setSvgXAttribute("6.922cm"); |
| frame.setSvgYAttribute("10.386cm"); |
| } |
| return frame; |
| } |
| } |
| |
| // *********Text box support **********// |
| public Textbox addTextbox() { |
| return getTextboxContainerImpl().addTextbox(); |
| } |
| |
| public Iterator<Textbox> getTextboxIterator() { |
| return getTextboxContainerImpl().getTextboxIterator(); |
| } |
| |
| public boolean removeTextbox(Textbox box) { |
| return getTextboxContainerImpl().removeTextbox(box); |
| } |
| |
| public OdfElement getFrameContainerElement() { |
| return getTextboxContainerImpl().getFrameContainerElement(); |
| } |
| |
| public Textbox addTextbox(FrameRectangle position) { |
| return getTextboxContainerImpl().addTextbox(position); |
| } |
| |
| public Textbox getTextboxByName(String name) { |
| return getTextboxContainerImpl().getTextboxByName(name); |
| } |
| |
| private class TextboxContainerImpl extends AbstractTextboxContainer { |
| public OdfElement getFrameContainerElement() { |
| return maSlideElement; |
| } |
| } |
| |
| private TextboxContainerImpl getTextboxContainerImpl() { |
| if (mTextboxContainerImpl == null) |
| mTextboxContainerImpl = new TextboxContainerImpl(); |
| return mTextboxContainerImpl; |
| } |
| |
| public java.util.List<Textbox> getTextboxByUsage(PresentationDocument.PresentationClass usage) { |
| return getTextboxContainerImpl().getTextboxByUsage(usage); |
| } |
| public Chart createChart(String title, DataSet dataset, Rectangle rect) { |
| return getChartContainerImpl().createChart(title, dataset, rect); |
| } |
| |
| public Chart createChart(String title, SpreadsheetDocument document, CellRangeAddressList cellRangeAddr, boolean firstRowAsLabel, |
| boolean firstColumnAsLabel, boolean rowAsDataSeries, Rectangle rect) { |
| return getChartContainerImpl().createChart(title, document, cellRangeAddr, firstRowAsLabel, firstColumnAsLabel, |
| rowAsDataSeries, rect); |
| } |
| |
| public Chart createChart(String title, String[] labels, String[] legends, double[][] data, Rectangle rect) { |
| return getChartContainerImpl().createChart(title, labels, legends, data, rect); |
| } |
| |
| public void deleteChartById(String chartId) { |
| getChartContainerImpl().deleteChartById(chartId); |
| } |
| |
| public void deleteChartByTitle(String title) { |
| getChartContainerImpl().deleteChartByTitle(title); |
| } |
| |
| public Chart getChartById(String chartId) { |
| return getChartContainerImpl().getChartById(chartId); |
| } |
| |
| public java.util.List<Chart> getChartByTitle(String title) { |
| return getChartContainerImpl().getChartByTitle(title); |
| } |
| |
| public int getChartCount() { |
| return getChartContainerImpl().getChartCount(); |
| } |
| |
| private ChartContainerImpl getChartContainerImpl() { |
| if (chartContainerImpl == null) { |
| chartContainerImpl = new ChartContainerImpl(getOwnerDocument(), this); |
| } |
| return chartContainerImpl; |
| } |
| |
| private class ChartContainerImpl extends AbstractChartContainer { |
| DrawPageElement slide; |
| |
| protected ChartContainerImpl(Document doc, Slide slide) { |
| super(doc); |
| this.slide = slide.getOdfElement(); |
| } |
| |
| protected DrawFrameElement getChartFrame() throws Exception { |
| DrawFrameElement element = OdfElement.findFirstChildNode(DrawFrameElement.class, slide); |
| while (element != null) { |
| if ("chart".equals(element.getPresentationClassAttribute())) { |
| DrawObjectElement chartEle= OdfElement.findFirstChildNode(DrawObjectElement.class, element); |
| if(chartEle == null){ |
| return element; |
| }else{ |
| String href = chartEle.getXlinkHrefAttribute(); |
| if("".equals(href) || href ==null){ |
| return element; |
| } |
| } |
| } |
| element = OdfElement.findNextChildNode(DrawFrameElement.class, element); |
| } |
| return null; |
| } |
| } |
| } |