All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.odftoolkit.odfdom.doc.presentation.OdfSlide Maven / Gradle / Ivy

/************************************************************************
 *
 * 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.odfdom.doc.presentation;

import java.util.Hashtable;

import org.odftoolkit.odfdom.pkg.OdfFileDom;
import org.odftoolkit.odfdom.dom.OdfDocumentNamespace;
import org.odftoolkit.odfdom.dom.element.draw.DrawPageElement;
import org.odftoolkit.odfdom.dom.element.presentation.PresentationNotesElement;
import org.w3c.dom.NodeList;

/**
 * OdfSlide represents the presentation slide feature of the ODF document.
 * OdfSlide provides methods to get the slide index,get the content of the current slide, etc.
 *
 * @deprecated As of release 0.8.8, replaced by {@link org.odftoolkit.simple.presentation.Slide} in Simple API.
 */
public class OdfSlide {

	DrawPageElement maSlideElement;
	private static Hashtable maSlideRepository =
			new Hashtable();

	private OdfSlide(DrawPageElement pageElement) {
		maSlideElement = pageElement;
	}

	/**
	 * Get a presentation slide instance by an instance of DrawPageElement.
	 *
	 * @param pageElement	an instance of DrawPageElement
	 * @return an instance of OdfSlide that can represent pageElement
	 */
	public static OdfSlide getInstance(DrawPageElement pageElement) {
		if (maSlideRepository.containsKey(pageElement)) {
			return maSlideRepository.get(pageElement);
		} else {
			OdfSlide newSlide = new OdfSlide(pageElement);
			maSlideRepository.put(pageElement, newSlide);
			return newSlide;
		}
	}

	/**
	 * Return an instance of DrawPageElement which represents presentation slide feature.
	 *
	 * @return an instance of DrawPageElement
	 */
	public DrawPageElement getOdfElement() {
		return maSlideElement;
	}

	/**
	 * Get the current slide index in the owner document.
	 * @return the slide index in the owner document
	 * 

* -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. *

* 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. *

* 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); OdfSlide slide = OdfSlide.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 OdfPresentationNotes which represent the notes page of the current slide */ public OdfPresentationNotes getNotesPage() { NodeList notesList = maSlideElement.getElementsByTagNameNS(OdfDocumentNamespace.PRESENTATION.getUri(), "notes"); if (notesList.getLength() > 0) { PresentationNotesElement noteEle = (PresentationNotesElement) notesList.item(0); return OdfPresentationNotes.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 placeholder. * * we define some template layout as below: * * "blank" template is a slide without any filled element, * * "title_only" template is a slide with a title, * * "title_outline" template is a slide with a title and an outline block, * * "title_text" template is a slide with a title and a text block, * * "title_two_text_block" template is a slide with a title two text blocks. */ public enum SlideLayout { /** * Blank, a blank presentation */ BLANK("blank"), /** * Title_only, the presentation with title only */ TITLE_ONLY("title_only"), /** * Title_outline, the presentation with outline */ TITLE_OUTLINE("title_outline"), /** * Title_text, the presentation with title and one text block */ TITLE_PLUS_TEXT("title_text"), /** * title_two_text_block, the presentation with title and two text blocks */ TITLE_PLUS_2_TEXT_BLOCK("title_two_text_block"); private String mValue; SlideLayout(String aValue) { mValue = aValue; } /** * 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 SlideLayout * @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 SlideLayout */ public static SlideLayout enumValueOf(String aString) { for (SlideLayout aIter : values()) { if (aString.equals(aIter.toString())) { return aIter; } } return null; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy