001 /*
002 * Copyright 2002 - 2007 JEuclid, http://jeuclid.sf.net
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 /* $Id: Maction.java,v 2986a8eeaebc 2009/09/24 12:53:08 max $ */
018
019 package net.sourceforge.jeuclid.elements.presentation.enlivening;
020
021 import java.util.Collections;
022 import java.util.List;
023
024 import net.sourceforge.jeuclid.elements.AbstractElementWithDelegates;
025 import net.sourceforge.jeuclid.layout.LayoutableNode;
026
027 import org.apache.batik.dom.AbstractDocument;
028 import org.w3c.dom.Node;
029 import org.w3c.dom.mathml.MathMLActionElement;
030
031 /**
032 * Represents an maction element.
033 * <p>
034 * TODO: This element does not actually implement any action.
035 *
036 * @version $Revision: 2986a8eeaebc $
037 */
038 public final class Maction extends AbstractElementWithDelegates implements
039 MathMLActionElement {
040
041 /**
042 * The XML element from this class.
043 */
044 public static final String ELEMENT = "maction";
045
046 private static final String ATTR_ACTIONTYPE = "actiontype";
047
048 private static final String ATTR_SELECTION = "selection";
049
050 private static final long serialVersionUID = 1L;
051
052 /**
053 * Default constructor. Sets MathML Namespace.
054 *
055 * @param qname
056 * Qualified name.
057 * @param odoc
058 * Owner Document.
059 */
060 public Maction(final String qname, final AbstractDocument odoc) {
061 super(qname, odoc);
062 this.setDefaultMathAttribute(Maction.ATTR_SELECTION, "1");
063 }
064
065 /** {@inheritDoc} */
066 @Override
067 protected Node newNode() {
068 return new Maction(this.nodeName, this.ownerDocument);
069 }
070
071 /** {@inheritDoc} */
072 public String getActiontype() {
073 return this.getMathAttribute(Maction.ATTR_ACTIONTYPE);
074 }
075
076 /** {@inheritDoc} */
077 public String getSelection() {
078 return this.getMathAttribute(Maction.ATTR_SELECTION);
079 }
080
081 /** {@inheritDoc} */
082 public void setActiontype(final String actiontype) {
083 this.setAttribute(Maction.ATTR_ACTIONTYPE, actiontype);
084 }
085
086 /** {@inheritDoc} */
087 public void setSelection(final String selection) {
088 this.setAttribute(Maction.ATTR_SELECTION, selection);
089 }
090
091 /** {@inheritDoc} */
092 @Override
093 protected List<LayoutableNode> createDelegates() {
094 LayoutableNode selectedElement;
095 try {
096 final int selected = Integer.parseInt(this.getSelection());
097 selectedElement = this.getMathElement(selected - 1);
098 } catch (final NumberFormatException nfe) {
099 selectedElement = null;
100 }
101
102 if (selectedElement == null) {
103 return Collections.emptyList();
104 } else {
105 return Collections.singletonList(selectedElement);
106 }
107 }
108
109 }