content: package act.data;
  
  /*-
   * #%L
   * ACT Framework
   * %%
   * Copyright (C) 2014 - 2017 ActFramework
   * %%
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   * #L%
   */
  
  import java.util.Map;
  
  // Disclaim: the code come from PlayFramework
  public class MapUtil {
  
      public static void mergeValueInMap(Map<String, String[]> map, String name, String value) {
          String[] newValues;
          String[] oldValues = map.get(name);
          if (oldValues == null) {
              newValues = new String[1];
              newValues[0] = value;
          } else {
              newValues = new String[oldValues.length + 1];
              System.arraycopy(oldValues, 0, newValues, 0, oldValues.length);
              newValues[oldValues.length] = value;
          }
          map.put(name, newValues);
      }
  
      public static void mergeValueInMap(Map<String, String[]> map, String name, String[] values) {
          for (String value : values) {
              mergeValueInMap(map, name, value);
          }
      }
  
      public static <K, V> Map<K, V> filterMap(Map<K, V> map, String keypattern) {
          try {
              @SuppressWarnings("unchecked")
              Map<K, V> filtered = map.getClass().newInstance();
              for (Map.Entry<K, V> entry : map.entrySet()) {
                  K key = entry.getKey();
                  if (key.toString().matches(keypattern)) {
                      filtered.put(key, entry.getValue());
                  }
              }
              return filtered;
          } catch (Exception iex) {
              return null;
          }
      }
  }
  