Rev 2582 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package uk.me.parabola.mkgmap.osmstyle;
import java.io.Writer;
import java.util.Formatter;
import java.util.Map;
import java.util.Map.Entry;
import uk.me.parabola.mkgmap.reader.osm.Rule;
import uk.me.parabola.mkgmap.reader.osm.Style;
import uk.me.parabola.mkgmap.reader.osm.StyleInfo;
/**
* Class for printing out a style.
* Code extracted from StyleImpl, but still needs information from the
* implementation of the style.
*/
public class StylePrinter
{
private final Style style
;
private Map<String,
String> generalOptions
;
private RuleSet nodes
;
private RuleSet lines
;
private RuleSet polygons
;
private RuleSet relations
;
public StylePrinter
(Style style
) {
this.
style = style
;
}
/**
* Writes out this file to the given writer in the single file format. This
* produces a valid style file, although it is mostly used for testing.
*/
public void dumpToFile
(Writer out
) {
Formatter fmt =
new Formatter(out
);
fmt.
format("<<<version>>>\n0\n");
dumpInfo
(fmt
);
dumpOptions
(fmt
);
if (relations
!=
null)
dumpRuleSet
(fmt,
"relations", relations
);
if (nodes
!=
null)
dumpRuleSet
(fmt,
"points", nodes
);
if (lines
!=
null)
dumpRuleSet
(fmt,
"lines", lines
);
if (polygons
!=
null)
dumpRuleSet
(fmt,
"polygons", polygons
);
fmt.
flush();
}
private void dumpOptions
(Formatter fmt
) {
fmt.
format("<<<options>>>\n");
if (generalOptions
!=
null) {
for (Entry
<String,
String> entry : generalOptions.
entrySet())
fmt.
format("%s: %s\n", entry.
getKey(), entry.
getValue());
}
}
private void dumpInfo
(Formatter fmt
) {
fmt.
format("<<<info>>>\n");
StyleInfo styleInfo = style.
getInfo();
fmt.
format("version %s\n", dumpInfoVal
(styleInfo.
getVersion()));
fmt.
format("summary %s\n", dumpInfoVal
(styleInfo.
getSummary()));
// The base styles are combined already, so should not be output. Retained as comments for
// documentation/testing purposes.
for (String name : styleInfo.
baseStyles())
fmt.
format("# base-style %s\n", dumpInfoVal
(name
));
fmt.
format("description %s\n", dumpInfoVal
(styleInfo.
getLongDescription()));
}
private String dumpInfoVal
(String str
) {
if (str.
indexOf('\n') >=
0)
return "{\n" + str +
"\n}";
else
return ": " + str
;
}
private void dumpRuleSet
(Formatter fmt,
String name, RuleSet set
) {
fmt.
format("<<<%s>>>\n", name
);
for (Rule rule : set
) {
fmt.
format("%s\n", rule.
toString());
}
}
void setGeneralOptions
(Map<String,
String> generalOptions
) {
this.
generalOptions = generalOptions
;
}
void setNodes
(RuleSet nodes
) {
this.
nodes = nodes
;
}
void setLines
(RuleSet lines
) {
this.
lines = lines
;
}
void setPolygons
(RuleSet polygons
) {
this.
polygons = polygons
;
}
public void setRelations
(RuleSet relations
) {
this.
relations = relations
;
}
}