public class ExportSLD implements IOp {
public class QueryAndSave implements Runnable {
private String out;
private Layer layer;
private IProgressMonitor monitor;
private Display display;
public QueryAndSave( Layer layer, String out, Display display, IProgressMonitor monitor ) {
this.layer=layer;
this.out=out;
this.display=display;
this.monitor=monitor;
}
File file;
public void run() {
do{
if (!getFile())
return;
boolean write=true;
if( file.exists() ){
write=MessageDialog.openConfirm(display.getActiveShell(), Messages.getString("ExportSLD.saveAs"), file.getAbsolutePath()+Messages.getString("ExportSLD.exists") + Messages.getString("ExportSLD.replace")); }
if( write ){
try {
FileWriter writer=new FileWriter(file, false);
writer.write(out);
writer.close();
} catch (Exception e) {
file=null;
MessageDialog.openError(display.getActiveShell(), Messages.getString("ExportSLD.saveAs"), Messages.getString("ExportSLD.modifyError")); }
}else{
file=null;
}
}while( file==null );
}
private boolean getFile() {
FileDialog fileDialog=new FileDialog(display.getActiveShell(),SWT.SAVE);
fileDialog.setFilterExtensions(new String[]{"*.sld"}); fileDialog.setFilterNames(new String[]{Messages.getString("ExportSLD.SLD")}); String name=layer.getName();
if( name==null ){
try {
name=layer.getGeoResource().getInfo(monitor).getTitle();
} catch (IOException e) {
ExportPlugin.log("error getting name from layer's georesource", e); }
if( name==null ){
try {
name=layer.getGeoResource().getInfo(monitor).getName();
} catch (IOException e) {
ExportPlugin.log("error getting name from layer's georesource", e); }
}
}
if( name!=null)
fileDialog.setFileName(name+".sld"); String path=fileDialog.open();
if( path==null)
return false;
file=new File(path);
return true;
}
}
public void op( Display display, Object target, IProgressMonitor monitor ) throws Exception {
Layer layer=(Layer) target;
Style style=(Style) layer.getStyleBlackboard().get(SLDContent.ID);
SLDTransformer sldWriter = new SLDTransformer();
String out = ""; try {
out = sldWriter.transform(style);
} catch (TransformerException e) {
ExportPlugin.log(null, e);
e.printStackTrace();
} catch (Exception e) {
ExportPlugin.log(null, e);
}
display.asyncExec(new QueryAndSave(layer, out, display, monitor));
}
}