]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/SCLEditorBase.java
Externalize strings
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / componentTypeEditor / SCLEditorBase.java
index a2cb14b69ec2f4f9e69eaba6cb08ab8b7410f8e0..e5bfc8f44e66d2b44d2a667ca632e29e6b5eade7 100644 (file)
-package org.simantics.modeling.ui.componentTypeEditor;\r
-\r
-import org.eclipse.core.runtime.IExecutableExtension;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.text.ITextListener;\r
-import org.eclipse.jface.text.TextEvent;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.part.EditorPart;\r
-import org.simantics.Simantics;\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.request.ResourceRead;\r
-import org.simantics.db.common.request.UniqueRead;\r
-import org.simantics.db.common.request.WriteRequest;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.util.Layer0Utils;\r
-import org.simantics.db.procedure.Listener;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.scl.compiler.errors.CompilationError;\r
-import org.simantics.scl.ui.editor.SCLTextEditorNew;\r
-import org.simantics.scl.ui.editor.TextAndErrors;\r
-import org.simantics.structural2.scl.procedural.CompileProceduralComponentTypeRequest;\r
-import org.simantics.structural2.scl.procedural.ProceduralComponentTypeCompilationException;\r
-import org.simantics.ui.workbench.IResourceEditorInput;\r
-import org.simantics.ui.workbench.TitleUpdater;\r
-import org.simantics.utils.ui.ErrorLogger;\r
-import org.simantics.utils.ui.SWTUtils;\r
-\r
-public class SCLEditorBase extends EditorPart implements IExecutableExtension {\r
-    Resource inputResource;\r
-    SCLTextEditorNew editor;\r
-    String originalText;\r
-\r
-    protected TextAndErrors getTextAndErrors(ReadGraph graph, Resource resource) throws DatabaseException {\r
-        Layer0 L0 = Layer0.getInstance(graph);\r
-        String text = graph.getValue(resource, Bindings.STRING);\r
-        Resource componentType = graph.getPossibleObject(inputResource, L0.PropertyOf);\r
-        CompilationError[] errors = CompilationError.EMPTY_ARRAY;\r
-        if(componentType != null) {\r
-            try { \r
-                graph.syncRequest(new CompileProceduralComponentTypeRequest(componentType));\r
-            } catch(ProceduralComponentTypeCompilationException e) {\r
-                errors = e.errors;\r
-            }\r
-        }\r
-        return new TextAndErrors(text, errors);\r
-    }\r
-    \r
-    @Override\r
-    public void createPartControl(Composite parent) {\r
-        editor = new SCLTextEditorNew(parent, 0);\r
-        \r
-        Simantics.getSession().asyncRequest(new ResourceRead<TextAndErrors>(inputResource) {\r
-            @Override\r
-            public TextAndErrors perform(ReadGraph graph) throws DatabaseException {\r
-               return getTextAndErrors(graph, inputResource);\r
-            }\r
-        }, new Listener<TextAndErrors>() {\r
-            @Override\r
-            public void execute(final TextAndErrors textAndErrors) {\r
-                SWTUtils.asyncExec(editor, new Runnable() {\r
-                    @Override\r
-                    public void run() {\r
-                        \r
-                        if (editor.isDisposed())\r
-                            return;\r
-                        \r
-                        // FIXME Every graph change new overrides user's current modifications  \r
-                        \r
-                        originalText = textAndErrors.text;\r
-                        boolean textDiffers = !originalText.equals(editor.getContent());\r
-                        editor.setContent(textDiffers ? originalText : null, textAndErrors.errors);\r
-                        firePropertyChange(PROP_DIRTY);\r
-                        \r
-                        // This condition is only true for the first time when the editor is initialized\r
-                        // This fixes platform issue #5192 https://www.simantics.org/redmine/issues/5192\r
-                        if (textDiffers)\r
-                            editor.getUndoManager().reset();\r
-                    }\r
-                });\r
-            }\r
-\r
-            @Override\r
-            public void exception(Throwable t) {\r
-                ErrorLogger.defaultLogError(t);\r
-            }\r
-\r
-            @Override\r
-            public boolean isDisposed() {\r
-                return editor.isDisposed();\r
-            }\r
-\r
-        });\r
-\r
-        editor.viewer.addTextListener(new ITextListener() {\r
-            @Override\r
-            public void textChanged(TextEvent event) {\r
-                firePropertyChange(PROP_DIRTY);\r
-            }\r
-        });\r
-    }\r
-    \r
-    @Override\r
-    public void setFocus() {\r
-        editor.setFocus();\r
-    }\r
-\r
-    protected void save(WriteGraph graph, Resource resource, String text) throws DatabaseException {\r
-        graph.claimValue(resource, text);\r
-    }\r
-    \r
-    @Override\r
-    public void doSave(IProgressMonitor monitor) {\r
-        this.originalText = editor.getContent();\r
-        firePropertyChange(PROP_DIRTY);\r
-        try {\r
-            Simantics.getSession().syncRequest(new WriteRequest() {\r
-                @Override\r
-                public void perform(WriteGraph graph) throws DatabaseException {\r
-                    graph.markUndoPoint();\r
-                       save(graph, inputResource, originalText);\r
-                       Layer0Utils.addCommentMetadata(graph, "Saved SCL Module " + graph.getRelatedValue2(inputResource, Layer0.getInstance(graph).HasName, Bindings.STRING));\r
-                }\r
-            });\r
-        } catch (DatabaseException e) {\r
-            e.printStackTrace();\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void doSaveAs() {\r
-    }\r
-\r
-    protected String computeTitle(ReadGraph graph, Resource inputResource) throws DatabaseException {\r
-        Layer0 L0 = Layer0.getInstance(graph);\r
-        Resource parent = graph.getPossibleObject(inputResource, L0.PropertyOf);\r
-        if(parent == null)\r
-            return "No parent";\r
-        return graph.getPossibleRelatedValue(parent, L0.HasName) + " (Code)";\r
-    }\r
-    \r
-    @Override\r
-    public void init(IEditorSite site, final IEditorInput input)\r
-            throws PartInitException {\r
-        setSite(site);\r
-        setInput(input);\r
-        this.inputResource = ((IResourceEditorInput)input).getResource();\r
-        \r
-        Simantics.getSession().asyncRequest(\r
-                new UniqueRead<String>() {\r
-                    @Override\r
-                    public String perform(ReadGraph graph) throws DatabaseException {\r
-                        return computeTitle(graph, inputResource);\r
-                    }\r
-                },\r
-                new TitleUpdater(site.getShell().getDisplay(), partName -> {\r
-                    setPartName(partName);\r
-                    setTitleToolTip(partName);\r
-                }, () -> editor != null && editor.isDisposed()));\r
-    }\r
-\r
-    @Override\r
-    public boolean isDirty() {\r
-        return !editor.getContent().equals(originalText);\r
-    }\r
-\r
-    @Override\r
-    public boolean isSaveAsAllowed() {\r
-        return false;\r
-    }\r
-\r
+package org.simantics.modeling.ui.componentTypeEditor;
+
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.text.ITextListener;
+import org.eclipse.jface.text.TextEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.EditorPart;
+import org.simantics.Simantics;
+import org.simantics.databoard.Bindings;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.request.ResourceRead;
+import org.simantics.db.common.request.UniqueRead;
+import org.simantics.db.common.request.WriteRequest;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.util.Layer0Utils;
+import org.simantics.db.procedure.Listener;
+import org.simantics.layer0.Layer0;
+import org.simantics.scl.compiler.errors.CompilationError;
+import org.simantics.scl.ui.editor.SCLTextEditorNew;
+import org.simantics.scl.ui.editor.TextAndErrors;
+import org.simantics.structural2.scl.procedural.CompileProceduralComponentTypeRequest;
+import org.simantics.structural2.scl.procedural.ProceduralComponentTypeCompilationException;
+import org.simantics.ui.workbench.IResourceEditorInput;
+import org.simantics.ui.workbench.TitleUpdater;
+import org.simantics.utils.ui.ErrorLogger;
+import org.simantics.utils.ui.SWTUtils;
+
+public class SCLEditorBase extends EditorPart implements IExecutableExtension {
+    Resource inputResource;
+    SCLTextEditorNew editor;
+    String originalText;
+
+    protected TextAndErrors getTextAndErrors(ReadGraph graph, Resource resource) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        String text = graph.getValue(resource, Bindings.STRING);
+        Resource componentType = graph.getPossibleObject(inputResource, L0.PropertyOf);
+        CompilationError[] errors = CompilationError.EMPTY_ARRAY;
+        if(componentType != null) {
+            try { 
+                graph.syncRequest(new CompileProceduralComponentTypeRequest(componentType));
+            } catch(ProceduralComponentTypeCompilationException e) {
+                errors = e.errors;
+            }
+        }
+        return new TextAndErrors(text, errors);
+    }
+    
+    @Override
+    public void createPartControl(Composite parent) {
+        editor = new SCLTextEditorNew(parent, 0);
+        
+        Simantics.getSession().asyncRequest(new ResourceRead<TextAndErrors>(inputResource) {
+            @Override
+            public TextAndErrors perform(ReadGraph graph) throws DatabaseException {
+               return getTextAndErrors(graph, inputResource);
+            }
+        }, new Listener<TextAndErrors>() {
+            @Override
+            public void execute(final TextAndErrors textAndErrors) {
+                SWTUtils.asyncExec(editor, new Runnable() {
+                    @Override
+                    public void run() {
+                        
+                        if (editor.isDisposed())
+                            return;
+                        
+                        // FIXME Every graph change new overrides user's current modifications  
+                        
+                        originalText = textAndErrors.text;
+                        boolean textDiffers = !originalText.equals(editor.getContent());
+                        editor.setContent(textDiffers ? originalText : null, textAndErrors.errors);
+                        firePropertyChange(PROP_DIRTY);
+                        
+                        // This condition is only true for the first time when the editor is initialized
+                        // This fixes platform issue #5192 https://www.simantics.org/redmine/issues/5192
+                        if (textDiffers)
+                            editor.getUndoManager().reset();
+                    }
+                });
+            }
+
+            @Override
+            public void exception(Throwable t) {
+                ErrorLogger.defaultLogError(t);
+            }
+
+            @Override
+            public boolean isDisposed() {
+                return editor.isDisposed();
+            }
+
+        });
+
+        editor.viewer.addTextListener(new ITextListener() {
+            @Override
+            public void textChanged(TextEvent event) {
+                firePropertyChange(PROP_DIRTY);
+            }
+        });
+    }
+    
+    @Override
+    public void setFocus() {
+        editor.setFocus();
+    }
+
+    protected void save(WriteGraph graph, Resource resource, String text) throws DatabaseException {
+        graph.claimValue(resource, text);
+    }
+    
+    @Override
+    public void doSave(IProgressMonitor monitor) {
+        this.originalText = editor.getContent();
+        firePropertyChange(PROP_DIRTY);
+        try {
+            Simantics.getSession().syncRequest(new WriteRequest() {
+                @Override
+                public void perform(WriteGraph graph) throws DatabaseException {
+                    graph.markUndoPoint();
+                       save(graph, inputResource, originalText);
+                       Layer0Utils.addCommentMetadata(graph, "Saved SCL Module " + graph.getRelatedValue2(inputResource, Layer0.getInstance(graph).HasName, Bindings.STRING)); //$NON-NLS-1$
+                }
+            });
+        } catch (DatabaseException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void doSaveAs() {
+    }
+
+    protected String computeTitle(ReadGraph graph, Resource inputResource) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        Resource parent = graph.getPossibleObject(inputResource, L0.PropertyOf);
+        if(parent == null)
+            return "No parent"; //$NON-NLS-1$
+        return graph.getPossibleRelatedValue(parent, L0.HasName) + " (Code)"; //$NON-NLS-1$
+    }
+    
+    @Override
+    public void init(IEditorSite site, final IEditorInput input)
+            throws PartInitException {
+        setSite(site);
+        setInput(input);
+        this.inputResource = ((IResourceEditorInput)input).getResource();
+        
+        Simantics.getSession().asyncRequest(
+                new UniqueRead<String>() {
+                    @Override
+                    public String perform(ReadGraph graph) throws DatabaseException {
+                        return computeTitle(graph, inputResource);
+                    }
+                },
+                new TitleUpdater(site.getShell().getDisplay(), partName -> {
+                    setPartName(partName);
+                    setTitleToolTip(partName);
+                }, () -> editor != null && editor.isDisposed()));
+    }
+
+    @Override
+    public boolean isDirty() {
+        return !editor.getContent().equals(originalText);
+    }
+
+    @Override
+    public boolean isSaveAsAllowed() {
+        return false;
+    }
+
 }
\ No newline at end of file