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