/*
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.batik.dom.svg;
import org.apache.batik.parser.NumberListHandler;
import org.apache.batik.parser.NumberListParser;
import org.apache.batik.parser.ParseException;
import org.w3c.dom.DOMException;
import org.w3c.dom.Element;
import org.w3c.dom.svg.SVGException;
import org.w3c.dom.svg.SVGNumber;
import org.w3c.dom.svg.SVGNumberList;
This class is the implementation of SVGNumberList
. Author: Tonny Kohar Version: $Id: AbstractSVGNumberList.java 1831635 2018-05-15 13:33:47Z ssteiner $
/**
* This class is the implementation of {@link SVGNumberList}.
*
* @author <a href="mailto:tonny@kiyut.com">Tonny Kohar</a>
* @version $Id: AbstractSVGNumberList.java 1831635 2018-05-15 13:33:47Z ssteiner $
*/
public abstract class AbstractSVGNumberList
extends AbstractSVGList
implements SVGNumberList {
Separator for a length list.
/**
* Separator for a length list.
*/
public static final String SVG_NUMBER_LIST_SEPARATOR
= " ";
Return the separator between values in the list.
/**
* Return the separator between values in the list.
*/
protected String getItemSeparator() {
return SVG_NUMBER_LIST_SEPARATOR;
}
Create an SVGException when the checkItemType(Object)
fails. /**
* Create an SVGException when the {@link #checkItemType(Object)} fails.
*/
protected abstract SVGException createSVGException(short type,
String key,
Object[] args);
Returns the element associated with this SVGNumberList.
/**
* Returns the element associated with this SVGNumberList.
*/
protected abstract Element getElement();
Creates a new SVGNumberList.
/**
* Creates a new SVGNumberList.
*/
protected AbstractSVGNumberList() {
}
DOM: Implements SVGNumberList.initialize(SVGNumber)
. /**
* <b>DOM</b>: Implements {@link SVGNumberList#initialize(SVGNumber)}.
*/
public SVGNumber initialize(SVGNumber newItem)
throws DOMException, SVGException {
return (SVGNumber)initializeImpl(newItem);
}
DOM: Implements SVGNumberList.getItem(int)
. /**
* <b>DOM</b>: Implements {@link SVGNumberList#getItem(int)}.
*/
public SVGNumber getItem(int index) throws DOMException {
return (SVGNumber)getItemImpl(index);
}
DOM: Implements SVGNumberList.insertItemBefore(SVGNumber, int)
. /**
* <b>DOM</b>: Implements {@link
* SVGNumberList#insertItemBefore(SVGNumber,int)}.
*/
public SVGNumber insertItemBefore(SVGNumber newItem, int index)
throws DOMException, SVGException {
return (SVGNumber)insertItemBeforeImpl(newItem,index);
}
DOM: Implements SVGNumberList.replaceItem(SVGNumber, int)
. /**
* <b>DOM</b>: Implements {@link SVGNumberList#replaceItem(SVGNumber,int)}.
*/
public SVGNumber replaceItem(SVGNumber newItem, int index)
throws DOMException, SVGException {
return (SVGNumber)replaceItemImpl(newItem,index);
}
DOM: Implements SVGNumberList.removeItem(int)
. /**
* <b>DOM</b>: Implements {@link SVGNumberList#removeItem(int)}.
*/
public SVGNumber removeItem(int index) throws DOMException {
return (SVGNumber)removeItemImpl(index);
}
DOM: Implements SVGNumberList.appendItem(SVGNumber)
. /**
* <b>DOM</b>: Implements {@link SVGNumberList#appendItem(SVGNumber)}.
*/
public SVGNumber appendItem(SVGNumber newItem)
throws DOMException, SVGException {
return (SVGNumber)appendItemImpl(newItem);
}
Creates a new SVGNumberItem
from the given SVGNumber
. /**
* Creates a new {@link SVGNumberItem} from the given {@link SVGNumber}.
*/
protected SVGItem createSVGItem(Object newItem) {
SVGNumber l = (SVGNumber)newItem;
return new SVGNumberItem(l.getValue());
}
Parse the attribute associated with this SVGNumberList.
Params: - value – attribute value
- handler – list handler
/**
* Parse the attribute associated with this SVGNumberList.
* @param value attribute value
* @param handler list handler
*/
protected void doParse(String value, ListHandler handler)
throws ParseException{
NumberListParser NumberListParser = new NumberListParser();
NumberListBuilder builder = new NumberListBuilder(handler);
NumberListParser.setNumberListHandler(builder);
NumberListParser.parse(value);
}
Asserts that the given item object is an SVGNumber
. /**
* Asserts that the given item object is an {@link SVGNumber}.
*/
protected void checkItemType(Object newItem) throws SVGException {
if (!(newItem instanceof SVGNumber)) {
// XXX Fix error code.
createSVGException(SVGException.SVG_WRONG_TYPE_ERR,
"expected SVGNumber",
null);
}
}
Helper class to interface the NumberListParser
and the NumberListHandler
. /**
* Helper class to interface the {@link NumberListParser} and the
* {@link NumberListHandler}.
*/
protected static class NumberListBuilder implements NumberListHandler {
The ListHandler to notify of parsed numbers.
/**
* The ListHandler to notify of parsed numbers.
*/
protected ListHandler listHandler;
The number just parsed.
/**
* The number just parsed.
*/
protected float currentValue;
Creates a new NumberListBuilder.
/**
* Creates a new NumberListBuilder.
*/
public NumberListBuilder(ListHandler listHandler) {
this.listHandler = listHandler;
}
Implements NumberListHandler.startNumberList()
. /**
* Implements {@link NumberListHandler#startNumberList()}.
*/
public void startNumberList() throws ParseException{
listHandler.startList();
}
Implements NumberListHandler.startNumber()
. /**
* Implements {@link NumberListHandler#startNumber()}.
*/
public void startNumber() throws ParseException {
currentValue = 0.0f;
}
Implements NumberListHandler.numberValue(float)
. /**
* Implements {@link NumberListHandler#numberValue(float)}.
*/
public void numberValue(float v) throws ParseException {
currentValue = v;
}
Implements NumberListHandler.endNumber()
. /**
* Implements {@link NumberListHandler#endNumber()}.
*/
public void endNumber() throws ParseException {
listHandler.item(new SVGNumberItem(currentValue));
}
Implements NumberListHandler.endNumberList()
. /**
* Implements {@link NumberListHandler#endNumberList()}.
*/
public void endNumberList() throws ParseException {
listHandler.endList();
}
}
}