blob: 4efeb9b6ce81bf6e8cc10fcf5e864a15476ab084 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tinkerpop.gremlin.console
import org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor
import java.util.concurrent.atomic.AtomicBoolean
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
class Mediator {
public final Map<String, PluggedIn> availablePlugins = [:]
public final List<RemoteAcceptor> remotes = []
public int position
public boolean localEvaluation = true
/**
* Determines when the Console is evaluating/iterating input/result.
*/
public AtomicBoolean evaluating = new AtomicBoolean(false)
private final Console console
private static String LINE_SEP = System.getProperty("line.separator")
public static final String IMPORT_SPACE = "import "
public static final String IMPORT_STATIC_SPACE = "import static "
public static final String IMPORT_WILDCARD = ".*"
public Mediator(final Console console) {
this.console = console
}
public RemoteAcceptor currentRemote() { return remotes.get(position) }
def addRemote(final RemoteAcceptor remote) {
remotes.add(remote)
position = remotes.size() - 1
return remote
}
def removeCurrent() {
final RemoteAcceptor toRemove = remotes.remove(position)
position = 0
return toRemove
}
def RemoteAcceptor nextRemote() {
position++
if (position >= remotes.size()) position = 0
return currentRemote()
}
def RemoteAcceptor previousRemote() {
position--
if (position < 0) position = remotes.size() - 1
return currentRemote()
}
def showShellEvaluationOutput(final boolean show) {
console.showShellEvaluationOutput(show)
}
def writePluginState() {
def file = new File(ConsoleFs.PLUGIN_CONFIG_FILE)
def canWrite = file.canWrite()
if (canWrite) {
// ensure that the directories exist to hold the file.
file.mkdirs()
if (file.exists())
file.delete()
new File(ConsoleFs.PLUGIN_CONFIG_FILE).withWriter { out ->
activePlugins().each { k, v -> out << (k + LINE_SEP) }
}
}
return canWrite
}
def activePlugins() {
availablePlugins.findAll { it.value.activated }
}
static def readPluginState() {
def file = new File(ConsoleFs.PLUGIN_CONFIG_FILE)
return file.exists() ? file.readLines() : []
}
def void close() {
remotes.each { remote ->
try {
remote.close()
} catch (Exception ignored) {
}
}
}
}