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

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

Introduction

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

Prototype

K next();

Source Link

Document

Gets the next key from the Map.

Usage

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

/**
 * Pretty print query string//w  w w .jav a  2  s .co  m
 * 
 * @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();
}