package tundra.list; // -----( IS Java Code Template v1.2 // -----( CREATED: 2017-05-07 18:35:20 EST // -----( ON-HOST: 192.168.66.129 import com.wm.data.*; import com.wm.util.Values; import com.wm.app.b2b.server.Service; import com.wm.app.b2b.server.ServiceException; // --- <<IS-START-IMPORTS>> --- import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import permafrost.tundra.data.IDataHelper; import permafrost.tundra.flow.variable.SubstitutionHelper; import permafrost.tundra.flow.variable.SubstitutionType; import permafrost.tundra.lang.BooleanHelper; import permafrost.tundra.lang.CharsetHelper; import permafrost.tundra.lang.ExceptionHelper; import permafrost.tundra.lang.StringHelper; import permafrost.tundra.math.IntegerHelper; // --- <<IS-END-IMPORTS>> --- public final class string { // ---( internal utility methods )--- final static string _instance = new string(); static string _newInstance() { return new string(); } static string _cast(Object o) { return (string)o; } // ---( server methods )--- public static final void append (IData pipeline) throws ServiceException { // --- <<IS-START(append)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $item // [o] field:1:required $list tundra.list.object.append(pipeline, String.class); // --- <<IS-END>> --- } public static final void blankify (IData pipeline) throws ServiceException { // --- <<IS-START(blankify)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:1:optional $list IDataCursor cursor = pipeline.getCursor(); try { String[] list = IDataHelper.get(cursor, "$list", String[].class); IDataHelper.put(cursor, "$list", StringHelper.blankify(list), false); } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void capitalize (IData pipeline) throws ServiceException { // --- <<IS-START(capitalize)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $mode {"all words","first word"} // [o] field:1:optional $list IDataCursor cursor = pipeline.getCursor(); try { String[] list = IDataHelper.get(cursor, "$list", String[].class); String mode = IDataHelper.get(cursor, "$mode", String.class); if (list != null) IDataHelper.put(cursor, "$list", StringHelper.capitalize(list, mode == null ? false : mode.equalsIgnoreCase("first word"))); } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void coalesce (IData pipeline) throws ServiceException { // --- <<IS-START(coalesce)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $default // [i] field:0:optional $mode {"missing","null"} // [o] field:0:optional $item tundra.list.object.coalesce(pipeline); // --- <<IS-END>> --- } public static final void compact (IData pipeline) throws ServiceException { // --- <<IS-START(compact)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:1:optional $list tundra.list.object.compact(pipeline); // --- <<IS-END>> --- } public static final void concatenate (IData pipeline) throws ServiceException { // --- <<IS-START(concatenate)>> --- // @subtype unknown // @sigtype java 3.5 // [i] record:0:optional $operands // [o] field:1:optional $list tundra.list.object.concatenate(pipeline, String.class); // --- <<IS-END>> --- } public static final void difference (IData pipeline) throws ServiceException { // --- <<IS-START(difference)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list.x // [i] field:1:optional $list.y // [o] field:1:optional $list tundra.list.object.difference(pipeline); // --- <<IS-END>> --- } public static final void drop (IData pipeline) throws ServiceException { // --- <<IS-START(drop)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:required $index // [o] field:1:optional $list tundra.list.object.drop(pipeline); // --- <<IS-END>> --- } public static final void each (IData pipeline) throws ServiceException { // --- <<IS-START(each)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $service // [i] record:0:optional $pipeline // [i] field:0:optional $item.input tundra.list.object.each(pipeline); // --- <<IS-END>> --- } public static final void equal (IData pipeline) throws ServiceException { // --- <<IS-START(equal)>> --- // @subtype unknown // @sigtype java 3.5 // [i] record:0:optional $operands // [o] field:0:required $equal? tundra.list.object.equal(pipeline, String.class); // --- <<IS-END>> --- } public static final void filter (IData pipeline) throws ServiceException { // --- <<IS-START(filter)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $condition // [i] record:0:optional $scope // [o] field:1:optional $list tundra.list.object.filter(pipeline); // --- <<IS-END>> --- } public static final void find (IData pipeline) throws ServiceException { // --- <<IS-START(find)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $pattern // [i] field:0:optional $literal? {"false","true"} // [o] field:0:required $found.all? // [o] field:0:required $found.any? // [o] field:0:required $found.none? // [o] field:1:optional $found // [o] field:0:required $found.length // [o] field:1:optional $unfound // [o] field:0:required $unfound.length IDataCursor cursor = pipeline.getCursor(); try { String[] list = IDataHelper.get(cursor, "$list", String[].class); String pattern = IDataHelper.get(cursor, "$pattern", String.class); boolean literal = IDataHelper.getOrDefault(cursor, "$literal?", Boolean.class, false); String[][] output = find(list, pattern, literal); if (output != null && output.length > 1) { String[] found = output[0]; String[] unfound = output[1]; IDataHelper.put(cursor, "$found.all?", found.length == list.length, String.class); IDataHelper.put(cursor, "$found.any?", found.length > 0, String.class); IDataHelper.put(cursor, "$found.none?", found.length == 0, String.class); IDataHelper.put(cursor, "$found", found); IDataHelper.put(cursor, "$found.length", found.length, String.class); IDataHelper.put(cursor, "$unfound", unfound); IDataHelper.put(cursor, "$unfound.length", unfound.length, String.class); } else { IDataHelper.put(cursor, "$found.all?", "false"); IDataHelper.put(cursor, "$found.any?", "false"); IDataHelper.put(cursor, "$found.none?", "true"); IDataHelper.put(cursor, "$found.length", "0"); IDataHelper.put(cursor, "$unfound.length", "0"); } } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void first (IData pipeline) throws ServiceException { // --- <<IS-START(first)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:0:optional $item tundra.list.object.first(pipeline); // --- <<IS-END>> --- } public static final void get (IData pipeline) throws ServiceException { // --- <<IS-START(get)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $index // [i] field:0:optional $iteration // [o] field:0:optional $item tundra.list.object.get(pipeline); // --- <<IS-END>> --- } public static final void grow (IData pipeline) throws ServiceException { // --- <<IS-START(grow)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $item // [i] field:0:required $count // [o] field:1:optional $list tundra.list.object.grow(pipeline, String.class); // --- <<IS-END>> --- } public static final void include (IData pipeline) throws ServiceException { // --- <<IS-START(include)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $item // [o] field:0:required $include? tundra.list.object.include(pipeline); // --- <<IS-END>> --- } public static final void insert (IData pipeline) throws ServiceException { // --- <<IS-START(insert)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $item // [i] field:0:required $index // [o] field:1:required $list tundra.list.object.insert(pipeline, String.class); // --- <<IS-END>> --- } public static final void intersection (IData pipeline) throws ServiceException { // --- <<IS-START(intersection)>> --- // @subtype unknown // @sigtype java 3.5 // [i] record:0:optional $operands // [o] field:1:optional $list tundra.list.object.intersection(pipeline, String.class); // --- <<IS-END>> --- } public static final void join (IData pipeline) throws ServiceException { // --- <<IS-START(join)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $separator // [i] field:0:optional $default // [i] field:0:optional $sanitization {"remove nulls","remove nulls and blanks"} // [o] field:0:optional $result tundra.list.object.join(pipeline); // --- <<IS-END>> --- } public static final void last (IData pipeline) throws ServiceException { // --- <<IS-START(last)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:0:optional $item tundra.list.object.last(pipeline); // --- <<IS-END>> --- } public static final void length (IData pipeline) throws ServiceException { // --- <<IS-START(length)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:0:required $length tundra.list.object.length(pipeline); // --- <<IS-END>> --- } public static final void map (IData pipeline) throws ServiceException { // --- <<IS-START(map)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $service // [i] record:0:optional $pipeline // [i] field:0:optional $item.input // [i] field:0:optional $item.output // [o] field:1:optional $list tundra.list.object.map(pipeline, String.class); // --- <<IS-END>> --- } public static final void match (IData pipeline) throws ServiceException { // --- <<IS-START(match)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $pattern // [i] field:0:optional $literal? {"false","true"} // [o] field:0:required $matched.all? // [o] field:0:required $matched.any? // [o] field:0:required $matched.none? // [o] field:1:optional $matched // [o] field:0:required $matched.length // [o] field:1:optional $unmatched // [o] field:0:required $unmatched.length IDataCursor cursor = pipeline.getCursor(); try { String[] list = IDataHelper.get(cursor, "$list", String[].class); String pattern = IDataHelper.get(cursor, "$pattern", String.class); boolean literal = IDataHelper.getOrDefault(cursor, "$literal?", Boolean.class, false); String[][] output = match(list, pattern, literal); if (output != null && output.length > 1) { String[] matched = output[0]; String[] unmatched = output[1]; IDataHelper.put(cursor, "$matched.all?", matched.length == list.length, String.class); IDataHelper.put(cursor, "$matched.any?", matched.length > 0, String.class); IDataHelper.put(cursor, "$matched.none?", matched.length == 0, String.class); IDataHelper.put(cursor, "$matched", matched); IDataHelper.put(cursor, "$matched.length", matched.length, String.class); IDataHelper.put(cursor, "$unmatched", unmatched); IDataHelper.put(cursor, "$unmatched.length", unmatched.length, String.class); } else { IDataHelper.put(cursor, "$matched.all?", "false"); IDataHelper.put(cursor, "$matched.any?", "false"); IDataHelper.put(cursor, "$matched.none?", "true"); IDataHelper.put(cursor, "$matched.length", "0"); IDataHelper.put(cursor, "$unmatched.length", "0"); } } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void normalize (IData pipeline) throws ServiceException { // --- <<IS-START(normalize)>> --- // @subtype unknown // @sigtype java 3.5 // [i] object:1:optional $objects // [i] field:0:optional $encoding // [o] field:1:optional $strings IDataCursor cursor = pipeline.getCursor(); try { Object[] objects = IDataHelper.get(cursor, "$objects", Object[].class); Charset charset = IDataHelper.get(cursor, "$encoding", Charset.class); String[] strings = StringHelper.normalize(objects, charset); IDataHelper.put(cursor, "$strings", strings, false); } catch(IOException ex) { ExceptionHelper.raise(ex); } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void nullify (IData pipeline) throws ServiceException { // --- <<IS-START(nullify)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:1:optional $list IDataCursor cursor = pipeline.getCursor(); try { String[] list = IDataHelper.get(cursor, "$list", String[].class); IDataHelper.put(cursor, "$list", StringHelper.nullify(list), false); } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void pad (IData pipeline) throws ServiceException { // --- <<IS-START(pad)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $length // [i] field:0:optional $character // [o] field:1:optional $list IDataCursor cursor = pipeline.getCursor(); try { String[] list = IDataHelper.get(cursor, "$list", String[].class); int length = IDataHelper.getOrDefault(cursor, "$length", Integer.class, 0); String character = IDataHelper.get(cursor, "$character", String.class); char c = (character == null || character.length() == 0) ? ' ' : character.charAt(0); IDataHelper.put(cursor, "$list", StringHelper.pad(list, length, c), false); } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void prepend (IData pipeline) throws ServiceException { // --- <<IS-START(prepend)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $item // [o] field:1:required $list tundra.list.object.prepend(pipeline, String.class); // --- <<IS-END>> --- } public static final void put (IData pipeline) throws ServiceException { // --- <<IS-START(put)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $item // [i] field:0:required $index // [o] field:1:required $list tundra.list.object.put(pipeline, String.class); // --- <<IS-END>> --- } public static final void quote (IData pipeline) throws ServiceException { // --- <<IS-START(quote)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:0:optional $pattern IDataCursor cursor = pipeline.getCursor(); try { String[] list = IDataHelper.get(cursor, "$list", String[].class); IDataHelper.put(cursor, "$pattern", StringHelper.quote(list), false); } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void reject (IData pipeline) throws ServiceException { // --- <<IS-START(reject)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $condition // [i] record:0:optional $scope // [o] field:1:optional $list tundra.list.object.reject(pipeline); // --- <<IS-END>> --- } public static final void resize (IData pipeline) throws ServiceException { // --- <<IS-START(resize)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $item // [i] field:0:required $length // [o] field:1:optional $list tundra.list.object.resize(pipeline, String.class); // --- <<IS-END>> --- } public static final void reverse (IData pipeline) throws ServiceException { // --- <<IS-START(reverse)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:1:optional $list tundra.list.object.reverse(pipeline); // --- <<IS-END>> --- } public static final void shrink (IData pipeline) throws ServiceException { // --- <<IS-START(shrink)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:required $count // [o] field:1:optional $list tundra.list.object.shrink(pipeline); // --- <<IS-END>> --- } public static final void slice (IData pipeline) throws ServiceException { // --- <<IS-START(slice)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:optional $index // [i] field:0:optional $length // [o] field:1:optional $list tundra.list.object.slice(pipeline); // --- <<IS-END>> --- } public static final void sort (IData pipeline) throws ServiceException { // --- <<IS-START(sort)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:1:optional $list tundra.list.object.sort(pipeline); // --- <<IS-END>> --- } public static final void substitute (IData pipeline) throws ServiceException { // --- <<IS-START(substitute)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] record:0:optional $pipeline // [i] field:0:optional $default // [i] field:0:optional $mode {"local","global","all"} // [o] field:1:optional $list IDataCursor cursor = pipeline.getCursor(); try { String[] list = IDataHelper.get(cursor, "$list", String[].class); IData scope = IDataHelper.get(cursor, "$pipeline", IData.class); String defaultValue = IDataHelper.get(cursor, "$default", String.class); EnumSet<SubstitutionType> mode = SubstitutionType.normalize(IDataHelper.get(cursor, "$mode", String.class)); IDataHelper.put(cursor, "$list", SubstitutionHelper.substitute(list, defaultValue, scope == null ? pipeline : scope, mode)); } finally { cursor.destroy(); } // --- <<IS-END>> --- } public static final void take (IData pipeline) throws ServiceException { // --- <<IS-START(take)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [i] field:0:required $count // [o] field:1:optional $head // [o] field:1:optional $tail tundra.list.object.take(pipeline); // --- <<IS-END>> --- } public static final void unique (IData pipeline) throws ServiceException { // --- <<IS-START(unique)>> --- // @subtype unknown // @sigtype java 3.5 // [i] field:1:optional $list // [o] field:1:optional $list tundra.list.object.unique(pipeline); // --- <<IS-END>> --- } // --- <<IS-START-SHARED>> --- /** * Returns the list of items that include and do not include the given regular expression or literal string pattern. * * @param input The array of strings to be processed. * @param pattern The pattern to look for in the given strings. * @param literal Whether the pattern is literal or a regular expression. * @return A pair of arrays, the first containing the strings that contain the pattern, the second * contains the strings that do not contain the pattern. */ public static String[][] find(String[] input, String pattern, boolean literal) { if (input == null) return null; List<String> found = new ArrayList<String>(input.length); List<String> unfound = new ArrayList<String>(input.length); for (int i = 0; i < input.length; i++) { if (StringHelper.find(input[i], pattern, literal)) { found.add(input[i]); } else { unfound.add(input[i]); } } String[][] output = new String[2][]; output[0] = found.toArray(new String[found.size()]); output[1] = unfound.toArray(new String[unfound.size()]); return output; } /** * Returns the list of items that match and did not match the given regular expression or literal string pattern. * * @param input The array of strings to be processed. * @param pattern The pattern to match against the given strings. * @param literal Whether the pattern is literal or a regular expression. * @return A pair of arrays, the first containing the strings that match the pattern, the second * contains the strings that do not match the pattern. */ public static String[][] match(String[] input, String pattern, boolean literal) { if (input == null) return null; List<String> matched = new ArrayList<String>(input.length); List<String> unmatched = new ArrayList<String>(input.length); for (int i = 0; i < input.length; i++) { if (StringHelper.match(input[i], pattern, literal)) { matched.add(input[i]); } else { unmatched.add(input[i]); } } String[][] output = new String[2][]; output[0] = matched.toArray(new String[0]); output[1] = unmatched.toArray(new String[0]); return output; } // --- <<IS-END-SHARED>> --- }