Example usage for org.apache.commons.collections15 MapIterator hasNext

List of usage examples for org.apache.commons.collections15 MapIterator hasNext

Introduction

In this page you can find the example usage for org.apache.commons.collections15 MapIterator hasNext.

Prototype

boolean hasNext();

Source Link

Document

Checks to see if there are more entries still to be iterated.

Usage

From source file:org.openanzo.glitter.query.QueryController.java

/**
 * Pretty print query string/*  w w w  .jav  a  2  s .  c om*/
 * 
 * @param printFlags
 *            print flags
 * @param startIndentLevel
 * @return pretty print version of query
 */
@SuppressWarnings("all")
public String prettyPrintQueryString(EnumSet<QueryStringPrintOptions> printFlags, int startIndentLevel) {
    QueryResultForm queryResultForm = this.getQueryResultForm();

    StringBuilder s = new StringBuilder();

    // output the base, if any
    if (this.baseUri != null) {
        s.append("BASE <");
        s.append(this.baseUri);
        s.append(">");
        printSeparator(printFlags, 0, s);
    }
    // add prefixes for all URIs mentioned in the query

    final BidiMap<String, String> prefix2uri = new TreeBidiMap<String, String>();
    Map<String, String> uri2prefix = prefix2uri.inverseBidiMap();
    for (Entry<String, URI> e : this.prefixMap.entrySet())
        prefix2uri.put(e.getKey(), e.getValue().toString());
    for (Entry<String, URI> e : this.queryOptions.entrySet())
        prefix2uri.put(e.getKey(), e.getValue().toString());
    if (printFlags.contains(QueryStringPrintOptions.GENERATE_NEW_PREFIXES)) {
        visitURIs(new URIVisitor() {
            private int p = 0;

            public boolean visitURI(URI u) {
                if (!prefix2uri.containsValue(u.getNamespace())) {
                    // TODO - could use next-to-last URI component to name prefix
                    while (prefix2uri.containsKey("p" + ++p))
                        ;
                    prefix2uri.put("p" + p, u.getNamespace());
                }
                return true;
            }
        }, false, true);
    }
    // output prefixes
    MapIterator<String, String> it = prefix2uri.mapIterator();
    while (it.hasNext()) {
        String key = it.next();
        String value = it.getValue();
        s.append("PREFIX ");
        s.append(key);
        s.append(": <");
        s.append(value);
        s.append(">");
        printSeparator(printFlags, 0, s);
    }
    this.resultForm.prettyPrintQueryPart(printFlags, startIndentLevel, uri2prefix, s);
    printSeparator(printFlags, startIndentLevel, s);
    if (isDatasetFromQuery()) {
        for (URI u : getQueryDataset().getDefaultGraphURIs()) {
            s.append("FROM ");
            printURI(u, printFlags, uri2prefix, s);
            printSeparator(printFlags, startIndentLevel, s);
        }
        for (URI u : getQueryDataset().getNamedGraphURIs()) {
            s.append("FROM NAMED ");
            printURI(u, printFlags, uri2prefix, s);
            printSeparator(printFlags, startIndentLevel, s);
        }
        for (URI u : getQueryDataset().getNamedDatasetURIs()) {
            s.append("FROM DATASET ");
            printURI(u, printFlags, uri2prefix, s);
            printSeparator(printFlags, startIndentLevel, s);
        }
    }
    s.append("WHERE {");
    printSeparator(printFlags, startIndentLevel + 1, s);
    this.queryPattern.prettyPrintQueryPart(printFlags, startIndentLevel + 1, uri2prefix, s);
    printSeparator(printFlags, startIndentLevel, s);
    s.append("}");

    if (queryResultForm instanceof Projection) {
        Projection projection = (Projection) queryResultForm;
        if (!projection.getGroupByVariables().isEmpty()) {
            printSeparator(printFlags, startIndentLevel, s);
            projection.prettyPrintGroupByQueryPart(printFlags, startIndentLevel, uri2prefix, s);
        }
    }

    if (this.ordering.size() > 0) {
        printSeparator(printFlags, startIndentLevel, s);
        s.append("ORDER BY ");
        for (int i = 0; i < this.ordering.size(); i++) {
            OrderingCondition c = this.ordering.get(i);
            if (i != 0)
                s.append(' ');
            c.prettyPrintQueryPart(printFlags, startIndentLevel, uri2prefix, s);
        }
        printSeparator(printFlags, startIndentLevel, s);
    }

    if (this.limit > -1) {
        printSeparator(printFlags, startIndentLevel, s);
        s.append("LIMIT ");
        s.append(this.limit);
    }
    if (this.offset > -1) {
        printSeparator(printFlags, startIndentLevel, s);
        s.append("OFFSET ");
        s.append(this.offset);
    }
    if (printFlags.contains(QueryStringPrintOptions.REMOVE_UNUSED_PREFIXES)) {
        String q = s.toString();
        s = new StringBuilder();
        String[] lines = q.split("\n");
        Pattern p = Pattern.compile("^PREFIX\\s*(\\w+:)", Pattern.CASE_INSENSITIVE);
        boolean first = true;
        for (String line : lines) {
            Matcher m = p.matcher(line);
            if (m.find()) {
                Pattern prefix = Pattern.compile("\\W" + m.group(1));
                if (prefix.split(q).length <= 2)
                    continue;
            }
            if (!first)
                s.append('\n');
            s.append(line);
            first = false;
        }
    }
    return s.toString();
}