Java tutorial
/** * Copyright (C) 2011-2013 Michael Vogt <michu@neophob.com> * * This file is part of PixelController. * * PixelController is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PixelController is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PixelController. If not, see <http://www.gnu.org/licenses/>. */ package com.neophob.sematrix.cli; import jargs.gnu.CmdLineParser; import jargs.gnu.CmdLineParser.IllegalOptionValueException; import jargs.gnu.CmdLineParser.UnknownOptionException; import java.security.InvalidParameterException; import java.text.ParseException; import org.apache.commons.lang3.ArrayUtils; import com.neophob.sematrix.core.properties.CommandGroup; import com.neophob.sematrix.core.properties.ValidCommands; import com.neophob.sematrix.osc.client.impl.OscClientFactory; /** * PixelController OSC Client * * @author michu * */ public class PixConClient { private static final float VERSION = 0.6f; /** The Constant DEFAULT_PORT. */ private static final int DEFAULT_PORT = 9876; private static final int DEFAULT_JMX_PORT = 1337; /** The Constant DEFAULT_HOST. */ private static final String DEFAULT_HOST = "127.0.0.1"; private static final String PARAM_COMMAND = "command"; private static final String PARAM_PORT = "port"; private static final String PARAM_HOST = "hostname"; protected PixConClient() { //Util class } /** * * @param s * @param length * @return */ private static String pretifyString(String s, int length) { StringBuffer sb = new StringBuffer(); sb.append(s); while (sb.length() < length) { sb.append(' '); } return sb.toString(); } /** * Usage. * * @param options the options */ private static void usage() { System.out.println("Usage: Client [-h hostname] [-p port] -c ValidCommand"); System.out.println("Valid commands:"); for (CommandGroup cg : CommandGroup.values()) { for (ValidCommands vc : ValidCommands.getCommandsByGroup(cg)) { System.out.println("\t" + pretifyString(vc.toString(), 28) + pretifyString("# of parameters: " + vc.getNrOfParams(), 23) + vc.getDesc()); } System.out.println(); } } /** * Parses the argument. * * @param args the args * @return the parsed argument * @throws InvalidParameterException */ protected static ParsedArgument parseArgument(String[] args) throws InvalidParameterException { if (args.length < 2) { System.out.println("No arguments specified!\n"); throw new InvalidParameterException("No arguments specified!"); } CmdLineParser parser = new CmdLineParser(); CmdLineParser.Option host = parser.addStringOption('h', PARAM_HOST); CmdLineParser.Option port = parser.addIntegerOption('p', PARAM_PORT); CmdLineParser.Option command = parser.addStringOption('c', PARAM_COMMAND); String pCmd = "undefined"; try { parser.parse(args); String pHost = (String) parser.getOptionValue(host, DEFAULT_HOST); int pPort = (Integer) parser.getOptionValue(port, DEFAULT_PORT); pCmd = (String) parser.getOptionValue(command); if (pCmd == null) { System.out.println("Unknown Command: " + ArrayUtils.toString(args)); System.out.println("Exit now"); throw new IllegalArgumentException("no ValidCommand specified!"); } ValidCommands parsedCommand = ValidCommands.valueOf(pCmd.toUpperCase()); String[] otherArgs = parser.getRemainingArgs(); if (parsedCommand.getNrOfParams() < otherArgs.length) { String err = "Invalid parameter count, expected: " + parsedCommand.getNrOfParams() + ", provided: " + otherArgs.length; System.out.println(err); throw new InvalidParameterException(err); } String param = ""; for (String s : otherArgs) { param += s + " "; } return new ParsedArgument(pHost, pPort, parsedCommand, param.trim()); } catch (UnknownOptionException e) { System.out.println("Invalid option defined: " + e.getMessage()); System.out.println(); } catch (IllegalOptionValueException e) { System.out.println("Invalid option value defined: " + e.getMessage()); System.out.println(); } catch (IllegalArgumentException e) { System.out.println("Invalid command defined <" + pCmd + ">: " + e.getMessage()); System.out.println(); } throw new InvalidParameterException("Something went wrong.."); } /** * The main method. * * @param args the arguments * @throws ParseException the parse exception */ public static void main(String[] args) throws Exception { System.out.println("PixelController Client v" + VERSION + "\n"); ParsedArgument cmd = null; try { cmd = parseArgument(args); } catch (Exception e) { usage(); System.exit(1); } System.out.println(cmd); if (cmd.getCommand() == ValidCommands.JMX_STAT) { //send jmx request int port = cmd.getPort(); if (port == DEFAULT_PORT) { System.out.println("No Port specified, using default JMX port " + DEFAULT_JMX_PORT); port = DEFAULT_JMX_PORT; } PixConClientJmx.queryJmxServer(cmd.getHostname(), port); } else { //send osc payload System.out.println(cmd.getPayload()); OscClientFactory.sendOscMessage(cmd.getHostname(), cmd.getPort(), cmd.getPayload()); System.out.println("Close connection, Bye!"); } } }