Hi thomas,
no, the map-thing is correct. The map shall replace the
lengthy if-else if -
statement in the getAttributeType-methods. The map only
returns the same
mappings as the if-statement.
Anything not in the map is handled by the last statement in
the method:
super.getAttributeType().
So the map is local only for this ( each ) class.
Sub-classes would have
their own maps.
All these lookup maps are read-only and fixed after
creation.
However, cameron send me a message, that he is going to do a
major rework in
that package,
so any further work on the map-thing (to add these to the
other classes)
might be obsolete soon.
greetings
dieter
----- Original Message -----
From: <thomas.deweese kodak.com>
To: <batik-dev xmlgraphics.apache.org>
Cc: <batik-commits xmlgraphics.apache.org>
Sent: Tuesday, November 28, 2006 12:10 PM
Subject: Re: svn commit: r479562 -
/xmlgraphics/batik/trunk/sources/org/apache/batik/dom/svg/SV
GGraphicsElement
.java
> Hi Dieter
>
> I'm a little nervous about the map being static.
The direction seems
> right
> but it seems that most subclasses of SVGGraphicsElement
override this
> method
> with additional attribute types.
>
> I would suggest that we either have a method that
returns the
> attribute Type
> map, then we do something like (note pseudo code, we
also need to deal
> with namespaces here):
>
> // Start with parents type mapping...
> protected static final classTypeMap = new
> HashMap(super.classTypeMap);
>
> // Every class provides a version of this...
> protected Map getTypeMap() { return
classTypeMap; }
>
> static {
> Map map = classTypeMap;
> SVGOMAttributeInfo svgType;
> svgType = new
SVOMAttributeInfo(SVGTypes.TYPE_LENGTH, true);
> map.put( SVG_X_ATTRIBUTE, svgType);
> map.put( SVG_Y_ATTRIBUTE, svgType);
> map.put( SVG_RX_ATTRIBUTE, svgType);
> /* etc */
> }
>
>
> public int getAttributeType(String ns, String ln) {
> if (ns != null)
> return SVGTypes.TYPE_UNKNOWN;
> SVGOMAttributeInfo typeCode =
> (SVGOMAttributeInfo)getTypeMap().get( ln );
>
> if ( typeCode == null )
> return SVGTypes.TYPE_UNKNOWN;
> return typeCode.getSVGType();
> }
>
> dvholten apache.org wrote on 11/27/2006 04:49:01
AM:
>
> > + /**
> > + * this map supports a fast lookup from
svg-attribute-name string
> to
> > + * svgType-integer. It is faster than doing
string-equals in a
> > + * lengthy if-else-statement.
> > + * This map is used only by { link
#getAttributeType }
> > + */
> > + private static final Map typeMap = new
HashMap();
> > +
> > + static {
> > + Map map = typeMap;
> > +
> > + SVGOMAttributeInfo svgType = new
SVGOMAttributeInfo( SVGTypes.
> > TYPE_TRANSFORM_LIST, true );
> > + map.put( SVG_TRANSFORM_ATTRIBUTE,
svgType );
> > +
> > + svgType = new SVGOMAttributeInfo(
SVGTypes.TYPE_IDENT, true );
> > + map.put(
SVG_EXTERNAL_RESOURCES_REQUIRED_ATTRIBUTE, svgType );
> > +
> > + svgType = new SVGOMAttributeInfo(
SVGTypes.TYPE_URI_LIST, false
> );
> > + map.put(
SVG_REQUIRED_EXTENSIONS_ATTRIBUTE, svgType );
> > + map.put(
SVG_REQUIRED_FEATURES_ATTRIBUTE, svgType );
> > +
> > + svgType = new SVGOMAttributeInfo(
SVGTypes.TYPE_LANG_LIST,
> false );
> > + map.put( SVG_SYSTEM_LANGUAGE_ATTRIBUTE,
svgType );
> > +
> > + }
> > +
> > +
> > +
> > /**
> > * Supplemental transformation due to motion
animation.
> > */
> >  -227,8 +261,9 
> >
> > /**
> > * Returns the type of the given attribute.
> > + * to be removed
> > */
> > - public int getAttributeType(String ns, String
ln) {
> > + public int OLDgetAttributeType(String ns,
String ln) {
> > if (ns == null) {
> > if
(ln.equals(SVG_TRANSFORM_ATTRIBUTE)) {
> > return
SVGTypes.TYPE_TRANSFORM_LIST;
> >  -239,6 +274,21 
> > return SVGTypes.TYPE_URI_LIST;
> > } else if
(ln.equals(SVG_SYSTEM_LANGUAGE_ATTRIBUTE)) {
> > return SVGTypes.TYPE_LANG_LIST;
> > + }
> > + }
> > + return super.getAttributeType(ns, ln);
> > + }
> > +
> > + /**
> > + * Returns the type of the given attribute.
> > + */
> > + public int getAttributeType(String ns, String
ln) {
> > +
> > + if (ns == null) {
> > + SVGOMAttributeInfo typeCode =
> (SVGOMAttributeInfo)typeMap.get( ln );
> > + if ( typeCode != null ){
> > + // it is one of 'my' mappings..
> > + return typeCode.getSVGType();
> > }
> > }
> > return super.getAttributeType(ns, ln);
> >
> >
>
>
>
------------------------------------------------------------
---------
> To unsubscribe, e-mail: batik-dev-unsubscribe xmlgraphics.apache.org
> For additional commands, e-mail: batik-dev-help xmlgraphics.apache.org
>
------------------------------------------------------------
---------
To unsubscribe, e-mail: batik-dev-unsubscribe xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help xmlgraphics.apache.org
|