001: /***********************************************
002: * created on 10.05.2005
003: * last modified: 31.05.2005
004: *
005: * author: neun and sstein
006: *
007: * description:
008: * saves the actual map window as svg graphics
009: *
010: ***********************************************/package org.openjump.core.ui.plugin.file;
011:
012: import com.vividsolutions.jump.I18N;
013: import com.vividsolutions.jump.task.TaskMonitor;
014: import com.vividsolutions.jump.workbench.WorkbenchContext;
015: import com.vividsolutions.jump.workbench.model.Layer;
016: import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
017: import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
018: import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
019: import com.vividsolutions.jump.workbench.plugin.ThreadedPlugIn;
020: import com.vividsolutions.jump.workbench.plugin.PlugInContext;
021: import com.vividsolutions.jump.workbench.ui.GUIUtil;
022: import com.vividsolutions.jump.workbench.ui.LayerViewPanel;
023: import com.vividsolutions.jump.workbench.ui.MenuNames;
024: import com.vividsolutions.jump.workbench.ui.renderer.LayerRenderer;
025: import com.vividsolutions.jump.workbench.ui.renderer.Renderer;
026: import com.vividsolutions.jump.workbench.ui.renderer.RenderingManager;
027: import java.io.File;
028: import java.io.FileOutputStream;
029: import java.io.OutputStreamWriter;
030: import java.util.List;
031:
032: import javax.swing.JFileChooser;
033:
034: import org.apache.batik.svggen.SVGGraphics2D;
035: import org.apache.batik.dom.GenericDOMImplementation;
036: import org.w3c.dom.Document;
037: import org.w3c.dom.DOMImplementation;
038:
039: /**
040: * @description:
041: * saves the actual map window as svg graphics
042: *
043: * @author neun and sstein
044: *
045: */
046: public class SaveImageAsSVGPlugIn extends AbstractPlugIn implements
047: ThreadedPlugIn {
048:
049: File selFile = null;
050:
051: public SaveImageAsSVGPlugIn() {
052: }
053:
054: public void initialize(PlugInContext context) throws Exception {
055:
056: context
057: .getFeatureInstaller()
058: .addMainMenuItemWithJava14Fix(
059: this ,
060: new String[] { MenuNames.FILE },
061: //new String[] {MenuNames.FILE, MenuNames.FILE_EXPORTLAYERVIEW},
062: //I18N.get("org.openjump.core.ui.plugin.file.SaveImageAsSVGPlugIn.save-image-in-svg-format"),
063: I18N
064: .get("org.openjump.core.ui.plugin.file.SaveImageAsSVGPlugIn.save-image-in-svg-format")
065: + "{pos:9}",
066: false,
067: null,
068: createEnableCheck(context.getWorkbenchContext())); //enable check
069: }
070:
071: public boolean execute(PlugInContext context) throws Exception {
072: JFileChooser fc = GUIUtil
073: .createJFileChooserWithOverwritePrompting("svg");
074: // Show save dialog; this method does not return until the dialog is closed
075: fc.showSaveDialog(context.getWorkbenchFrame());
076: File file = fc.getSelectedFile();
077: try {
078: String name = file.getPath();
079: name = this .addExtension(name, "svg");
080: File newFile = new File(name);
081: this .selFile = newFile;
082: return true;
083: } catch (Exception e) {
084: return false;
085: }
086: }
087:
088: public void run(TaskMonitor monitor, PlugInContext context)
089: throws Exception {
090: //Get a DOMImplementation
091: DOMImplementation domImpl = GenericDOMImplementation
092: .getDOMImplementation();
093:
094: //Create an instance of org.w3c.dom.Document
095: Document document = domImpl.createDocument(null, "svg", null);
096:
097: //Create an instance of the SVG Generator
098: /*
099: SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(document);
100: ctx.setEmbeddedFontsOn(true);
101: SVGGraphics2D svgGenerator = new SVGGraphics2D(ctx, true);
102: */
103: SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
104:
105: // --- Test with changed classes of Openjump and the new maxFeatures
106: // field in FeatureCollectionRenderer.class
107:
108: LayerViewPanel lvp = context.getLayerViewPanel();
109: RenderingManager rms = lvp.getRenderingManager();
110: List layers = context.getLayerManager().getVisibleLayers(false);
111: for (int i = 0; i < layers.size(); i++) {
112: Layer layer = (Layer) layers.get(i);
113: Renderer myR = rms.getRenderer(layer);
114: if (myR instanceof LayerRenderer) {
115: LayerRenderer myRnew = (LayerRenderer) myR;
116: myRnew.setMaxFeatures(10000);
117: }
118: }
119: lvp.repaint();
120: lvp.paintComponent(svgGenerator);
121: //------------------------------
122: //reset the old state of 100 features
123: for (int i = 0; i < layers.size(); i++) {
124: Layer layer = (Layer) layers.get(i);
125: Renderer myR = rms.getRenderer(layer);
126: if (myR instanceof LayerRenderer) {
127: LayerRenderer myRnew = (LayerRenderer) myR;
128: myRnew.setMaxFeatures(100);
129: }
130: }
131: //------------------------------
132:
133: /** old working code for original jump
134: // paint using new renderer
135: LayerViewPanel lvp = context.getLayerViewPanel();
136: RenderingManager rm = lvp.getRenderingManager();
137: Class[] types1 = {Object.class, Renderer.class};
138: List layers = context.getLayerManager().getVisibleLayers(false);
139: for (int i=0; i < layers.size(); i++) {
140: Layer layer = (Layer)layers.get(i);
141: //-- do now this:
142: // rm.setRenderer(layer,new SvgRenderer(layer, context.getLayerViewPanel()));
143: // but for an invisible method setRenderer()
144: SvgRenderer sr = new SvgRenderer(layer, context.getLayerViewPanel());
145: Object[] params1 ={layer, sr};
146: AccessToPrivateMethods.invokePrivateMethod("setRenderer",rm,RenderingManager.class,params1,types1);
147: sr.createRunnable(); //do paint (also on screen)
148: }
149: //paint the layerview into the svgGenerator
150: lvp.paintComponent(svgGenerator);
151: **/
152:
153: //Finally, stream out SVG to the your file
154: //Writer out = new FileWriter("MyMoMap.svg");
155: //FileWriter out = new FileWriter(selFile);
156: try {
157: FileOutputStream fos = new FileOutputStream(this .selFile,
158: false);
159: OutputStreamWriter out = new OutputStreamWriter(fos,
160: "UTF-8");
161: svgGenerator.stream(out, true);
162: out.close();
163: } catch (Exception e) {
164: context.getWorkbenchFrame().warnUser(
165: "error:" + e.getMessage());
166: }
167: }
168:
169: public static MultiEnableCheck createEnableCheck(
170: WorkbenchContext workbenchContext) {
171: EnableCheckFactory checkFactory = new EnableCheckFactory(
172: workbenchContext);
173:
174: return new MultiEnableCheck()
175: .add(
176: checkFactory
177: .createWindowWithLayerNamePanelMustBeActiveCheck())
178: .add(
179: checkFactory
180: .createAtLeastNLayersMustBeSelectedCheck(0));
181: }
182:
183: private String addExtension(String path, String extension) {
184: if (path.toUpperCase().endsWith(extension.toUpperCase())) {
185: return path;
186: }
187: if (path.endsWith(".")) {
188: return path + extension;
189: }
190: return path + "." + extension;
191: }
192: }
|