/* * LimeXMLSchemaRepository.java * * Created on April 12, 2001, 4:00 PM */ package com.limegroup.gnutella.xml; import java.io.IOException; import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import com.google.inject.Inject; import com.google.inject.Singleton; /** * Stores and provides access to various XML schemas that me might have. * Singleton class. * * @author asingla */ @Singleton public class LimeXMLSchemaRepository { /** * Mapping from URI (string) to an instance of XMLSchema. */ private Map<String, LimeXMLSchema> _uriSchemaMap = new HashMap<String, LimeXMLSchema>(); /** Creates new LimeXMLSchemaRepository. */ @Inject LimeXMLSchemaRepository(LimeXMLProperties limeXMLProperties) { URL[] schemaUrls = limeXMLProperties.getAllXmlSchemaUrls(); // create schema objects and put them in the _uriSchemaMap for (int i = 0; i < schemaUrls.length; i++) { if(schemaUrls[i] != null) { try { LimeXMLSchema limeXmlSchema= new LimeXMLSchema(schemaUrls[i]); _uriSchemaMap.put(limeXmlSchema.getSchemaURI(), limeXmlSchema); } catch (IOException ioe) {} } } } /** * 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 _uriSchemaMap.get(uri); } } /** * Returns all available schemas. */ public Collection<LimeXMLSchema> getAvailableSchemas() { return Collections.unmodifiableCollection(_uriSchemaMap.values()); } /** * Returns the URIs corresponding to the schemas that we have. * * @return sorted array of URIs corresponding to the schemas that we have */ public String[] getAvailableSchemaURIs() { String[] schemaURIs; synchronized (_uriSchemaMap) { schemaURIs = _uriSchemaMap.keySet().toArray(new String[0]); } Arrays.sort(schemaURIs); return schemaURIs; } }