Rev 2664 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright 2009 Toby Speight
*
* 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.
*/
package uk.me.parabola.mkgmap.osmstyle.actions;
import uk.me.parabola.mkgmap.reader.osm.Element;
/**
* Perform string substitution on a value.
* The operator => can be used for exact string substitution
* The operator ~> can be used for regexp substitutions
* If no operator is set, the matching string is deleted
*
* @author Toby Speight
* @author Enrico Liboni
*/
public class SubstitutionFilter
extends ValueFilter
{
private final String from
;
private final String to
;
private boolean isRegexp =
false;
public SubstitutionFilter
(String arg
) {
int i = arg.
indexOf("=>");
if (i == -
1) { // no occurrences of =>, let's try with ~>
i = arg.
indexOf("~>");
if ( i
>=
0 ) isRegexp =
true;
}
if (i
>=
0) {
from = arg.
substring(0, i
);
to = arg.
substring(i +
2);
} else {
from = arg
;
to =
"";
}
}
public String doFilter
(String value,
Element el
) {
if (value ==
null) return null;
if (from ==
null || to ==
null)
// can't happen!
return value
;
// replaceAll expects a regexp as 1st argument
return (isRegexp
? value.
replaceAll(from, to
) : value.
replace(from, to
) );
}
}