From 809dbbbcd1093504a1b49bdb4649fc5f3c6a2bf5 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 21 Mar 2019 14:31:44 +0100 Subject: Clean up dependencies of the application configuration plugin --- .../META-INF/MANIFEST.MF | 7 +- .../ui/execute/ExecuteScriptHandler.java | 8 +- .../execute/RuntimeConsoleBasedScriptConsole.xtend | 172 ++++++++++++ .../ui/execute/ScriptConsoleFileHiperlink.xtend | 28 ++ .../META-INF/MANIFEST.MF | 7 - .../execution/GenerationTaskExecutor.xtend | 3 +- .../application/execution/ScriptConsole.xtend | 290 +++++++-------------- .../execution/ScriptConsoleFileHiperlink.xtend | 28 -- .../application/execution/ScriptExecutor.xtend | 12 +- .../execution/StandaloneScriptExecutor.xtend | 28 +- 10 files changed, 326 insertions(+), 257 deletions(-) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/RuntimeConsoleBasedScriptConsole.xtend create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ScriptConsoleFileHiperlink.xtend delete mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsoleFileHiperlink.xtend (limited to 'Application') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF b/Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF index 5bb18f44..38bb7dbd 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/META-INF/MANIFEST.MF @@ -12,7 +12,12 @@ Require-Bundle: hu.bme.mit.inf.dslreasoner.application, org.eclipse.xtext.ui.codetemplates.ui, org.eclipse.ui.editors;bundle-version="3.5.0", org.eclipse.ui.ide;bundle-version="3.5.0", - org.eclipse.ui, + org.eclipse.ui;bundle-version="3.108.1", + org.eclipse.ui.workbench.texteditor, + org.eclipse.ui.console;bundle-version="3.6.201", + org.eclipse.jface;bundle-version="3.12.2", + org.eclipse.core.filesystem, + org.eclipse.text, org.eclipse.compare, org.eclipse.xtext.builder, org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional, diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java index 43d22ab3..380410d0 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ExecuteScriptHandler.java @@ -8,21 +8,15 @@ import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.core.resources.IFile; import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.ResourceSet; -import org.eclipse.emf.ecore.resource.URIConverter; -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript; import hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor; public class ExecuteScriptHandler extends AbstractHandler implements IHandler { - ScriptExecutor scriptExecutor = new ScriptExecutor(); + ScriptExecutor scriptExecutor = new ScriptExecutor(RuntimeConsoleBasedScriptConsole.FACTORY); @Override public Object execute(ExecutionEvent event) throws ExecutionException { diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/RuntimeConsoleBasedScriptConsole.xtend b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/RuntimeConsoleBasedScriptConsole.xtend new file mode 100644 index 00000000..d344ffba --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/RuntimeConsoleBasedScriptConsole.xtend @@ -0,0 +1,172 @@ +package hu.bme.mit.inf.dslreasoner.application.ui.execute + +import hu.bme.mit.inf.dslreasoner.application.execution.ScriptConsole +import hu.bme.mit.inf.dslreasoner.application.execution.ScriptConsoleDecorator +import java.util.concurrent.CompletableFuture +import org.eclipse.emf.common.util.URI +import org.eclipse.jface.text.BadLocationException +import org.eclipse.jface.text.DocumentEvent +import org.eclipse.jface.text.IDocumentListener +import org.eclipse.swt.graphics.Color +import org.eclipse.ui.console.ConsolePlugin +import org.eclipse.ui.console.MessageConsole +import org.eclipse.ui.console.MessageConsoleStream + +class RuntimeConsoleBasedScriptConsole extends ScriptConsole { + /** + * Console is identified with the name of this class. + */ + static val consoleID = ScriptConsole.name + + val MessageConsole runtimeConsole + + new(boolean cleanFiles, URI messageConsoleURI, URI errorConsoleURI, URI statisticsConsoleURI) { + super(!hasConsolePlugin, cleanFiles, messageConsoleURI, errorConsoleURI, statisticsConsoleURI) + runtimeConsole = prepareRuntimeConsole + writeErrorMessagesDuringInitialisation() + } + + override writeMessage(CharSequence message, String separator, ScriptConsoleDecorator[] decorators) { + super.writeMessage(message, separator, decorators) + if (runtimeConsole !== null) { + writeToRuntimeConsole(message, separator, decorators) + } + } + + override writeMessage(String message) { + super.writeMessage(message) + if (runtimeConsole !== null) { + writeToRuntimeConsole(message) + } + } + + override writeError(CharSequence message, String separator, ScriptConsoleDecorator[] decorators) { + super.writeError(message, separator, decorators) + if (runtimeConsole !== null) { + writeToRuntimeConsole(message, separator, decorators) + } + } + + override writeError(String message) { + super.writeError(message) + if (runtimeConsole !== null) { + writeToRuntimeConsole(message) + } + } + + private def MessageConsole prepareRuntimeConsole() { + val plugin = ConsolePlugin.getDefault(); + if (plugin === null) { + return null + } else { + val conMan = plugin.getConsoleManager(); + val existingConsoles = conMan.getConsoles(); + val existingConsolesWithID = existingConsoles.filter[it.name.equals(consoleID)] + if (existingConsolesWithID.empty) { + val MessageConsole res = new MessageConsole(consoleID, null) + conMan.addConsoles(#[res]); + + return res + } else { + return existingConsolesWithID.head as MessageConsole + } + } + } + + private def writeToRuntimeConsole(CharSequence message) { + // 1. reveal the console view + ConsolePlugin.getDefault().getConsoleManager().showConsoleView(this.runtimeConsole); + val stream = this.runtimeConsole.newMessageStream + stream.println(message.toString) + stream.close + } + + private def writeToRuntimeConsole(CharSequence message, String separator, ScriptConsoleDecorator[] decorators) { + val messageString = message.toString + // 0. split the message + val separatedMessage = if (messageString.startsWith(separator)) { + #[""] + messageString.split(separator, -1) + } else { + messageString.split(separator, -1).toList + } + if (separatedMessage.size - 1 !== decorators.size) { + throw new IllegalArgumentException + } + + // 1. reveal the console view + ConsolePlugin.getDefault().getConsoleManager().showConsoleView(this.runtimeConsole); + val stream = this.runtimeConsole.newMessageStream + + // 2. print the segments of the view + for (i : 0 ..< decorators.size) { + stream.print(separatedMessage.get(i)) + writeDecoratedTextToRuntimeConsole(decorators.get(i), stream) + + } + // 2.1 write the last segment of + stream.println(separatedMessage.last) + + // stream.println(message.toString) + stream.close + } + + private def writeDecoratedTextToRuntimeConsole(ScriptConsoleDecorator message, MessageConsoleStream stream) { + val originalBackgroundColor = this.runtimeConsole.background + var Color newColor = null; + + val text = '''[«message.text»]''' + if (message.red >= 0 && message.green >= 0 && message.blue >= 0) { + newColor = new Color(originalBackgroundColor.device, message.red, message.green, message.blue) + this.runtimeConsole.setBackground(newColor) + } + stream.flush + val CompletableFuture finished = new CompletableFuture + val listener = new IDocumentListener() { + override documentAboutToBeChanged(DocumentEvent event) {} + + override documentChanged(DocumentEvent event) { + // println('''ftext="«event.fText»", message="«message.text»" endswith=«event.fText.endsWith(message.text)»''') + if (event.fText.endsWith(text)) { + val from = event.fDocument.length - text.length + 1 + val length = message.text.length + // println('''from: «from» length «length»''') + try { + runtimeConsole.addHyperlink( + new ScriptConsoleFileHiperlink(message.hyperlink), + from, + length + ) + // println("link added") + } catch (BadLocationException e) { + } finally { + runtimeConsole.document.removeDocumentListener(this) + finished.complete(true) + } + } + + } + } + runtimeConsole.document.addDocumentListener(listener) + stream.print(text) + stream.flush + finished.get + // stream.console.new + if (message.red >= 0 && message.green >= 0 && message.blue >= 0) { + newColor.dispose + this.runtimeConsole.setBackground(originalBackgroundColor) + } + } + + private static def hasConsolePlugin() { + ConsolePlugin.getDefault() !== null + } + + public static val FACTORY = new ScriptConsole.Factory { + + override createScriptConsole(boolean cleanFiles, URI messageConsoleURI, URI errorConsoleURI, + URI statisticsConsoleURI) { + new RuntimeConsoleBasedScriptConsole(cleanFiles, messageConsoleURI, errorConsoleURI, statisticsConsoleURI) + } + + } +} diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ScriptConsoleFileHiperlink.xtend b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ScriptConsoleFileHiperlink.xtend new file mode 100644 index 00000000..16d78a31 --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/execute/ScriptConsoleFileHiperlink.xtend @@ -0,0 +1,28 @@ +package hu.bme.mit.inf.dslreasoner.application.ui.execute + +import java.io.File +import java.net.URI +import org.eclipse.core.filesystem.EFS +import org.eclipse.ui.PlatformUI +import org.eclipse.ui.console.IHyperlink +import org.eclipse.ui.ide.IDE + +class ScriptConsoleFileHiperlink implements IHyperlink { + + val URI path + + new(File file) { + this.path = file.toURI() + } + + override linkActivated() { + // println("open path: "+path.toString) + val page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + val fileStore = EFS.getStore(path) + IDE.openEditorOnFileStore(page, fileStore) + } + + override linkEntered() {} + + override linkExited() {} +} diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/META-INF/MANIFEST.MF b/Application/hu.bme.mit.inf.dslreasoner.application/META-INF/MANIFEST.MF index a7990cca..27caa768 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/META-INF/MANIFEST.MF +++ b/Application/hu.bme.mit.inf.dslreasoner.application/META-INF/MANIFEST.MF @@ -29,15 +29,8 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.viatra.query.tooling.core;bundle-version="2.0.0", hu.bme.mit.inf.dslreasoner.visualisation;bundle-version="1.0.0", org.eclipse.core.runtime;bundle-version="3.12.0", - org.eclipse.ui.console;bundle-version="3.6.201", - org.eclipse.jface;bundle-version="3.12.2", - org.eclipse.ui;bundle-version="3.108.1", org.eclipse.viatra.query.runtime.rete;bundle-version="2.0.0", org.eclipse.viatra.query.runtime.localsearch;bundle-version="2.0.0", - org.eclipse.core.filesystem, - org.eclipse.ui.workbench.texteditor, - org.eclipse.ui.ide, - org.eclipse.text, org.eclipse.collections;bundle-version="9.2.0", hu.bme.mit.inf.dslreasoner.faulttree.components Bundle-RequiredExecutionEnvironment: JavaSE-1.8 diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend index c9d38c7d..3e879539 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend @@ -41,6 +41,7 @@ class GenerationTaskExecutor { def executeGenerationTask( GenerationTask task, ScriptExecutor scriptExecutor, + ScriptConsole.Factory scriptConsoleFactory, IProgressMonitor monitor) { monitor.subTask('''Collecting all resources''') @@ -62,7 +63,7 @@ class GenerationTaskExecutor { val memoryLimit = scriptExecutor.getMemoryLimit(configSpecification) // 2. create console - val console = new ScriptConsole(true,false, + val console = scriptConsoleFactory.createScriptConsole(false, if(messageFile!==null) URI.createURI(messageFile.path) else null, if(debugFolder!==null) URI.createURI('''«debugFolder.path»/errors.txt''') else null, if(statisticsFile!==null) URI.createURI(statisticsFile.path) else null diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsole.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsole.xtend index 91d3d286..0f89ba1e 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsole.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsole.xtend @@ -9,128 +9,108 @@ import java.util.LinkedHashSet import java.util.LinkedList import java.util.List import java.util.Map -import java.util.concurrent.CompletableFuture -import javax.swing.text.BadLocationException import org.eclipse.emf.common.util.URI -import org.eclipse.jface.text.DocumentEvent -import org.eclipse.jface.text.IDocumentListener -import org.eclipse.swt.graphics.Color -import org.eclipse.ui.console.ConsolePlugin -import org.eclipse.ui.console.MessageConsole -import org.eclipse.ui.console.MessageConsoleStream import org.eclipse.xtend.lib.annotations.Data -//import org.eclipse.ui.console.MessageConsole - -class ScriptConsole { - /** - * Console is identified with the name of this class. - */ - val final consoleID = ScriptConsole.name +abstract class ScriptConsole { val boolean printToConsole - val MessageConsole runtimeConsole; val ReasonerWorkspace messageWorkspace; val String messageFileName; val ReasonerWorkspace errorWorkspace; val String errorFileName; val ReasonerWorkspace statisticsWorkspace; val String statisticsFileName; - + val List errorMessagesDuringInitialisation = new LinkedList; + val statisticsHeaderBuffer = new LinkedHashSet - val statisticsDataBuffer = new LinkedList> - + val statisticsDataBuffer = new LinkedList> + static val delimier = ';' static val empty = "" - - public new( - boolean printToRuntimeConsole, - boolean cleanFiles, - URI messageConsoleURI, - URI errorConsoleURI, - URI statisticsConsoleURI) - { - val List errorMessagesDuringInitialisation = new LinkedList - - this.messageWorkspace = prepareWorkspace(messageConsoleURI,errorMessagesDuringInitialisation) + + new(boolean printToConsole, boolean cleanFiles, URI messageConsoleURI, URI errorConsoleURI, + URI statisticsConsoleURI) { + this.messageWorkspace = prepareWorkspace(messageConsoleURI, errorMessagesDuringInitialisation) this.messageFileName = prepareFileName(messageConsoleURI) - this.errorWorkspace = prepareWorkspace(errorConsoleURI,errorMessagesDuringInitialisation) + this.errorWorkspace = prepareWorkspace(errorConsoleURI, errorMessagesDuringInitialisation) this.errorFileName = prepareFileName(errorConsoleURI) - this.statisticsWorkspace = prepareWorkspace(statisticsConsoleURI,errorMessagesDuringInitialisation) + this.statisticsWorkspace = prepareWorkspace(statisticsConsoleURI, errorMessagesDuringInitialisation) this.statisticsFileName = prepareFileName(statisticsConsoleURI) - - this.printToConsole = (ConsolePlugin.getDefault() === null) - this.runtimeConsole = if(printToRuntimeConsole) { prepareRuntimeConsole } else { null } - - errorMessagesDuringInitialisation.forEach[ + + this.printToConsole = printToConsole + } + + /** + * Writes any error messages that occurred during console initialization. + * + * Should be called by implementations at the end of their constructors. + */ + protected final def writeErrorMessagesDuringInitialisation() { + errorMessagesDuringInitialisation.forEach [ this.writeError('''Error during console initialisation: "«it»"''') ] + errorMessagesDuringInitialisation.clear } - - public def writeMessage(CharSequence message, String separator, ScriptConsoleDecorator[] decorators) { + + def void writeMessage(CharSequence message, String separator, ScriptConsoleDecorator[] decorators) { val resolvedText = this.resolveToText(message, separator, decorators) - if(messageWorkspace!==null) { - messageWorkspace.writeText(messageFileName,resolvedText); + if (messageWorkspace !== null) { + messageWorkspace.writeText(messageFileName, resolvedText); } - if(printToConsole) { + if (printToConsole) { println(resolvedText) } - if(runtimeConsole!==null) { - writeToRuntimeConsole(message, separator, decorators) - } } - public def writeMessage(String message) { - if(messageWorkspace!==null) { - messageWorkspace.writeText(messageFileName,message); + + def void writeMessage(String message) { + if (messageWorkspace !== null) { + messageWorkspace.writeText(messageFileName, message); } - if(printToConsole) { + if (printToConsole) { println(message) } - if(runtimeConsole!==null) { - writeToRuntimeConsole(message) - } } - public def writeError(CharSequence message, String separator, ScriptConsoleDecorator[] decorators) { + + def void writeError(CharSequence message, String separator, ScriptConsoleDecorator[] decorators) { val resolvedText = this.resolveToText(message, separator, decorators) - if(errorWorkspace!==null) { - errorWorkspace.writeText(errorFileName,resolvedText); + if (errorWorkspace !== null) { + errorWorkspace.writeText(errorFileName, resolvedText); } println(message) - if(runtimeConsole!==null) { - writeToRuntimeConsole(message, separator, decorators) - } } - public def writeError(String message) { - if(errorWorkspace!==null) { - errorWorkspace.writeText(errorFileName,message); + + def void writeError(String message) { + if (errorWorkspace !== null) { + errorWorkspace.writeText(errorFileName, message); } println(message) - if(runtimeConsole!==null) { - writeToRuntimeConsole(message) - } } - public def writeStatistics(LinkedHashMap statistics) { - if(statisticsWorkspace!==null) { + + def writeStatistics(LinkedHashMap statistics) { + if (statisticsWorkspace !== null) { val message = ''' «FOR key : statistics.keySet SEPARATOR delimier»«key»«ENDFOR» «FOR value : statistics.values SEPARATOR delimier»«value»«ENDFOR»''' - statisticsWorkspace.writeText(statisticsFileName,message); + statisticsWorkspace.writeText(statisticsFileName, message); } } - public def addStatistics(LinkedHashMap statistics) { - for(key : statistics.keySet) { + + def addStatistics(LinkedHashMap statistics) { + for (key : statistics.keySet) { this.statisticsHeaderBuffer.add(key); } this.statisticsDataBuffer.add(statistics) } - public def flushStatistics() { - if(statisticsWorkspace!==null) { + + def flushStatistics() { + if (statisticsWorkspace !== null) { val message = ''' - «FOR key : statisticsHeaderBuffer SEPARATOR delimier»«key»«ENDFOR» - «FOR line : statisticsDataBuffer» - «FOR key : statisticsHeaderBuffer SEPARATOR delimier»«IF line.containsKey(key)»«line.get(key)»«ELSE»«empty»«ENDIF»«ENDFOR» - «ENDFOR» + «FOR key : statisticsHeaderBuffer SEPARATOR delimier»«key»«ENDFOR» + «FOR line : statisticsDataBuffer» + «FOR key : statisticsHeaderBuffer SEPARATOR delimier»«IF line.containsKey(key)»«line.get(key)»«ELSE»«empty»«ENDIF»«ENDFOR» + «ENDFOR» ''' - statisticsWorkspace.writeText(statisticsFileName,message); + statisticsWorkspace.writeText(statisticsFileName, message); statisticsHeaderBuffer.clear statisticsDataBuffer.clear } @@ -140,143 +120,66 @@ class ScriptConsole { if (uri === null) { return null } else { - try{ + try { val folderURI = uri.trimSegments(1) - if(folderURI.isFile) { - return new FileSystemWorkspace(folderURI.toString,"")=>[init] - } else if(folderURI.isPlatformResource) { - return new ProjectWorkspace(folderURI.toString,"")=>[init] + if (folderURI.isFile) { + return new FileSystemWorkspace(folderURI.toString, "") => [init] + } else if (folderURI.isPlatformResource) { + return new ProjectWorkspace(folderURI.toString, "") => [init] } else { throw new UnsupportedOperationException('''Unsupported file usi: "«uri»"!''') } - } catch(Exception e) { + } catch (Exception e) { errors += e.message return null } } } + private def prepareFileName(URI uri) { - if(uri!==null) { + if (uri !== null) { return uri.lastSegment } else { null } } - - private def MessageConsole prepareRuntimeConsole() { - val plugin = ConsolePlugin.getDefault(); - if(plugin === null) { - return null - } else { - val conMan = plugin.getConsoleManager(); - val existingConsoles = conMan.getConsoles(); - val existingConsolesWithID = existingConsoles.filter[it.name.equals(consoleID)] - if(existingConsolesWithID.empty) { - val MessageConsole res = new MessageConsole(consoleID,null) - conMan.addConsoles(#[res]); - - return res - } else { - return existingConsolesWithID.head as MessageConsole - } - } - } + private def resolveToText(CharSequence message, String separator, ScriptConsoleDecorator[] decorators) { val messageString = message.toString // 0. split the message - val separatedMessage = if(messageString.startsWith(separator,-1)) { - #[""]+messageString.split(separator,-1) - } else { - messageString.split(separator,-1).toList - } - if(separatedMessage.size-1 !== decorators.size) { + val separatedMessage = if (messageString.startsWith(separator, -1)) { + #[""] + messageString.split(separator, -1) + } else { + messageString.split(separator, -1).toList + } + if (separatedMessage.size - 1 !== decorators.size) { throw new IllegalArgumentException } - + return '''«FOR i : 0..= 0 && message.green >= 0 && message.blue >= 0) { - newColor = new Color(originalBackgroundColor.device,message.red,message.green,message.blue) - this.runtimeConsole.setBackground(newColor) - } - stream.flush - val CompletableFuture finished = new CompletableFuture - val listener = new IDocumentListener() { - override documentAboutToBeChanged(DocumentEvent event) { } - override documentChanged(DocumentEvent event) { - //println('''ftext="«event.fText»", message="«message.text»" endswith=«event.fText.endsWith(message.text)»''') - if(event.fText.endsWith(text)) { - val from = event.fDocument.length-text.length+1 - val length = message.text.length - //println('''from: «from» length «length»''') - try{ - runtimeConsole.addHyperlink( - new ScriptConsoleFileHiperlink(message.hyperlink), - from, - length - ) - //println("link added") - } catch(BadLocationException e) { - - } finally { - runtimeConsole.document.removeDocumentListener(this) - finished.complete(true) - } - } - - } - } - runtimeConsole.document.addDocumentListener(listener) - stream.print(text) - stream.flush - finished.get - //stream.console.new - if(message.red >= 0 && message.green >= 0 && message.blue >= 0) { - newColor.dispose - this.runtimeConsole.setBackground(originalBackgroundColor) + + public static val FACTORY = new ScriptConsole.Factory { + override createScriptConsole(boolean cleanFiles, URI messageConsoleURI, URI errorConsoleURI, + URI statisticsConsoleURI) { + new StandardOutputBasedScriptConsole(cleanFiles, messageConsoleURI, errorConsoleURI, statisticsConsoleURI) } } } + @Data class ScriptConsoleDecorator { String text @@ -284,33 +187,36 @@ class ScriptConsoleDecorator { int Red int Green int Blue - - public new(String text) { + + new(String text) { this.text = text this.hyperlink = null this.Red = -1 this.Green = -1 this.Blue = -1 } - public new(String text, File hyperlink) { + + new(String text, File hyperlink) { this.text = text this.hyperlink = hyperlink this.Red = -1 this.Green = -1 this.Blue = -1 } - public new(String text, int red, int green, int blue) { + + new(String text, int red, int green, int blue) { this.text = text this.hyperlink = null this.Red = red this.Green = green this.Blue = blue } - public new(String text, File hyperlink, int red, int green, int blue) { + + new(String text, File hyperlink, int red, int green, int blue) { this.text = text this.hyperlink = hyperlink this.Red = red this.Green = green this.Blue = blue } -} \ No newline at end of file +} diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsoleFileHiperlink.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsoleFileHiperlink.xtend deleted file mode 100644 index 25e49c80..00000000 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsoleFileHiperlink.xtend +++ /dev/null @@ -1,28 +0,0 @@ -package hu.bme.mit.inf.dslreasoner.application.execution - -import org.eclipse.ui.console.IHyperlink -import org.eclipse.ui.ide.IDE -import org.eclipse.ui.PlatformUI -import org.eclipse.core.filesystem.EFS -import java.io.File -import java.net.URI - -class ScriptConsoleFileHiperlink implements IHyperlink { - - private val URI path; - - new(File file) { - this.path = file.toURI() - } - - override linkActivated() { - //println("open path: "+path.toString) - val page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - val fileStore = EFS.getStore(path) - IDE.openEditorOnFileStore(page,fileStore) - } - - override linkEntered() { } - - override linkExited() { } -} \ No newline at end of file diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend index c9ec68bb..0512a5ee 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend @@ -4,6 +4,7 @@ import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigRef import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigSpecification import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.CustomEntry +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.DocumentLevelSpecification import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.DocumentationEntry import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.FileReference @@ -24,15 +25,18 @@ import hu.bme.mit.inf.dslreasoner.application.execution.util.ApplicationConfigur import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel import java.util.LinkedHashMap import java.util.Optional -import org.eclipse.emf.common.util.URI -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.DocumentLevelSpecification -import org.eclipse.core.runtime.jobs.Job import org.eclipse.core.runtime.IProgressMonitor import org.eclipse.core.runtime.Status +import org.eclipse.core.runtime.jobs.Job +import org.eclipse.emf.common.util.URI +import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor +@FinalFieldsConstructor class ScriptExecutor { val parser = new ApplicationConfigurationParser + val ScriptConsole.Factory scriptConsoleFactory + /** * Executes a script */ @@ -92,7 +96,7 @@ class ScriptExecutor { def public dispatch execute(GenerationTask task, IProgressMonitor monitor) { val generationTaskExecutor = new GenerationTaskExecutor - generationTaskExecutor.executeGenerationTask(task,this,monitor) + generationTaskExecutor.executeGenerationTask(task,this,scriptConsoleFactory,monitor) } def public dispatch execute(Task task, IProgressMonitor monitor) { diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend index c612f0ea..4ed57903 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend @@ -1,27 +1,17 @@ package hu.bme.mit.inf.dslreasoner.application.execution +import com.google.inject.Guice +import com.google.inject.Injector import hu.bme.mit.inf.dslreasoner.application.ApplicationConfigurationStandaloneSetup -import org.eclipse.emf.common.util.URI -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript import org.eclipse.core.runtime.NullProgressMonitor -import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup -import org.eclipse.emf.ecore.util.EcoreUtil -import java.io.FileNotFoundException +import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.resource.Resource -import java.io.IOException +import org.eclipse.emf.ecore.util.EcoreUtil import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl -import org.eclipse.viatra.query.runtime.matchers.backend.IQueryBackendFactoryProvider -import org.eclipse.viatra.query.runtime.rete.matcher.ReteBackendFactoryProvider -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngineOptions -import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint -import org.eclipse.viatra.query.runtime.rete.util.ReteHintOptions +import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine -import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneCompilerSetup -import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetupGenerated import org.eclipse.xtext.resource.XtextResourceSet -import com.google.inject.Injector -import com.google.inject.Guice class StandaloneScriptExecutor { def static void main(String[] args) { @@ -94,8 +84,12 @@ class StandaloneScriptExecutor { } } - def static executeScript(String path){ - val executor = new ScriptExecutor + def static executeScript(String path) { + executeScript(path, StandardOutputBasedScriptConsole.FACTORY) + } + + def static executeScript(String path, ScriptConsole.Factory scriptConsoleFactory){ + val executor = new ScriptExecutor(scriptConsoleFactory) try{ val content = loadScript(path) executor.executeScript(content,new NullProgressMonitor) -- cgit v1.2.3-54-g00ecf