Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkjsf.git into...
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / utils / UiUtils.java
diff --git a/src/main/java/com/indexdata/mkjsf/utils/UiUtils.java b/src/main/java/com/indexdata/mkjsf/utils/UiUtils.java
new file mode 100644 (file)
index 0000000..93a3502
--- /dev/null
@@ -0,0 +1,119 @@
+package com.indexdata.mkjsf.utils;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.enterprise.context.ApplicationScoped;\r
+import javax.inject.Named;\r
+\r
+import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
+\r
+/**\r
+ * UI utilities \r
+ * \r
+ * @author Niels Erik\r
+ *\r
+ */\r
+@Named("pzui")\r
+@ApplicationScoped\r
+public class UiUtils {\r
+\r
+  /**\r
+   * Concatenates a list of strings\r
+   * @param strings\r
+   * @return\r
+   */\r
+  public static String concat(String... strings) {\r
+    StringBuilder concatenated = new StringBuilder("");\r
+    for (String string : strings) {\r
+      concatenated.append(string);\r
+    }\r
+    return concatenated.toString();\r
+  }\r
+  \r
+  public static String concatMaxLength(int maxTotalLength, String... strings) {\r
+    String concatenated = concat(strings);\r
+    return maxLength(concatenated,maxTotalLength);\r
+  }\r
+  \r
+  public static String maxLength (String string, int maxLength) {\r
+    if (string == null || string.length()<=maxLength) {\r
+      return string;\r
+    } else {\r
+      return string.substring(0,maxLength);\r
+    }\r
+  }\r
+  \r
+  public static String maxLengthMoreLabel (String string, int maxLength, String moreLabel) {\r
+    if (string == null || string.length()<=maxLength) {\r
+      return string;\r
+    } else {\r
+      String maxString = maxLength(string,maxLength);\r
+      if (string.length()>maxString.length()) {\r
+        maxString += moreLabel;\r
+      }\r
+      return maxString;\r
+    }\r
+  }\r
+    \r
+  /**\r
+   * Encloses a string with quotation marks\r
+   * @param string\r
+   * @return\r
+   */\r
+  public static String quote(String string) {\r
+    return "\"" + string + "\"";\r
+  }\r
+  \r
+  /**\r
+   * Gets at most maxElements elements of the given elementName\r
+   * @param container The parent element containing the elements to retrieve\r
+   * @param elementName The name of the element(s) to retrieve\r
+   * @param maxElements Maximum number of elements to retrieve\r
+   * @return At most maxElements data objects of the given type\r
+   */\r
+  public static List<ResponseDataObject> getMaxNumElements(ResponseDataObject container, String elementName, int maxElements) {\r
+    if (container.getElements(elementName)!=null) {\r
+      int elementCount = container.getElements(elementName).size();\r
+      if (elementCount>0) {\r
+        return ((ArrayList<ResponseDataObject>) container.getElements(elementName)).subList(0, Math.min(maxElements,elementCount));        \r
+      } \r
+    }   \r
+    return container.getElements(elementName);\r
+  }\r
+  \r
+  /**\r
+   * Gets at most maxElements data objects, up to a total string length of maxTotalValueLength\r
+   * @param container The parent element containing the elements to retrieve\r
+   * @param elementName The name of the element(s) to retrieve\r
+   * @param maxElements  Maximum number of elements to retrieve\r
+   * @param maxTotalValueLength The maximum total string length of the values of the elements retrieved\r
+   * @param hardLimit If set to true, the list will be cut of at or below the total string length, if false, the list\r
+   *                  will contain the first element that exceeds the length limit - for instance thus guaranteeing \r
+   *                  that at least one of the elements will be returned, no matter it's length. \r
+   * @return Delimited list of elements\r
+   */\r
+  public List<ResponseDataObject> getMaxElements(ResponseDataObject container, String elementName, int maxElements, int maxTotalValueLength, boolean hardLimit) {\r
+    List<ResponseDataObject> maxNumList = getMaxNumElements(container,elementName,maxElements);\r
+    if (maxNumList!=null) {\r
+      int elementCount = maxNumList.size();\r
+      if (elementCount>0) {\r
+        int i = 0;\r
+        int totalLength = 0;\r
+        for (ResponseDataObject element : maxNumList) {\r
+          totalLength += element.getValue().length();           \r
+          if (totalLength>maxTotalValueLength) {\r
+            if (!hardLimit) {\r
+              i++;\r
+            }\r
+            break;\r
+          } else {\r
+            i++;\r
+          }\r
+        }\r
+        return maxNumList.subList(0, i);\r
+      }       \r
+    }  \r
+    return maxNumList;    \r
+  }\r
+}\r