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 stylesheets elements of the
* document. The stylesheets elements are wrapped in instances of mxStyleSheet and
* may to be access by ID.
*/
public class mxStyleSheetManager
{
/**
* Map with the stylesheets of the document.<br/>
* The key is the stylesheet's ID.
*/
private HashMap<String, mxStyleSheet> styleSheetMap = new HashMap<String, mxStyleSheet>();
private static mxStyleSheetManager styleSheetManager = null;
/**
* Singleton pattern requires private constructor.
*/
private mxStyleSheetManager()
{
}
/**
* Returns the instance of mxStyleSheetManager.<br/>
* If no instance has been created until the moment, a new instance is
* returned.<br/>
* This method don't load the map.
* @return An instance of mxStyleSheetManager.
*/
public static mxStyleSheetManager getInstance()
{
if (styleSheetManager == null)
{
styleSheetManager = new mxStyleSheetManager();
}
return styleSheetManager;
}
/**
* Load the map with the stylesheets elements in the document.<br/>
* The masters are wrapped for instances of mxStyleSheet.
* @param doc Document with the stylesheets.
*/
public void initialise(Document doc)
{
NodeList vdxSheets = doc
.getElementsByTagName(mxVdxConstants.STYLE_SHEETS);
if (vdxSheets.getLength() > 0)
{
Element sheets = (Element) vdxSheets.item(0);
NodeList sheetList = sheets
.getElementsByTagName(mxVdxConstants.STYLE_SHEET);
int sheetLength = sheetList.getLength();
for (int i = 0; i < sheetLength; i++)
{
Element sheet = (Element) sheetList.item(i);
String sheetId = sheet.getAttribute(mxVdxConstants.ID);
mxStyleSheet sheetElement = new mxStyleSheet(sheet);
styleSheetMap.put(sheetId, sheetElement);
}
}
}
/**
* Returns the mxStyleSheet HashMap
* @return Map of stylesheet elements
*/
public HashMap<String, mxStyleSheet> getStyleSheetsMap()
{
return styleSheetMap;
}
/**
* Returns the wrapper of the stylesheet element with id indicated by 'id'
* @param id StyleSheet's ID.
* @return StyleSheet element with id = 'id' wrapped in a instance of mxStyleSheet.
*/
public mxStyleSheet getSheet(String id)
{
return styleSheetMap.get(id);
}
}