/* * Licensed to Luca Cavanna (the "Author") under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. Elastic Search 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.elasticsearch.shell; import java.io.Closeable; import org.elasticsearch.client.Requests; import org.elasticsearch.cluster.metadata.AliasAction; import org.elasticsearch.cluster.routing.allocation.command.AllocateAllocationCommand; import org.elasticsearch.cluster.routing.allocation.command.CancelAllocationCommand; import org.elasticsearch.cluster.routing.allocation.command.MoveAllocationCommand; import org.elasticsearch.index.query.FilterBuilders; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.facet.FacetBuilders; import org.elasticsearch.search.rescore.RescoreBuilder; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.suggest.SuggestBuilder; import org.elasticsearch.shell.command.HttpParameters; /** * Shell scope which wraps the real scope object that depends on the underlying engine * Implements {@link ResourceRegistry} too but only delegates to the underlying ResourceRegistry * * @author Luca Cavanna */ public abstract class ShellScope<Scope> implements ResourceRegistry { private final Scope scope; private final ResourceRegistry resourceRegistry; /** * Creates a new <code>ShellScope</code> given the actual scope object * @param scope the actual scope object that depends on the engine in use */ ShellScope(Scope scope, ResourceRegistry resourceRegistry) { this.scope = scope; this.resourceRegistry = resourceRegistry; registerJavaClass(Requests.class); registerJavaClass(SearchSourceBuilder.class); registerJavaClass(QueryBuilders.class); registerJavaClass(FilterBuilders.class); registerJavaClass(SortBuilders.class); registerJavaClass(FacetBuilders.class); registerJavaClass(RescoreBuilder.class); registerJavaClass(SuggestBuilder.class); registerJavaClass(AliasAction.class); registerJavaClass(HttpParameters.class); registerJavaClass(AllocateAllocationCommand.class); registerJavaClass(CancelAllocationCommand.class); registerJavaClass(MoveAllocationCommand.class); registerJavaClass(ShardId.class); } /** * Allows to retrieve the actual scope object * @return the actual scope object depending on the engine in use */ public Scope get() { return scope; } /** * Registers a java object to the scope, depending on the script engine * @param name name to use to register the object * @param javaObject the java object to register * @param <T> the type of the object to register */ public abstract <T> void registerJavaObject(String name, T javaObject); /** * Registers a java class to the scope, so that it is available * without the need to import it manually * @param clazz the class to register to the scope */ public abstract void registerJavaClass(Class<?> clazz); @Override public void registerResource(Closeable resource) { resourceRegistry.registerResource(resource); } @Override public void closeAllResources() { resourceRegistry.closeAllResources(); } }