/** * Convert the given object into a value appropriate for being defined as the value of a variable * in an XQuery. This will extract a sequence out of all database objects, convert collections and * arrays into sequences recursively, convert <code>null</code> into an empty sequence, and pass * other objects through untouched. Convertible objects that are defined in the JDK will be * automatically converted by eXist. * * @see org.exist.xquery.XPathUtil#javaObjectToXPath(Object, XQueryContext, boolean) * @param o the object to convert to a database value * @return the converted value, ready for assignment to an XQuery variable */ @SuppressWarnings("unchecked") private Object convertValue(Object o) { if (o == null) return Collections.emptyList(); if (o instanceof Resource) { try { return ((Resource) o).convertToSequence(); } catch (UnsupportedOperationException e) { return o; } } List<Object> list = null; if (o instanceof Collection) list = new ArrayList<Object>((Collection) o); else if (o instanceof Object[]) list = new ArrayList<Object>(Arrays.asList((Object[]) o)); if (list != null) { for (ListIterator<Object> it = list.listIterator(); it.hasNext(); ) { it.set(convertValue(it.next())); } return list; } return DataUtils.toXMLObject(o); }
/** * Return a string that describes the statistics for the top n entries, sorted by descending * order of total time spent dealing with the query. This will always include the totals entry * in the first position. * * @param n the desired number of entries to describe * @return a string describing the statistics for the top n entries */ public synchronized String toStringTop(int n) { StringBuilder out = new StringBuilder(); List<Entry> list = entries(); if (list.isEmpty()) return "<no queries executed>"; Collections.sort(list, TOTAL_TIME_DESCENDING); int maxCountLength = COUNT_FORMAT.format(list.get(0).numQueries).length(); double totalDuration = list.get(0).queryTime; for (Entry entry : list.subList(0, Math.min(n, list.size()))) out.append(entry.toString(maxCountLength, totalDuration)).append('\n'); return out.toString(); }