/*
* Copyright (C) 2010 Jeffrey C. Ollie
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* Author: Jeffrey C. Ollie
* Create date: 08-March-2010
*/
package uk.me.parabola.mkgmap.osmstyle.actions;
import uk.me.parabola.mkgmap.reader.osm.Element;
import uk.me.parabola.mkgmap.scan.SyntaxException;
/**
* Extract a substring from a value
*
* @author Jeffrey C. Ollie
*/
public class SubstringFilter extends ValueFilter {
private int args;
private int start;
private int end;
public SubstringFilter(String arg) {
start = 0;
end = 0;
args = 0;
String[] temp = arg.split(":");
try {
if (temp.length == 1) {
start = Integer.parseInt(temp[0]);
args = 1;
} else if (temp.length == 2) {
start = Integer.parseInt(temp[0]);
end = Integer.parseInt(temp[1]);
args = 2;
} else {
throw new SyntaxException(String.format("invalid argunemt for style substring command: '%s'", arg));
}
} catch (NumberFormatException e) {
throw new SyntaxException(String.format("Numbers not valid in style substring command: '%s'", arg));
}
if (args == 2 && start > end){
throw new SyntaxException(String.format("start > end in style substring command: '%s'", arg));
}
}
protected String doFilter(String value, Element el) {
if (value == null) return null;
if (start > value.length())
return null;
if (args == 1 || end > value.length()) {
return value.substring(start);
}
if (args == 2) {
return value.substring(start, end);
}
return value;
}
}