package com.mxgraph.io.vdx;
import java.util.HashMap;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* This is a singleton class that contains a map with the master elements of the
* document. The master elements are wrapped in instances of mxMasterElement and
* may to be access by ID.
*/
public class mxMastersManager
{
/**
* Map with the master elements of the document.<br/>
* The key is the master's ID.
*/
private HashMap<String, mxMasterElement> masterElementsMap = new HashMap<String, mxMasterElement>();
private static mxMastersManager masterManager = null;
/**
* Singleton pattern requires private constructor.
*/
private mxMastersManager()
{
}
/**
* Returns the instance of mxMasterManager.
* If no instance has been created until the moment, a new instance is
* returned.
* This method don't load the map.
* @return An instance of mxMasterManager.
*/
public static mxMastersManager getInstance()
{
if (masterManager == null)
{
masterManager = new mxMastersManager();
}
return masterManager;
}
/**
* Load the map with the master elements in the document.<br/>
* The masters are wrapped for instances of mxMasterElement.
* @param doc Document with the masters.
*/
public void initialise(Document doc)
{
NodeList vdxMasters = doc.getElementsByTagName(mxVdxConstants.MASTERS);
if (vdxMasters.getLength() > 0)
{
Element masters = (Element) vdxMasters.item(0);
NodeList masterList = masters
.getElementsByTagName(mxVdxConstants.MASTER);
int masterLength = masterList.getLength();
for (int i = 0; i < masterLength; i++)
{
Element master = (Element) masterList.item(i);
String masterId = master.getAttribute(mxVdxConstants.ID);
mxMasterElement masterElement = new mxMasterElement(master);
masterElementsMap.put(masterId, masterElement);
}
}
}
/**
* Returns the mxMasterElement's HashMap
* @return Map of master elements.
*/
public HashMap<String, mxMasterElement> getMasterElementsMap()
{
return masterElementsMap;
}
/**
* Returns the wrapper of the master element with id = 'id'
* @param id Master element's ID.
* @return Master element with id = 'id' wrapped in a instance of mxMasterElement
*/
public mxMasterElement getMaster(String id)
{
return masterElementsMap.get(id);
}
}