+ \r
+ /**\r
+ * Checks if there are any limit expressions matching any of the given expressionFields\r
+ * @param expressionFields expression fields (left-of-operator entities) to look for\r
+ * @return true if expression(s) found with any of <code>expressionFields</code> \r
+ */\r
+ public boolean hasLimitExpression(String... expressionFields) {\r
+ logger.trace("Checking for limit expression for " + Arrays.deepToString(expressionFields));\r
+ for (String field : expressionFields) {\r
+ if (getLimitExpressions(field) != null && getLimitExpressions(field).size()>0) {\r
+ logger.trace("Limit expression found (" + field + ")");\r
+ return true;\r
+ } \r
+ }\r
+ logger.trace("No limit expressions found");\r
+ return false;\r
+ }\r
+ \r
+ /**\r
+ * Returns the first limit expression of the given type\r
+ * @param expressionField expression field (left-of-operator entity) to look for\r
+ * @return the first limit expression found with the field <code>expressionField</code> or null if none found \r
+ */\r
+ public Expression getOneLimitExpression(String expressionField) {\r
+ List<Expression> exprs = getLimitExpressions(expressionField);\r
+ if (exprs != null && exprs.size()>0) {\r
+ if (exprs.size()>1) {\r
+ logger.warn("More that one limit expression found for [" + expressionField + "] but only asked to return the first one");\r
+ }\r
+ return exprs.get(0);\r
+ } else {\r
+ return null;\r
+ } \r
+ }\r
+ \r
+ /**\r
+ * Return a list of all current limit expressions\r
+ */\r
+ public List<Expression> getLimitExpressions() {\r
+ return getParameter("limit").getExpressions();\r
+ }\r
+ \r
+ /**\r
+ * Returns a list of limit expressions with fields that matches on of <code>expressionFields</code>\r
+ * \r
+ * @param expressionFields limit expressions to look for\r
+ */\r
+ public List<Expression> getLimitExpressions(String... expressionFields) {\r
+ logger.trace("Checking for limit parameter");\r
+ if (parameters.get("limit")!=null) {\r
+ logger.trace("Found");\r
+ return getParameter("limit").getExpressions(expressionFields);\r
+ } else {\r
+ logger.trace("Not found");\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * Adds a limit expression with a label for display. The limit is added to the end\r
+ * of an ordered list. \r
+ * \r
+ * @param field\r
+ * @param operator\r
+ * @param value\r
+ * @param label\r
+ */\r
+ public void addLimit(String field, String operator, String value, String label) {\r
+ if (getParameter("limit") == null) {\r
+ setLimit(field, operator, value, label);\r
+ } else {\r
+ addExpression("limit",new Expression(field,operator,value,label)); \r
+ }\r
+ }\r
+ \r
+ /**\r
+ * Clears the limit parameter\r
+ */\r
+ public void removeLimits() {\r
+ removeParameter("limit");\r
+ }\r
+ \r
+ /**\r
+ * Removes all limit expressions that have fields as listed in <code>fieldsToRemove</code>\r
+ * @param fieldsToRemove\r
+ */\r
+ public void removeLimits(String... fieldsToRemove) { \r
+ removeExpressions("limit",fieldsToRemove); \r
+ }\r
+ \r
+ /**\r
+ * Removes a limit expression by exact attributes\r
+ * \r
+ * @param field\r
+ * @param operator\r
+ * @param value\r
+ */\r
+ public void removeLimit(String field, String operator, String value) {\r
+ removeExpression("limit",new Expression(field, operator, value, null)); \r
+ }\r
+ \r
+ /**\r
+ * Removes limit expressions coming after the provided limit expression, if they have a field listed in\r
+ * <code>fieldsToRemove</code>. To be used for bread crumb like UI controls.\r
+ * \r
+ * @param field\r
+ * @param operator\r
+ * @param value\r
+ * @param fieldsToRemove\r
+ */\r
+ public void removeLimitsAfter(String field, String operator, String value, String... fieldsToRemove) { \r
+ removeExpressionsAfter("limit",new Expression(field,operator,value,null),fieldsToRemove); \r
+ }\r
+\r
+ \r
+ /**\r
+ * Sets the <code>startrecs</code> parameter. See Pazpar2 documentation for details.\r
+ */ \r