new MapStyle(persistent);
}
protected MapStyle( final boolean persistent) {
super();
ModeController modeController = Controller.getCurrentModeController();
if (persistent) {
final MapController mapController = modeController.getMapController();
mapController.getWriteManager().addExtensionElementWriter(getExtensionClass(),
new XmlWriter());
mapController.getReadManager().addElementHandler("conditional_styles", new IElementDOMHandler() {
public Object createElement(Object parent, String tag, XMLElement attributes) {
return parent;
}
public void endElement(Object parent, String tag, Object element, XMLElement dom) {
final NodeModel node = (NodeModel) parent;
final MapStyleModel mapStyleModel = MapStyleModel.getExtension(node);
if(mapStyleModel != null)
loadConditionalStyles(mapStyleModel.getConditionalStyleModel(), dom);
}
});
mapController.getWriteManager().addExtensionElementWriter(ConditionalStyleModel.class,
new IExtensionElementWriter() {
public void writeContent(ITreeWriter writer, Object element, IExtension extension) throws IOException {
final ConditionalStyleModel conditionalStyleModel = (ConditionalStyleModel) extension;
if (conditionalStyleModel.getStyleCount() == 0)
return;
final XMLElement hook = new XMLElement("hook");
hook.setAttribute("NAME", NODE_CONDITIONAL_STYLES);
saveConditionalStyles(conditionalStyleModel, hook, false);
writer.addElement(null, hook);
}
});
mapController.getReadManager().addElementHandler("hook", new IElementDOMHandler() {
public Object createElement(Object parent, String tag, XMLElement attributes) {
if (attributes == null
|| !NODE_CONDITIONAL_STYLES.equals(attributes.getAttribute("NAME", null))) {
return null;
}
final ConditionalStyleModel conditionalStyleModel = new ConditionalStyleModel();
((NodeModel)parent).addExtension(conditionalStyleModel);
return conditionalStyleModel;
}
public void endElement(Object parent, String tag, Object element, XMLElement dom) {
loadConditionalStyles((ConditionalStyleModel) element, dom);
}
});
mapController.getReadManager().addElementHandler("map_styles", new IElementContentHandler() {
public Object createElement(Object parent, String tag, XMLElement attributes) {
return parent;
}
public void endElement(final Object parent, final String tag, final Object userObject,
final XMLElement attributes, final String content) {
// bugfix
if(isContentEmpty(content))
return;
final NodeModel node = (NodeModel) userObject;
final MapStyleModel mapStyleModel = MapStyleModel.getExtension(node);
if (mapStyleModel == null) {
return;
}
final MapModel map = node.getMap();
mapStyleModel.createStyleMap(map, mapStyleModel, content);
map.getIconRegistry().addIcons(mapStyleModel.getStyleMap());
}
private boolean isContentEmpty(final String content) {
return content.indexOf('<') == -1;
}
}
);
}
modeController.getMapController().addMapLifeCycleListener(this);
final MapController mapController = modeController.getMapController();
mapController.addMapLifeCycleListener(this);
}