Java tutorial
/** * Copyright 2013 In-Q-Tel/Lab41 * * Licensed 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.lab41.dendrite.rexster; import com.codahale.metrics.MetricRegistry; import com.tinkerpop.blueprints.Graph; import com.tinkerpop.rexster.RexsterApplicationGraph; import com.tinkerpop.rexster.protocol.EngineConfiguration; import com.tinkerpop.rexster.protocol.EngineController; import com.tinkerpop.rexster.server.RexsterApplication; import org.apache.commons.configuration.HierarchicalConfiguration; import org.lab41.dendrite.metagraph.DendriteGraph; import org.lab41.dendrite.services.MetaGraphService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class DendriteRexsterApplication implements RexsterApplication { Logger logger = LoggerFactory.getLogger(DendriteRexsterApplication.class); private MetricRegistry metricRegistry; private final long startTime = System.currentTimeMillis(); private MetaGraphService metaGraphService; @Autowired public DendriteRexsterApplication(MetaGraphService metaGraphService) { this.metaGraphService = metaGraphService; configureScriptEngine(); } @Override public Graph getGraph(String id) { RexsterApplicationGraph graph = getApplicationGraph(id); if (graph == null) { return null; } else { return graph.getGraph(); } } @Override public RexsterApplicationGraph getApplicationGraph(String id) { DendriteGraph graph = metaGraphService.getGraph(id); if (graph == null) { return null; } List<String> allowableNamespaces = new ArrayList<>(); allowableNamespaces.add("tp:gremlin"); List<HierarchicalConfiguration> extensionConfigurations = new ArrayList<>(); return new RexsterApplicationGraph(id, graph, allowableNamespaces, extensionConfigurations); } @Override public Set<String> getGraphNames() { return metaGraphService.getGraphNames(); } @Override public MetricRegistry getMetricRegistry() { if (metricRegistry == null) { metricRegistry = new MetricRegistry(); } return metricRegistry; } @Override public long getStartTime() { return this.startTime; } @Override public void stop() { metaGraphService.stop(); } private void configureScriptEngine() { // the EngineController needs to be configured statically before requests start serving so that it can // properly construct ScriptEngine objects with the correct reset policy. allow script engines to be // configured so that folks can drop in different gremlin flavors. HierarchicalConfiguration config = new HierarchicalConfiguration(); config.setProperty("name", "gremlin-groovy"); config.setProperty("reset-threshold", "-1"); List<String> imports = new ArrayList<>(); imports.add("com.tinkerpop.gremlin.*"); imports.add("com.tinkerpop.gremlin.java.*"); imports.add("com.tinkerpop.gremlin.pipes.filter.*"); imports.add("com.tinkerpop.gremlin.pipes.sideeffect.*"); imports.add("com.tinkerpop.gremlin.pipes.transform.*"); imports.add("com.tinkerpop.blueprints.*"); imports.add("com.tinkerpop.blueprints.impls.*"); imports.add("com.tinkerpop.blueprints.impls.tg.*"); imports.add("com.tinkerpop.blueprints.impls.neo4j.*"); imports.add("com.tinkerpop.blueprints.impls.neo4j.batch.*"); imports.add("com.tinkerpop.blueprints.impls.orient.*"); imports.add("com.tinkerpop.blueprints.impls.orient.batch.*"); imports.add("com.tinkerpop.blueprints.impls.dex.*"); imports.add("com.tinkerpop.blueprints.impls.rexster.*"); imports.add("com.tinkerpop.blueprints.impls.sail.*"); imports.add("com.tinkerpop.blueprints.impls.sail.impls.*"); imports.add("com.tinkerpop.blueprints.util.*"); imports.add("com.tinkerpop.blueprints.util.io.*"); imports.add("com.tinkerpop.blueprints.util.io.gml.*"); imports.add("com.tinkerpop.blueprints.util.io.graphml.*"); imports.add("com.tinkerpop.blueprints.util.io.graphson.*"); imports.add("com.tinkerpop.blueprints.util.wrappers.*"); imports.add("com.tinkerpop.blueprints.util.wrappers.batch.*"); imports.add("com.tinkerpop.blueprints.util.wrappers.batch.cache.*"); imports.add("com.tinkerpop.blueprints.util.wrappers.event.*"); imports.add("com.tinkerpop.blueprints.util.wrappers.event.listener.*"); imports.add("com.tinkerpop.blueprints.util.wrappers.id.*"); imports.add("com.tinkerpop.blueprints.util.wrappers.partition.*"); imports.add("com.tinkerpop.blueprints.util.wrappers.readonly.*"); imports.add("com.tinkerpop.blueprints.oupls.sail.*"); imports.add("com.tinkerpop.blueprints.oupls.sail.pg.*"); imports.add("com.tinkerpop.blueprints.oupls.jung.*"); imports.add("com.tinkerpop.pipes.*"); imports.add("com.tinkerpop.pipes.branch.*"); imports.add("com.tinkerpop.pipes.filter.*"); imports.add("com.tinkerpop.pipes.sideeffect.*"); imports.add("com.tinkerpop.pipes.transform.*"); imports.add("com.tinkerpop.pipes.util.*"); imports.add("com.tinkerpop.pipes.util.iterators.*"); imports.add("com.tinkerpop.pipes.util.structures.*"); imports.add("org.apache.commons.configuration.*"); imports.add("com.thinkaurelius.titan.core.*"); imports.add("com.thinkaurelius.titan.core.attribute.*"); imports.add("com.thinkaurelius.titan.core.util.*"); imports.add("com.thinkaurelius.titan.example.*"); imports.add("org.apache.commons.configuration.*"); imports.add("com.tinkerpop.gremlin.Tokens.T"); imports.add("com.tinkerpop.gremlin.groovy.*"); config.setProperty("imports", imports); List<String> staticImports = new ArrayList<>(); staticImports.add("com.tinkerpop.blueprints.Direction.*"); staticImports.add("com.tinkerpop.blueprints.TransactionalGraph$Conclusion.*"); staticImports.add("com.tinkerpop.blueprints.Compare.*"); staticImports.add("com.thinkaurelius.titan.core.attribute.Geo.*"); staticImports.add("com.thinkaurelius.titan.core.attribute.Text.*"); staticImports.add("com.thinkaurelius.titan.core.TypeMaker$UniquenessConsistency.*"); staticImports.add("com.tinkerpop.blueprints.Query$Compare.*"); config.setProperty("static-imports", staticImports); EngineConfiguration engineConfiguration = new EngineConfiguration(config); List<EngineConfiguration> engineConfigurations = new ArrayList<>(); engineConfigurations.add(engineConfiguration); EngineController.configure(engineConfigurations); } }