List of usage examples for org.apache.commons.collections15.bidimap TreeBidiMap TreeBidiMap
public TreeBidiMap()
From source file:org.openanzo.glitter.query.QueryController.java
/** * Pretty print query string//w ww. ja v a 2s . c o 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(); }
From source file:org.openanzo.glitter.query.SubqueryController.java
/** * Pretty print query string//from www . ja va 2s.c o m * * @param printFlags * print flags * @param startIndentLevel * @return pretty print version of query */ @SuppressWarnings("all") public void prettyPrintQueryStringPart(EnumSet<QueryStringPrintOptions> printFlags, int startIndentLevel, StringBuilder s) { QueryResultForm queryResultForm = this.getQueryResultForm(); final BidiMap<String, String> prefix2uri = new TreeBidiMap<String, String>(); Map<String, String> uri2prefix = prefix2uri.inverseBidiMap(); for (Entry<String, URI> e : this.parent.prefixMap.entrySet()) prefix2uri.put(e.getKey(), e.getValue().toString()); this.resultForm.prettyPrintQueryPart(printFlags, startIndentLevel, 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, 0, 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); } }