All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tangosol.coherence.dslquery.queryplus.HelpStatementBuilder Maven / Gradle / Ivy

/*
 * Copyright (c) 2000, 2020, Oracle and/or its affiliates.
 *
 * Licensed under the Universal Permissive License v 1.0 as shown at
 * http://oss.oracle.com/licenses/upl.
 */
package com.tangosol.coherence.dslquery.queryplus;

import com.tangosol.coherence.dslquery.CoherenceQueryLanguage;
import com.tangosol.coherence.dslquery.ExecutionContext;
import com.tangosol.coherence.dslquery.QueryPlus;
import com.tangosol.coherence.dslquery.StatementBuilder;
import com.tangosol.coherence.dslquery.StatementResult;

import com.tangosol.coherence.dsltools.precedence.OPParser;
import com.tangosol.coherence.dsltools.precedence.OPToken;

import com.tangosol.coherence.dsltools.termtrees.NodeTerm;
import com.tangosol.coherence.dsltools.termtrees.Term;
import com.tangosol.coherence.dsltools.termtrees.Terms;

import com.tangosol.config.expression.ParameterResolver;

import java.io.PrintWriter;

import java.util.Collection;
import java.util.List;

/**
 * A {@link StatementBuilder} that builds the QueryPlus "HELP" command.
 *
 * @author jk  2014.01.06
 * @since Coherence 12.2.1
 */
public class HelpStatementBuilder
        extends AbstractQueryPlusStatementBuilder
    {
    // ----- StatementBuilder interface -------------------------------------

    @Override
    public HelpQueryPlusStatement realize(ExecutionContext ctx, NodeTerm term, List listBindVars,
            ParameterResolver namedBindVars)
        {
        return f_command;
        }

    @Override
    public String getSyntax()
        {
        return "HELP";
        }

    @Override
    public String getDescription()
        {
        return "Displays the syntax and description of all of the commands";
        }

    @Override
    public AbstractOPToken instantiateOpToken()
        {
        return new HelpCommandOPToken();
        }

    // ----- inner class: HelpCommandOPToken --------------------------------

    /**
     * A CohQL OPToken representing the QueryPlus "help" command.
     */
    public class HelpCommandOPToken
            extends AbstractOPToken
        {
        // ----- constructors -----------------------------------------------

        /**
         * Construct a HelpCommandOPToken.
         */
        public HelpCommandOPToken()
            {
            super("help", OPToken.IDENTIFIER_NODE, "showHelp");
            }

        // ----- OpToken methods --------------------------------------------

        public Term nud(OPParser parser)
            {
            return Terms.newTerm(getFunctor());
            }
        }

    // ----- inner class: HelpQueryPlusStatement ----------------------------

    /**
     * A class representing the QueryPlus "HELP" command.
     */
    public class HelpQueryPlusStatement
            extends AbstractStatement
        {

        @Override
        public StatementResult execute(ExecutionContext ctx)
            {
            PrintWriter out = ctx.getWriter();

            QueryPlus.DependenciesHelper.usage(out);
            out.println();
            out.println(sEighty);
            out.println("BYE |  QUIT ");
            out.println("Exits the command line tool.");
            out.println();

            CoherenceQueryLanguage          language    = ctx.getCoherenceQueryLanguage();
            Collection> colBuilders = language.getStatementBuilders().values();

            for (StatementBuilder builder : colBuilders)
                {
                out.println(sEighty);
                out.println(builder.getSyntax());
                out.println();
                out.println(builder.getDescription());
                out.println();
                }

            // Display information about the valid CohQL operators
            out.println(sEighty);
            out.println("For WHERE clauses the currently Supported conditionals are:\n"
                        + "Comparison operators: =, >, >=, <, <=, <>, [ NOT ] BETWEEN, [ NOT ] LIKE,\n"
                        + "[ NOT ] IN, IS [ NOT ] NULL, CONTAINS [ALL | ANY] *\n"
                        + "Logical operators: (AND, OR, NOT)\n"
                        + "Literal numbers, and the constants true, false, and null\n" + "\n"
                        + "Arguments to operators are properties and converted to Bean style getters and\n"
                        + "the \".\" operator may be used to make chains of calls. The optional alias may be\n"
                        + "prepended onto the beginning of these path expressions. The Pseudo functions\n"
                        + "key(), and value() may be used to specify the use of a key as in\n"
                        + "\"key() between 10 and 50\".\n"
                        + "The value() pseudo function is shorthand for the entire element as is the alias.\n"
                        + "The key() pseudo function my be specified as key(alias) for compatibility with\n"
                        + "JPQL.");

            return StatementResult.NULL_RESULT;
            }
        }

    // ----- data members ---------------------------------------------------

    private static final String sEighty = "----------------------------------------" +
                                          "----------------------------------------";
    /**
     * A {@link HelpStatementBuilder.HelpQueryPlusStatement} instance.
     */
    protected final HelpQueryPlusStatement f_command = new HelpQueryPlusStatement();
    }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy