/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright 2008 - 2009 Pentaho Corporation. All rights reserved. */ package org.pentaho.pac.client.common.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; // NOTE: i think apache commons collections has one of these, but a better implementation // TODO get rid of IDoubleKeyMap interface public class DoubleKeyMap<Key0Type, Key1Type, DataType> implements IDoubleKeyMap<Key0Type, Key1Type, DataType > { private Map<Key0Type, Map<Key1Type,DataType>> doubleKeyMap = new HashMap<Key0Type, Map<Key1Type,DataType>>(); // TODO, sbarkdull, make the implementaton generic public DoubleKeyMap() { } public void remove( Key0Type key0, Key1Type key1 ) { Map<Key1Type, DataType> innerMap = doubleKeyMap.get( key0 ); if ( null != innerMap ) { innerMap.remove( key1 ); } } public DataType get( Key0Type key0, Key1Type key1 ) { Map<Key1Type, DataType> innerMap = doubleKeyMap.get( key0 ); if ( null != innerMap ) { DataType d = innerMap.get( key1 ); return d; } return null; } public void put( Key0Type key0, Key1Type key1, DataType data ) { Map<Key1Type, DataType> innerMap = doubleKeyMap.get( key0 ); if ( null == innerMap ) { innerMap = new HashMap<Key1Type, DataType>(); doubleKeyMap.put( key0, innerMap ); } innerMap.put( key1, data ); } public Set<Key0Type> getKeySetOutter() { return doubleKeyMap.keySet(); } public Set<Key1Type> getKeySetInner( Key1Type outterKey ) { return doubleKeyMap.get( outterKey ).keySet(); } public List<DataType> getList() { List<DataType> l = new ArrayList<DataType>(); for ( Map.Entry<Key0Type, Map<Key1Type,DataType>> doubleKeyEntry : doubleKeyMap.entrySet() ) { Map<Key1Type, DataType> innerMap = doubleKeyEntry.getValue(); for ( Map.Entry<Key1Type, DataType> innerEntry : innerMap.entrySet() ) { l.add( innerEntry.getValue() ); } } return l; } }