001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 */ 018 019 package org.apache.commons.exec.util; 020 021 import java.util.Map; 022 import java.util.HashMap; 023 import java.util.Iterator; 024 025 /** 026 * Helper classes to manipulate maps to pass substition map to the 027 * CommandLine. This class is not part of the public API and 028 * could change without warning. 029 * 030 * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a> 031 */ 032 public class MapUtils 033 { 034 /** 035 * Clones a map. 036 * 037 * @param source the source map 038 * @return the clone of the source map 039 */ 040 public static Map copy(Map source) { 041 042 if(source == null) { 043 return null; 044 } 045 046 Map result = new HashMap(); 047 result.putAll(source); 048 return result; 049 } 050 051 /** 052 * Clones a map and prefixes the keys in the clone, e.g. 053 * for mapping "JAVA_HOME" to "env.JAVA_HOME" to simulate 054 * the behaviour of ANT. 055 * 056 * @param source the source map 057 * @param prefix the prefix used for all names 058 * @return the clone of the source map 059 */ 060 public static Map prefix(Map source, String prefix) { 061 062 if(source == null) { 063 return null; 064 } 065 066 Map result = new HashMap(); 067 068 Iterator iter = source.entrySet().iterator(); 069 070 while(iter.hasNext()) { 071 Map.Entry entry = (Map.Entry) iter.next(); 072 Object key = entry.getKey(); 073 Object value = entry.getValue(); 074 result.put(prefix + '.' + key.toString(), value); 075 } 076 077 return result; 078 } 079 080 /** 081 * Clones the lhs map and add all things from the 082 * rhs map. 083 * 084 * @param lhs the first map 085 * @param rhs the second map 086 * @return the merged map 087 */ 088 public static Map merge(Map lhs, Map rhs) { 089 090 Map result = null; 091 092 if((lhs == null) || (lhs.size() == 0)) { 093 result = copy(rhs); 094 } 095 else if((rhs == null) || (rhs.size() == 0)) { 096 result = copy(lhs); 097 } 098 else { 099 result = copy(lhs); 100 result.putAll(rhs); 101 } 102 103 return result; 104 } 105 }