/* * LimeXMLSchemaRepository.java * * Created on April 12, 2001, 4:00 PM */ package com.limegroup.gnutella.xml; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Stores and provides access to various XML schemas that me might have. * Singleton class * @author asingla */ public class LimeXMLSchemaRepository { /** * Mapping from URI (string) to an instance of XMLSchema */ private Map /* Schema URI (String) ==> LimeXMLSchema */ _uriSchemaMap = new HashMap(); /** * An instance of this class */ private static LimeXMLSchemaRepository _instance = new LimeXMLSchemaRepository(); /** Creates new LimeXMLSchemaRepository */ private LimeXMLSchemaRepository() { initialize(); } /** * Initializes the internal data structures * @requires Should be called from Constructor only */ protected void initialize() { //get the schema files File[] schemaFiles = LimeXMLProperties.instance().getAllXMLSchemaFiles(); //if there are some files there,initialize from those files if(schemaFiles != null) { LimeXMLSchema limeXmlSchema; //create schema objects and put them in the _uriSchemaMap for(int i=0; i < schemaFiles.length; i++) { try { limeXmlSchema = new LimeXMLSchema(schemaFiles[i]); _uriSchemaMap.put(limeXmlSchema.getSchemaURI(),limeXmlSchema); } catch(IOException ioe) { //no problem }//end of try }//end of for }//end of if }//end of fn initialize /** * Returns an instance of this class. Adheres to Singleton design pattern. * So, only one instance of the class is created. */ public static LimeXMLSchemaRepository instance() { return _instance; } /** * Returns the schema corresponding to the given URI * @param uri The URI which identifies the schema to be returned. * @return The schema corresponding to the given uri. If no mapping * exists, returns null. */ public LimeXMLSchema getSchema(String uri) { synchronized(_uriSchemaMap) { return (LimeXMLSchema)_uriSchemaMap.get(uri); } } /** * Returns all availble schemas. */ public Collection getAvailableSchemas() { return Collections.unmodifiableCollection(_uriSchemaMap.values()); } /** * Returns the URIs scooresponding to the schemas that we have * @return the URIs scooresponding to the schemas that we have */ public String[] getAvailableSchemaURIs() { String[] schemaURIs; synchronized(_uriSchemaMap) { Set keySet = _uriSchemaMap.keySet(); schemaURIs = (String[])keySet.toArray(new String[0]); } Arrays.sort(schemaURIs); return schemaURIs; } }