You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@any23.apache.org by "Simone Tripodi (Updated) (JIRA)" <ji...@apache.org> on 2012/04/01 20:42:28 UTC

[jira] [Updated] (ANY23-71) improve the current CLI engine

     [ https://issues.apache.org/jira/browse/ANY23-71?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Simone Tripodi updated ANY23-71:
--------------------------------

    Attachment: enhanced_cli.patch

The attached patch contains a proposal for implementation wich replaces commons-cli (and custom args parsing) with JCommander; I also reduced generated sh binaries to a single /any23 script, wich is the single entry point able to launch all any23 commands that are plugged via plugins discovery.
The {{Version}} command has been replaced with the {{-v|--version}} option.

A sample usage print:

{code}
$ sh any23 -h
Usage: any23 [options] [command] [command options]
  Options:
    -h, --help          Display help information.
                        Default: false
    -p, --plugins-dir   The Any23 plugins directory.
                        Default: /Users/simonetripodi/.any23/plugins
    -X, --verbose       Produce execution verbose output.
                        Default: false
    -v, --version       Display version information.
                        Default: false
  Commands:
    extractor      Utility for obtaining documentation about metadata extractors.
      Usage: extractor [options] Extractor name      
  Options:
          -a, --all     shows a report about all available extractors
                        Default: false
          -i, --input   shows example input for the given extractor
                        Default: false
          -l, --list    shows the names of all available extractors
                        Default: false
          -o, --outut   shows example output for the given extractor
                        Default: false

    microdata      Commandline Tool for extracting Microdata from file/HTTP source.
      Usage: microdata [options] Input document URL, {http://path/to/resource.html|file:/path/to/local.file}
    mimes      MIME Type Detector Tool.
      Usage: mimes [options] Input document URL, {http://path/to/resource.html|file:///path/to/local.file|inline:// some inline content}
    verify      Utility for plugin management verification.
      Usage: verify [options] plugins-dir
    rover      Any23 Command Line Tool.
      Usage: rover [options] input URIs {<url>|<file>}+      
  Options:
          -d, --defaultns    Override the default namespace used to produce
                             statements.
          -e, --extractors   a comma-separated list of extractors, e.g.
                             rdf-xml,rdf-turtle
                             Default: []
          -f, --format       the output format
                             Default: turtle
          -l, --log          Produce log within a file.
          -n, --nesting      Disable production of nesting triples.
                             Default: false
          -t, --notrivial    Filter trivial statements (e.g. CSS related ones).
                             Default: false
          -o, --output       Specify Output file (defaults to standard output)
          -p, --pedantic     Validate and fixes HTML content detecting commons
                             issues.
                             Default: false
          -s, --stats        Print out extraction statistics.
                             Default: false

    vocab      Prints out the RDF Schema of the vocabularies used by Any23.
      Usage: vocab [options]      
  Options:
          -f, --format   Vocabulary output format
                         Default: NQuads
{code}

see the version:

{code}
$ ah any23 -v
Apache Any23 0.7.0-incubating-SNAPSHOT (trunk@r1304362; 2012-04-01 19:03:41+0200)
Java version: 1.6.0_29, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "Mac OS X", version: "10.7.3", arch: "x86_64", family: "mac"
{code}

execute a command:

{code}
$ sh any23 mimes http://www.google.com/

------------------------------------------------------------------------
Apache Any23 :: mimes
------------------------------------------------------------------------

text/html

------------------------------------------------------------------------
Apache Any23 SUCCESS
Total time: 4s
Finished at: Sun Apr 01 20:39:29 CEST 2012
Final Memory: 16M/493M
------------------------------------------------------------------------
{code}

Unfortunately while rearranging things I got an issue in the tests:

{code}
-------------------------------------------------------------------------------
Test set: org.apache.any23.cli.RoverTest
-------------------------------------------------------------------------------
Tests run: 3, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 8.055 sec <<< FAILURE!
testRunMultiFiles(org.apache.any23.cli.RoverTest)  Time elapsed: 0.155 sec  <<< ERROR!
org.openrdf.rio.RDFParseException: Unexpected end of line. [line 27, column 304]
    at org.openrdf.rio.helpers.RDFParserBase.reportFatalError(RDFParserBase.java:525)
    at org.apache.any23.io.nquads.NQuadsParser.parseLine(NQuadsParser.java:249)
    at org.apache.any23.io.nquads.NQuadsParser.parse(NQuadsParser.java:100)
    at org.apache.any23.rdf.RDFUtils.parseRDF(RDFUtils.java:396)
    at org.apache.any23.rdf.RDFUtils.parseRDF(RDFUtils.java:413)
    at org.apache.any23.rdf.RDFUtils.parseRDF(RDFUtils.java:429)
    at org.apache.any23.cli.RoverTest.runWithMultiSourcesAndVerify(RoverTest.java:123)
    at org.apache.any23.cli.RoverTest.testRunMultiFiles(RoverTest.java:54)
{code}

Can one of the original Any23 developer take a look at it, if interested on the proposal, please?

Many thanks in advance, all the best!
                
> improve the current CLI engine
> ------------------------------
>
>                 Key: ANY23-71
>                 URL: https://issues.apache.org/jira/browse/ANY23-71
>             Project: Apache Any23
>          Issue Type: Improvement
>    Affects Versions: 0.7.0
>            Reporter: Simone Tripodi
>             Fix For: 0.7.0
>
>         Attachments: enhanced_cli.patch
>
>
> Actual CLI - even if nicely working - can be improved in therms of of both internal architecture and user interface.
> I see two main "issues" on current CLI:
>  * on UI, the CLI exposes internal details, since the {{ToolRunner}} requires the classname of the tool has to be executed;
>  * on internals, each Tool has to parse the the chunk of the command line, which can be automated.
> So my proposal is to automate, via the already working plugins discovery, the CLI arguments parsing AND implementing a svn/git commands-based alike interface.
> My preferred choice for that is [JCommande|http://www.jcommander.org/] because:
>  * it allows binding CLI arguments to Java properties via Annotations - no more manual parsing;
>  * it already supports a complex syntax to implement [commands|http://jcommander.org/#Complex];
>  * commands aliases can be expressed via annotations - no more needs to expose internals;
> Patch with proposal is coming

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira