001 /*
002 * The contents of this file are subject to the Mozilla Public
003 * License Version 1.1 (the "License"); you may not use this file
004 * except in compliance with the License. You may obtain a copy of
005 * the License at http://www.mozilla.org/MPL/
006 *
007 * Software distributed under the License is distributed on an "AS
008 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
009 * implied. See the License for the specific language governing
010 * rights and limitations under the License.
011 *
012 * The Original Code is Knowtator.
013 *
014 * The Initial Developer of the Original Code is University of Colorado.
015 * Copyright (C) 2005 - 2008. All Rights Reserved.
016 *
017 * Knowtator was developed by the Center for Computational Pharmacology
018 * (http://compbio.uchcs.edu) at the University of Colorado Health
019 * Sciences Center School of Medicine with support from the National
020 * Library of Medicine.
021 *
022 * Current information about Knowtator can be obtained at
023 * http://knowtator.sourceforge.net/
024 *
025 * Contributor(s):
026 * Philip V. Ogren <philip@ogren.info> (Original Author)
027 */
028 package edu.uchsc.ccp.iaa.matcher;
029
030 import java.util.HashSet;
031 import java.util.Map;
032 import java.util.Set;
033
034 public class ClassHierarchyImpl implements ClassHierarchy {
035
036 Map<String, Set<String>> subclassMap;
037
038 public ClassHierarchyImpl(Map<String, Set<String>> subclassMap) {
039 this.subclassMap = subclassMap;
040 }
041
042 public Set<String> getSubclasses(String className) {
043 Set<String> returnValues = new HashSet<String>();
044 returnValues.add(className);
045 collectSubclasses(className, returnValues);
046 return returnValues;
047 }
048
049 private void collectSubclasses(String className, Set<String> subclassNames) {
050 Set<String> subNames = subclassMap.get(className);
051 if (subNames != null) {
052 for (String subName : subNames) {
053 if (!subclassNames.contains(subName)) {
054 subclassNames.add(subName);
055 collectSubclasses(subName, subclassNames);
056 }
057 }
058 }
059 }
060
061 }