Java tutorial
/* * 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.usergrid.tools; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; import org.codehaus.jackson.JsonFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.usergrid.persistence.Query; import org.apache.usergrid.persistence.exceptions.QueryParseException; import org.apache.usergrid.services.ServiceAction; import org.apache.usergrid.services.ServiceManager; import org.apache.usergrid.services.ServiceParameter; import org.apache.usergrid.services.ServicePayload; import org.apache.usergrid.services.ServiceRequest; import org.apache.usergrid.services.ServiceResults; import org.apache.usergrid.utils.HttpUtils; import org.apache.usergrid.utils.JsonUtils; import org.apache.usergrid.utils.UUIDUtils; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import static org.apache.usergrid.persistence.cassandra.CassandraService.DEFAULT_APPLICATION_ID; public class Cli extends ToolBase { public static final int MAX_ENTITY_FETCH = 100; private static final Logger logger = LoggerFactory.getLogger(Cli.class); JsonFactory jsonFactory = new JsonFactory(); @Override @SuppressWarnings("static-access") public Options createOptions() { Option hostOption = OptionBuilder.withArgName("host").hasArg().withDescription("Cassandra host") .create("host"); Option remoteOption = OptionBuilder.withDescription("Use remote Cassandra instance").create("remote"); Options options = new Options(); options.addOption(hostOption); options.addOption(remoteOption); return options; } @Override public void runTool(CommandLine line) throws Exception { startSpring(); handleInput(); } public void handleInput() throws QueryParseException { BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); UUID applicationId = DEFAULT_APPLICATION_ID; while (true) { System.out.println(); System.out.print(">"); String s = null; try { s = d.readLine(); } catch (IOException e) { } if (s == null) { System.exit(0); } s = s.trim().toLowerCase(); if (s.startsWith("use ")) { s = s.substring(4); applicationId = UUIDUtils.tryExtractUUID(s); if (applicationId == null) { try { applicationId = emf.lookupApplication(s.trim()); } catch (Exception e) { } } if (applicationId == null) { applicationId = DEFAULT_APPLICATION_ID; } System.out.println("Using application " + applicationId); continue; } ServiceAction action = ServiceAction.GET; if (s.startsWith("get ")) { s = s.substring("get ".length()).trim(); } else if (s.startsWith("post ")) { s = s.substring("post ".length()).trim(); action = ServiceAction.POST; } else if (s.startsWith("put ")) { s = s.substring("put".length()).trim(); action = ServiceAction.PUT; } else if (s.startsWith("delete ")) { s = s.substring("delete ".length()).trim(); action = ServiceAction.DELETE; } else if (s.startsWith("quit")) { return; } List<ServiceParameter> parameters = new ArrayList<ServiceParameter>(); int i = 0; boolean next_is_query = false; boolean next_is_payload = false; boolean next_is_json = false; ServicePayload payload = null; while (i < s.length()) { boolean is_query = next_is_query; if (next_is_payload) { String str = s.substring(i); payload = ServicePayload.stringPayload(str); break; } else if (next_is_json) { next_is_json = false; int start = i - 1; int bracket_count = 1; while (i < s.length()) { char c = s.charAt(i); if (c == '{') { bracket_count++; } else if (c == '}') { bracket_count--; } if (bracket_count == 0) { i++; String json = s.substring(start, i); Query query = Query.fromJsonString(json); ServiceParameter.addParameter(parameters, query); if ((i < s.length()) && (s.charAt(i) == '/')) { i++; } break; } i++; } continue; } next_is_query = false; next_is_payload = false; next_is_json = false; int slash = s.indexOf('/', i); int semicolon = s.indexOf(';', i); int question = s.indexOf('?', i); int space = s.indexOf(' ', i); int bracket = s.indexOf('{', i); int j = s.length(); if ((slash >= 0) && (slash < j)) { j = slash; } if ((space >= 0) && (space < j)) { j = space; next_is_payload = true; } if ((semicolon >= 0) && (semicolon < j)) { next_is_query = true; next_is_payload = false; j = semicolon; } if ((question >= 0) && (question < j)) { next_is_query = true; next_is_payload = false; j = question; } if ((bracket >= 0) && (bracket < j)) { next_is_query = false; next_is_payload = false; next_is_json = true; j = bracket; } String segment = s.substring(i, j); if (segment.length() > 0) { if (is_query) { Map<String, List<String>> params = HttpUtils.parseQueryString(segment); Query query = Query.fromQueryParams(params); ServiceParameter.addParameter(parameters, query); } else { UUID uuid = UUIDUtils.tryGetUUID(segment); if (uuid != null) { ServiceParameter.addParameter(parameters, uuid); } else { ServiceParameter.addParameter(parameters, segment); } } } i = j + 1; } if (parameters.size() == 0) { continue; } System.out.println(action + " " + parameters + " " + payload); ServiceManager services = smf.getServiceManager(applicationId); ServiceRequest r = null; try { r = services.newRequest(action, parameters, payload); } catch (Exception e) { logger.error("Error", e); } ServiceResults results = null; try { results = r.execute(); } catch (Exception e) { logger.error("Error", e); } if (results != null) { if (results.hasData()) { System.out.println(JsonUtils.mapToFormattedJsonString(results.getData())); } if (results.getServiceMetadata() != null) { System.out.println(JsonUtils.mapToFormattedJsonString(results.getServiceMetadata())); } System.out.println(JsonUtils.mapToFormattedJsonString(results.getEntities())); } } } }