Rev 3408 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* 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
;
}
}