Java tutorial
/* * Copyright (c) 2014. * * BaasBox - info@baasbox.com * * 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 com.baasbox.commands; import com.baasbox.commands.exceptions.CommandException; import com.baasbox.commands.exceptions.CommandExecutionException; import com.baasbox.commands.exceptions.CommandParsingException; import com.baasbox.dao.exception.CollectionAlreadyExistsException; import com.baasbox.dao.exception.InvalidCollectionException; import com.baasbox.dao.exception.SqlInjectionException; import com.baasbox.db.DbHelper; import com.baasbox.service.scripting.base.JsonCallback; import com.baasbox.service.storage.CollectionService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.BooleanNode; import com.google.common.collect.ImmutableMap; import java.util.Map; import org.apache.commons.lang3.exception.ExceptionUtils; /** * Created by Andrea Tortorella on 04/07/14. */ class CollectionsResource extends Resource { public static final Resource INSTANCE = new CollectionsResource(); @Override public String name() { return "collections"; } @Override public Map<String, ScriptCommand> commands() { return COMMANDS; } private static Map<String, ScriptCommand> COMMANDS = ImmutableMap.<String, ScriptCommand>builder() .put("post", new ScriptCommand() { @Override public JsonNode execute(JsonNode command, JsonCallback callback) throws CommandException { return createCollection(command); } }).put("exists", new ScriptCommand() { @Override public JsonNode execute(JsonNode command, JsonCallback callback) throws CommandException { return existsCollection(command); } }).put("drop", new ScriptCommand() { @Override public JsonNode execute(JsonNode command, JsonCallback callback) throws CommandException { return dropCollection(command); } }).build(); private static JsonNode dropCollection(JsonNode command) throws CommandException { checkPreconditions(command, true); String coll = extractCollectionName(command); try { CollectionService.drop(coll); return BooleanNode.getTrue(); } catch (InvalidCollectionException e) { return BooleanNode.getFalse(); } catch (Exception e) { throw new CommandExecutionException(command, "Error dropping collection: " + ExceptionUtils.getMessage(e)); } } private static void checkPreconditions(JsonNode command, boolean nonTransactional) throws CommandExecutionException { if (!DbHelper.isConnectedAsAdmin(false)) { throw new CommandExecutionException(command, "non authorized"); } if (nonTransactional && DbHelper.isInTransaction()) { throw new CommandExecutionException(command, "cannot alter collections during transaction"); } } private static JsonNode existsCollection(JsonNode command) throws CommandException { // checkPreconditions(command,false); String coll = extractCollectionName(command); try { boolean res = CollectionService.exists(coll); return res ? BooleanNode.getTrue() : BooleanNode.getFalse(); } catch (SqlInjectionException e) { throw new CommandExecutionException(command, ExceptionUtils.getMessage(e)); } catch (InvalidCollectionException e) { throw new CommandExecutionException(command, "Invalid collection '" + coll + "':" + ExceptionUtils.getMessage(e)); } } private static JsonNode createCollection(JsonNode command) throws CommandException { checkPreconditions(command, true); String coll = extractCollectionName(command); try { CollectionService.create(coll); return BooleanNode.getTrue(); } catch (CollectionAlreadyExistsException e) { return BooleanNode.getFalse(); } catch (InvalidCollectionException e) { throw new CommandExecutionException(command, "Invalid collection name: " + ExceptionUtils.getMessage(e)); } catch (Throwable e) { throw new CommandExecutionException(command, "Error creating collection: " + ExceptionUtils.getMessage(e)); } } private static String extractCollectionName(JsonNode command) throws CommandParsingException { JsonNode node = command.get(ScriptCommand.PARAMS); if (!node.isTextual()) { throw new CommandParsingException(command, "expeceted params to be the name of a collection"); } return node.asText(); } }