Renames method. Javadoc.
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / utils / UiUtils.java
1 package com.indexdata.mkjsf.utils;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.List;\r
5 \r
6 import javax.enterprise.context.ApplicationScoped;\r
7 import javax.inject.Named;\r
8 \r
9 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
10 \r
11 @Named("pzui")\r
12 @ApplicationScoped\r
13 public class UiUtils {\r
14 \r
15   /**\r
16    * Concatenates a list of strings\r
17    * @param strings\r
18    * @return\r
19    */\r
20   public static String concat(String... strings) {\r
21     StringBuilder concatenated = new StringBuilder("");\r
22     for (String string : strings) {\r
23       concatenated.append(string);\r
24     }\r
25     return concatenated.toString();\r
26   }\r
27   \r
28   public static String concatMaxLength(int maxTotalLength, String... strings) {\r
29     String concatenated = concat(strings);\r
30     return maxLength(concatenated,maxTotalLength);\r
31   }\r
32   \r
33   public static String maxLength (String string, int maxLength) {\r
34     if (string == null || string.length()<=maxLength) {\r
35       return string;\r
36     } else {\r
37       return string.substring(0,maxLength);\r
38     }\r
39   }\r
40   \r
41   public static String maxLengthMoreLabel (String string, int maxLength, String moreLabel) {\r
42     if (string == null || string.length()<=maxLength) {\r
43       return string;\r
44     } else {\r
45       String maxString = maxLength(string,maxLength);\r
46       if (string.length()>maxString.length()) {\r
47         maxString += moreLabel;\r
48       }\r
49       return maxString;\r
50     }\r
51   }\r
52     \r
53   /**\r
54    * Encloses a string with quotation marks\r
55    * @param string\r
56    * @return\r
57    */\r
58   public static String quote(String string) {\r
59     return "\"" + string + "\"";\r
60   }\r
61   \r
62   /**\r
63    * Gets at most maxElements elements of the given elementName\r
64    * @param container The parent element containing the elements to retrieve\r
65    * @param elementName The name of the element(s) to retrieve\r
66    * @param maxElements Maximum number of elements to retrieve\r
67    * @return At most maxElements data objects of the given type\r
68    */\r
69   public static List<ResponseDataObject> getMaxNumElements(ResponseDataObject container, String elementName, int maxElements) {\r
70     if (container.getElements(elementName)!=null) {\r
71       int elementCount = container.getElements(elementName).size();\r
72       if (elementCount>0) {\r
73         return ((ArrayList<ResponseDataObject>) container.getElements(elementName)).subList(0, Math.min(maxElements,elementCount));        \r
74       } \r
75     }   \r
76     return container.getElements(elementName);\r
77   }\r
78   \r
79   /**\r
80    * Gets at most maxElements data objects, up to a total string length of maxTotalValueLength\r
81    * @param container The parent element containing the elements to retrieve\r
82    * @param elementName The name of the element(s) to retrieve\r
83    * @param maxElements  Maximum number of elements to retrieve\r
84    * @param maxTotalValueLength The maximum total string length of the values of the elements retrieved\r
85    * @param hardLimit If set to true, the list will be cut of at or below the total string length, if false, the list\r
86    *                  will contain the first element that exceeds the length limit - for instance thus guaranteeing \r
87    *                  that at least one of the elements will be returned, no matter it's length. \r
88    * @return Delimited list of elements\r
89    */\r
90   public List<ResponseDataObject> getMaxElements(ResponseDataObject container, String elementName, int maxElements, int maxTotalValueLength, boolean hardLimit) {\r
91     List<ResponseDataObject> maxNumList = getMaxNumElements(container,elementName,maxElements);\r
92     if (maxNumList!=null) {\r
93       int elementCount = maxNumList.size();\r
94       if (elementCount>0) {\r
95         int i = 0;\r
96         int totalLength = 0;\r
97         for (ResponseDataObject element : maxNumList) {\r
98           totalLength += element.getValue().length();           \r
99           if (totalLength>maxTotalValueLength) {\r
100             if (!hardLimit) {\r
101               i++;\r
102             }\r
103             break;\r
104           } else {\r
105             i++;\r
106           }\r
107         }\r
108         return maxNumList.subList(0, i);\r
109       }       \r
110     }  \r
111     return maxNumList;    \r
112   }\r
113 }\r