Java tutorial
/** * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# * This file is part of the LDP4j Project: * http://www.ldp4j.org/ * * Center for Open Middleware * http://www.centeropenmiddleware.com/ * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# * Copyright (C) 2014-2016 Center for Open Middleware. * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# * 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. * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# * Artifact : org.ldp4j.tutorial.client:eswc-2015-client:1.0.0 * Bundle : eswc-2015-client-1.0.0.jar * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# */ package org.ldp4j.tutorial.client; import java.io.File; import java.util.Arrays; import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; public final class ContactsShell { private static final class DefaultCommandContext implements CommandContext { private final String commandName; private final String commandLine; private final CommandLine helper; private DefaultCommandContext(String commandName, String commandLine, CommandLine helper) { this.commandName = commandName; this.commandLine = commandLine; this.helper = helper; } @Override public String commandName() { return this.commandName; } @Override public String commandLine() { return this.commandLine; } @Override public boolean hasEntityTag() { return this.helper.hasOption("et"); } @Override public String entityTag() { return this.helper.getOptionValue("et"); } @Override public boolean hasLastModified() { return this.helper.hasOption("lm"); } @Override public String lastModified() { return this.helper.getOptionValue("lm"); } @Override public boolean hasEntity() { return this.helper.hasOption("e"); } @Override public String entity() { return this.helper.getOptionValue("e"); } @Override public boolean hasOptions() { return this.helper.getOptions().length > 0; } @Override public boolean hasContentType() { return this.helper.hasOption("e"); } @Override public String contentType() { return this.helper.getOptionValue("ct"); } @Override public boolean hasTarget() { return target() != null; } @Override public String target() { List<String> argList = this.helper.getArgList(); if (argList != null && !argList.isEmpty()) { return argList.get(0); } return null; } } private final Options options; private final ShellConsole console; private final ResourceRepository repository; private final CachedRepresentationManager manager; private ContactsShell(ShellConsole console, ResourceRepository repository, CachedRepresentationManager manager) { this.manager = manager; this.console = console; this.repository = repository; this.options = new Options().addOption("et", "entity-tag", true, "use entity tag") .addOption("lm", "last-modified", true, "use last modified date") .addOption("ct", "content-type", true, "use content type") .addOption("e", "entity", true, "use entity"); } private CommandContext createCommandContext(String rawCommandLine) throws ParseException { String[] commandLineParts = ShellUtil.split(rawCommandLine); String command = ShellUtil.extractCommandName(commandLineParts); String[] commandArgs = ShellUtil.extractCommandArguments(commandLineParts); CommandLineParser parser = new DefaultParser(); CommandLine commandLine = parser.parse(this.options, commandArgs); // debug(command, commandLine); return new DefaultCommandContext(command, rawCommandLine, commandLine); } protected void debug(String command, CommandLine commandLine) { this.console.message("- Command: ").metadata(command).message("%n"); for (Option opt : options.getOptions()) { if (commandLine.hasOption(opt.getOpt())) { if (!opt.hasArg()) { this.console.metadata(" + %s%n", opt.getOpt()); } else { if (!opt.hasArgs()) { this.console.metadata(" + %s: ", opt.getOpt()).data("%s%n", commandLine.getOptionValue(opt.getOpt())); } else { this.console.metadata(" + %s: ", opt.getOpt()).data("%s%n", Arrays.toString(commandLine.getOptionValues(opt.getOpt()))); } } } } List<String> argList = commandLine.getArgList(); if (!argList.isEmpty()) { this.console.metadata(" + Arguments:%n"); for (String arg : argList) { this.console.metadata(" * ").data("%s%n", arg); } } } public void execute() { boolean continueExecution = true; while (continueExecution) { this.console.prompt("contacts> "); String commandLine = this.console.readLine(); if (commandLine.trim().isEmpty()) { continue; } try { CommandContext context = createCommandContext(commandLine); CommandProcessor processor = ShellUtil.createProcessor(context.commandName()); processor.setConsole(this.console); processor.setRepository(this.repository); processor.setContentManager(this.manager); if (processor.canExecute(context)) { continueExecution = processor.execute(context); } } catch (ParseException e) { this.console.error("ERROR: Could not process command (%s)%n", e.getMessage()); } } } public static void main(String... args) { File cacheDirectory = new File(".cache"); CachedRepresentationManager manager = CachedRepresentationManager.create(cacheDirectory); try { ShellConsole console = ShellUtil.console(); console.title("ESWC 2015 - LDP4j Tutorial - Contacts Application Shell ").message("v%s%n", System.getProperty("shell.build", "XXX")); ContactsShell shell = new ContactsShell(console, ResourceRepository.create(), manager); shell.execute(); console.title("Bye!!!"); } finally { manager.dispose(); } } }