add ThemeException, formatting

This commit is contained in:
Hannes Janetzek 2013-09-29 14:53:13 +02:00
parent b5ec02e2a0
commit 53572671de

View File

@ -61,6 +61,14 @@ public class RenderThemeHandler extends DefaultHandler {
RENDER_THEME, RENDERING_INSTRUCTION, RULE, STYLE, ATLAS; RENDER_THEME, RENDERING_INSTRUCTION, RULE, STYLE, ATLAS;
} }
static class ThemeException extends IllegalArgumentException {
public ThemeException(String string) {
super(string);
}
private static final long serialVersionUID = 1L;
}
//private static final String ELEMENT_NAME_RENDER_THEME = "rendertheme"; //private static final String ELEMENT_NAME_RENDER_THEME = "rendertheme";
private static final String ELEMENT_NAME_MATCH = "m"; private static final String ELEMENT_NAME_MATCH = "m";
private static final String UNEXPECTED_ELEMENT = "unexpected element: "; private static final String UNEXPECTED_ELEMENT = "unexpected element: ";
@ -322,7 +330,7 @@ public class RenderThemeHandler extends DefaultHandler {
Log.d(TAG, "unknown element: " + localName); Log.d(TAG, "unknown element: " + localName);
//throw new SAXException("unknown element: " + localName); //throw new SAXException("unknown element: " + localName);
} }
} catch (IllegalArgumentException e) { } catch (ThemeException e) {
throw new SAXException(null, e); throw new SAXException(null, e);
} catch (IOException e) { } catch (IOException e) {
throw new SAXException(null, e); throw new SAXException(null, e);
@ -343,8 +351,7 @@ public class RenderThemeHandler extends DefaultHandler {
} }
} }
if (img == null) if (img == null)
throw new IllegalArgumentException("missing attribute 'img' for element: " throw new ThemeException("missing attribute 'img' for element: " + elementName);
+ elementName);
Bitmap bitmap = CanvasAdapter.g.loadBitmapAsset(IMG_PATH + img); Bitmap bitmap = CanvasAdapter.g.loadBitmapAsset(IMG_PATH + img);
mTextureAtlas = new TextureAtlas(bitmap); mTextureAtlas = new TextureAtlas(bitmap);
@ -373,7 +380,7 @@ public class RenderThemeHandler extends DefaultHandler {
} }
} }
if (regionName == null || r == null) if (regionName == null || r == null)
throw new IllegalArgumentException("missing attribute 'name' or 'rect' for element: " throw new ThemeException("missing attribute 'name' or 'rect' for element: "
+ elementName); + elementName);
mTextureAtlas.addTextureRegion(regionName.intern(), r); mTextureAtlas.addTextureRegion(regionName.intern(), r);
@ -436,33 +443,34 @@ public class RenderThemeHandler extends DefaultHandler {
String name = attributes.getLocalName(i); String name = attributes.getLocalName(i);
String value = attributes.getValue(i); String value = attributes.getValue(i);
if ("schemaLocation".equals(name)) { if ("schemaLocation".equals(name))
continue; continue;
} else if ("version".equals(name)) {
else if ("version".equals(name))
version = Integer.valueOf(Integer.parseInt(value)); version = Integer.valueOf(Integer.parseInt(value));
} else if ("map-background".equals(name)) {
else if ("map-background".equals(name))
mapBackground = Color.parseColor(value); mapBackground = Color.parseColor(value);
} else if ("base-stroke-width".equals(name)) {
else if ("base-stroke-width".equals(name))
baseStrokeWidth = Float.parseFloat(value); baseStrokeWidth = Float.parseFloat(value);
} else if ("base-text-size".equals(name)) {
else if ("base-text-size".equals(name))
baseTextSize = Float.parseFloat(value); baseTextSize = Float.parseFloat(value);
} else {
else
RenderThemeHandler.logUnknownAttribute(elementName, name, value, i); RenderThemeHandler.logUnknownAttribute(elementName, name, value, i);
}
} }
if (version == null) { if (version == null)
throw new IllegalArgumentException("missing attribute version for element:" throw new ThemeException("missing attribute version for element:" + elementName);
+ elementName); else if (version.intValue() != RENDER_THEME_VERSION)
} else if (version.intValue() != RENDER_THEME_VERSION) { throw new ThemeException("invalid render theme version:" + version);
throw new IllegalArgumentException("invalid render theme version:" + version); else if (baseStrokeWidth < 0)
} else if (baseStrokeWidth < 0) { throw new ThemeException("base-stroke-width must not be negative: " + baseStrokeWidth);
throw new IllegalArgumentException("base-stroke-width must not be negative: " else if (baseTextSize < 0)
+ baseStrokeWidth); throw new ThemeException("base-text-size must not be negative: " + baseTextSize);
} else if (baseTextSize < 0) {
throw new IllegalArgumentException("base-text-size must not be negative: "
+ baseTextSize);
}
return new RenderTheme(mapBackground, baseStrokeWidth, baseTextSize); return new RenderTheme(mapBackground, baseStrokeWidth, baseTextSize);
} }
@ -492,33 +500,46 @@ public class RenderThemeHandler extends DefaultHandler {
for (int i = 0; i < attributes.getLength(); ++i) { for (int i = 0; i < attributes.getLength(); ++i) {
String name = attributes.getLocalName(i); String name = attributes.getLocalName(i);
String value = attributes.getValue(i); String value = attributes.getValue(i);
if ("id".equals(name)) if ("id".equals(name))
style = value; style = value;
else if ("k".equals(name)) {
else if ("k".equals(name))
textKey = value.intern(); textKey = value.intern();
} else if ("font-family".equals(name)) {
else if ("font-family".equals(name))
fontFamily = FontFamily.valueOf(value.toUpperCase()); fontFamily = FontFamily.valueOf(value.toUpperCase());
} else if ("font-style".equals(name)) {
else if ("font-style".equals(name))
fontStyle = FontStyle.valueOf(value.toUpperCase()); fontStyle = FontStyle.valueOf(value.toUpperCase());
} else if ("font-size".equals(name)) {
else if ("font-size".equals(name))
fontSize = Float.parseFloat(value); fontSize = Float.parseFloat(value);
} else if ("fill".equals(name)) {
else if ("fill".equals(name))
fill = Color.parseColor(value); fill = Color.parseColor(value);
} else if ("stroke".equals(name)) {
else if ("stroke".equals(name))
stroke = Color.parseColor(value); stroke = Color.parseColor(value);
} else if ("stroke-width".equals(name)) {
else if ("stroke-width".equals(name))
strokeWidth = Float.parseFloat(value); strokeWidth = Float.parseFloat(value);
} else if ("caption".equals(name)) {
else if ("caption".equals(name))
caption = Boolean.parseBoolean(value); caption = Boolean.parseBoolean(value);
} else if ("priority".equals(name)) {
else if ("priority".equals(name))
priority = Integer.parseInt(value); priority = Integer.parseInt(value);
} else if ("dy".equals(name)) {
else if ("dy".equals(name))
dy = Float.parseFloat(value); dy = Float.parseFloat(value);
} else if ("symbol".equals(name)) {
else if ("symbol".equals(name))
symbol = value; symbol = value;
} else {
else
logUnknownAttribute(elementName, name, value, i); logUnknownAttribute(elementName, name, value, i);
}
} }
validateText(elementName, textKey, fontSize, strokeWidth); validateText(elementName, textKey, fontSize, strokeWidth);
@ -529,16 +550,12 @@ public class RenderThemeHandler extends DefaultHandler {
private static void validateText(String elementName, String textKey, float fontSize, private static void validateText(String elementName, String textKey, float fontSize,
float strokeWidth) { float strokeWidth) {
if (textKey == null) { if (textKey == null)
throw new IllegalArgumentException("missing attribute k for element: " throw new ThemeException("missing attribute k for element: " + elementName);
+ elementName); else if (fontSize < 0)
} else if (fontSize < 0) { throw new ThemeException("font-size must not be negative: " + fontSize);
throw new IllegalArgumentException("font-size must not be negative: " else if (strokeWidth < 0)
+ fontSize); throw new ThemeException("stroke-width must not be negative: " + strokeWidth);
} else if (strokeWidth < 0) {
throw new IllegalArgumentException("stroke-width must not be negative: "
+ strokeWidth);
}
} }
/** /**
@ -593,36 +610,49 @@ public class RenderThemeHandler extends DefaultHandler {
if ("id".equals(name)) if ("id".equals(name))
style = value; style = value;
else if ("src".equals(name)) {
// src = value; else if ("src".equals(name))
} else if ("stroke".equals(name)) { ;// src = value;
else if ("stroke".equals(name))
color = Color.parseColor(value); color = Color.parseColor(value);
} else if ("width".equals(name) || "stroke-width".equals(name)) {
else if ("width".equals(name) || "stroke-width".equals(name))
width = Float.parseFloat(value); width = Float.parseFloat(value);
} else if ("cap".equals(name) || "stroke-linecap".equals(name)) {
else if ("cap".equals(name) || "stroke-linecap".equals(name))
cap = Cap.valueOf(value.toUpperCase()); cap = Cap.valueOf(value.toUpperCase());
} else if ("fix".equals(name)) {
else if ("fix".equals(name))
fixed = Boolean.parseBoolean(value); fixed = Boolean.parseBoolean(value);
} else if ("stipple".equals(name)) {
else if ("stipple".equals(name))
stipple = Integer.parseInt(value); stipple = Integer.parseInt(value);
} else if ("stipple-stroke".equals(name)) {
else if ("stipple-stroke".equals(name))
stippleColor = Color.parseColor(value); stippleColor = Color.parseColor(value);
} else if ("stipple-width".equals(name)) {
else if ("stipple-width".equals(name))
stippleWidth = Float.parseFloat(value); stippleWidth = Float.parseFloat(value);
} else if ("fade".equals(name)) {
else if ("fade".equals(name))
fade = Integer.parseInt(value); fade = Integer.parseInt(value);
} else if ("min".equals(name)) {
else if ("min".equals(name))
min = Float.parseFloat(value); min = Float.parseFloat(value);
} else if ("blur".equals(name)) {
else if ("blur".equals(name))
blur = Float.parseFloat(value); blur = Float.parseFloat(value);
} else if ("style".equals(name)) {
// ignore else if ("style".equals(name))
} else if ("dasharray".equals(name)) { ; // ignore
// ignore
} else { else if ("dasharray".equals(name))
; // TBD
else
logUnknownAttribute(elementName, name, value, i); logUnknownAttribute(elementName, name, value, i);
} }
}
// inherit properties from 'line' // inherit properties from 'line'
if (line != null) { if (line != null) {
@ -641,10 +671,8 @@ public class RenderThemeHandler extends DefaultHandler {
} }
private static void validateLine(float strokeWidth) { private static void validateLine(float strokeWidth) {
if (strokeWidth < 0) { if (strokeWidth < 0)
throw new IllegalArgumentException("width must not be negative: " throw new ThemeException("width must not be negative: " + strokeWidth);
+ strokeWidth);
}
} }
/** /**
@ -671,28 +699,36 @@ public class RenderThemeHandler extends DefaultHandler {
for (int i = 0; i < attributes.getLength(); ++i) { for (int i = 0; i < attributes.getLength(); ++i) {
String name = attributes.getLocalName(i); String name = attributes.getLocalName(i);
String value = attributes.getValue(i); String value = attributes.getValue(i);
if ("id".equals(name)) if ("id".equals(name))
style = value; style = value;
else if ("src".equals(name)) {
else if ("src".equals(name))
src = value; src = value;
} else if ("fill".equals(name)) {
else if ("fill".equals(name))
fill = Color.parseColor(value); fill = Color.parseColor(value);
} else if ("stroke".equals(name)) {
else if ("stroke".equals(name))
stroke = Color.parseColor(value); stroke = Color.parseColor(value);
} else if ("stroke-width".equals(name)) {
else if ("stroke-width".equals(name))
strokeWidth = Float.parseFloat(value); strokeWidth = Float.parseFloat(value);
} else if ("fade".equals(name)) {
else if ("fade".equals(name))
fade = Integer.parseInt(value); fade = Integer.parseInt(value);
} else if ("blend".equals(name)) {
else if ("blend".equals(name))
blend = Integer.parseInt(value); blend = Integer.parseInt(value);
} else if ("blend-fill".equals(name)) {
else if ("blend-fill".equals(name))
blendFill = Color.parseColor(value); blendFill = Color.parseColor(value);
} else {
else
logUnknownAttribute(elementName, name, value, i); logUnknownAttribute(elementName, name, value, i);
} }
}
validateArea(strokeWidth); validateLine(strokeWidth);
if (src != null) { if (src != null) {
try { try {
@ -707,13 +743,6 @@ public class RenderThemeHandler extends DefaultHandler {
blendFill, texture); blendFill, texture);
} }
private static void validateArea(float strokeWidth) {
if (strokeWidth < 0) {
throw new IllegalArgumentException("stroke-width must not be negative: "
+ strokeWidth);
}
}
/** /**
* @param elementName * @param elementName
* the name of the XML element. * the name of the XML element.
@ -734,35 +763,36 @@ public class RenderThemeHandler extends DefaultHandler {
String name = attributes.getLocalName(i); String name = attributes.getLocalName(i);
String value = attributes.getValue(i); String value = attributes.getValue(i);
if ("r".equals(name) || "radius".equals(name)) { if ("r".equals(name) || "radius".equals(name))
radius = Float.valueOf(Float.parseFloat(value)); radius = Float.valueOf(Float.parseFloat(value));
} else if ("scale-radius".equals(name)) {
else if ("scale-radius".equals(name))
scaleRadius = Boolean.parseBoolean(value); scaleRadius = Boolean.parseBoolean(value);
} else if ("fill".equals(name)) {
else if ("fill".equals(name))
fill = Color.parseColor(value); fill = Color.parseColor(value);
} else if ("stroke".equals(name)) {
else if ("stroke".equals(name))
stroke = Color.parseColor(value); stroke = Color.parseColor(value);
} else if ("stroke-width".equals(name)) {
else if ("stroke-width".equals(name))
strokeWidth = Float.parseFloat(value); strokeWidth = Float.parseFloat(value);
} else {
else
logUnknownAttribute(elementName, name, value, i); logUnknownAttribute(elementName, name, value, i);
} }
}
validateCircle(elementName, radius, strokeWidth); validateCircle(elementName, radius, strokeWidth);
return new Circle(radius, scaleRadius, fill, stroke, strokeWidth, level); return new Circle(radius, scaleRadius, fill, stroke, strokeWidth, level);
} }
private static void validateCircle(String elementName, Float radius, float strokeWidth) { private static void validateCircle(String elementName, Float radius, float strokeWidth) {
if (radius == null) { if (radius == null)
throw new IllegalArgumentException("missing attribute r for element: " throw new ThemeException("missing attribute r for element: " + elementName);
+ elementName); else if (radius.floatValue() < 0)
} else if (radius.floatValue() < 0) { throw new ThemeException("radius must not be negative: " + radius);
throw new IllegalArgumentException("radius must not be negative: " + radius); else if (strokeWidth < 0)
} else if (strokeWidth < 0) { throw new ThemeException("stroke-width must not be negative: " + strokeWidth);
throw new IllegalArgumentException("stroke-width must not be negative: "
+ strokeWidth);
}
} }
/** /**
@ -781,28 +811,23 @@ public class RenderThemeHandler extends DefaultHandler {
String name = attributes.getLocalName(i); String name = attributes.getLocalName(i);
String value = attributes.getValue(i); String value = attributes.getValue(i);
if ("src".equals(name)) { if ("src".equals(name))
src = value; src = value;
} else if ("align-center".equals(name)) {
else if ("align-center".equals(name))
alignCenter = Boolean.parseBoolean(value); alignCenter = Boolean.parseBoolean(value);
} else if ("repeat".equals(name)) {
else if ("repeat".equals(name))
repeat = Boolean.parseBoolean(value); repeat = Boolean.parseBoolean(value);
} else {
else
logUnknownAttribute(elementName, name, value, i); logUnknownAttribute(elementName, name, value, i);
} }
}
validateLineSymbol(elementName, src); validateSymbol(elementName, src);
return new LineSymbol(src, alignCenter, repeat); return new LineSymbol(src, alignCenter, repeat);
} }
private static void validateLineSymbol(String elementName, String src) {
if (src == null) {
throw new IllegalArgumentException("missing attribute src for element: "
+ elementName);
}
}
/** /**
* @param elementName * @param elementName
* the name of the XML element. * the name of the XML element.
@ -817,12 +842,12 @@ public class RenderThemeHandler extends DefaultHandler {
String name = attributes.getLocalName(i); String name = attributes.getLocalName(i);
String value = attributes.getValue(i); String value = attributes.getValue(i);
if ("src".equals(name)) { if ("src".equals(name))
src = value; src = value;
} else {
else
logUnknownAttribute(elementName, name, value, i); logUnknownAttribute(elementName, name, value, i);
} }
}
validateSymbol(elementName, src); validateSymbol(elementName, src);
return new Symbol(src); return new Symbol(src);