001package org.biopax.paxtools.query.model; 002 003import java.util.HashMap; 004import java.util.Map; 005 006/** 007 * Adapter class for a graph that is queried. 008 * 009 * @author Ozgun Babur 010 */ 011public abstract class AbstractGraph implements Graph 012{ 013 /** 014 * Objects are stored in this map. getKey method of objects is used for generating the key. 015 */ 016 protected Map<String, GraphObject> objectMap; 017 018 /** 019 * Empty constructor that initializes the object map. 020 */ 021 protected AbstractGraph() 022 { 023 this.objectMap = new HashMap<String, GraphObject>(); 024 } 025 026 /** 027 * Gets the related wrapper for the given object, creates the wrapper if not created before. 028 * @param obj Object to wrap 029 * @return wrapper 030 */ 031 public GraphObject getGraphObject(Object obj) 032 { 033 String key = getKey(obj); 034 GraphObject go = objectMap.get(key); 035 036// if (obj instanceof Conversion && go == null) 037// { 038// go = objectMap.get(key + ConversionWrapper.LEFT_TO_RIGHT); 039// if (go == null) 040// go = objectMap.get(key + ConversionWrapper.RIGHT_TO_LEFT); 041// } 042 043 if (go == null) 044 { 045 Node node = wrap(obj); 046 047 if (node != null) 048 { 049 objectMap.put(key, node); 050 node.init(); 051 } 052 } 053 054 return objectMap.get(key); 055 } 056 057 /** 058 * Gets the wrapper object with its id (key). 059 * @param id Whatever getKey method return for the wrapped object. 060 * @return Wrapper 061 */ 062 public GraphObject getGraphObject(String id) 063 { 064 return objectMap.get(id); 065 } 066 067 /** 068 * @return The object map 069 */ 070 public Map<String, GraphObject> getObjectMap() 071 { 072 return objectMap; 073 } 074 075 /** 076 * Clears memory of all wrapper in the object map. 077 */ 078 public void clear() 079 { 080 for (GraphObject go : objectMap.values()) 081 { 082 go.clear(); 083 } 084 } 085 086 /** 087 * @param wrapped Object to wrap 088 * @return A key for the object to map it to its wrapper 089 */ 090 public abstract String getKey(Object wrapped); 091 092 /** 093 * Creates the wrapper for the given object. 094 * @param obj Object to wrap 095 * @return The wrapper 096 */ 097 public abstract Node wrap(Object obj); 098}