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}