All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.xmlcml.cml.tools.Catalog Maven / Gradle / Ivy

/**
 *    Copyright 2011 Peter Murray-Rust et. al.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package org.xmlcml.cml.tools;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import nu.xom.Document;
import nu.xom.Element;

import org.xmlcml.cml.base.CMLBuilder;
import org.xmlcml.cml.base.CMLConstants;
import org.xmlcml.cml.base.CMLNamespace;
import org.xmlcml.cml.base.CMLUtil;
import org.xmlcml.cml.element.CMLMap;
import org.xmlcml.cml.map.Indexable;
import org.xmlcml.cml.map.IndexableByIdList;
import org.xmlcml.cml.map.IndexableByIdListManager;

/**
 * simple catalog for CML. 
 * links namespaces to files or resources (either file or directory)
 * 
 * 
 *    
 *       
 *       
 *       
 *       
 *    
 *    ]]>
 * 
* * * @author Peter Murray-Rust * @version 5.0 * @deprecated use ResourceManager instead */ public class Catalog implements CatalogListChild, CMLConstants { /** standard name of catalog files. */ public final static String CATALOG_XML = "catalog.xml"; /** molecule */ public final static String DICTIONARY_CATALOG = C_A+"dictionaryCatalog"; /** dewisott */ public final static String FRAGMENT_CATALOG = C_A+"fragmentCatalog"; /** dewisott */ public final static String MOLECULE_CATALOG = C_A+"moleculeCatalog"; // this is the direct content of the catalog.xml file private CMLMap cmlMap; private Map indexableListMap; private URL url; /** * normal constructor. * @param catalogUrl */ public Catalog(URL catalogUrl) { this.url = catalogUrl; InputStream in = null; Document document = null; try { in = catalogUrl.openStream(); document = new CMLBuilder().build(in); } catch (Exception e) { System.err.println(catalogUrl); throw new RuntimeException("error in "+catalogUrl, e); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } Element root = document.getRootElement(); if (root instanceof CMLMap) { cmlMap = (CMLMap) root; } else { throw new RuntimeException("BAD root element: " + root.getLocalName()); } } /** constructor from file. * convenience method * @param file * @throws IOException */ public Catalog(File file) throws IOException { this(file.toURI().toURL()); } /** * get catalog as map. * * @return null if not a map */ public CMLMap getCmlMap() { return cmlMap; } /** get map of indexables under namespace. * also updates the index * @param namespace * @param type * @return map indexed by id */ public IndexableByIdList getIndexableList( CMLNamespace namespace, IndexableByIdList.Type type) { if (cmlMap == null) { throw new RuntimeException("cannot get cmlMap"); } String namespaceURI = namespace.getNamespaceURI(); String to = cmlMap.getToRef(namespaceURI); if (to == null) { throw new RuntimeException("Cannot find catalog entry for: " + namespace.getNamespaceURI()); } IndexableByIdList indexableList = getIndexableList(to, type.classx); indexableList.updateIndex(); return indexableList; } private IndexableByIdList getIndexableList(String to, Class indexableListClass) { if (indexableListMap == null) { indexableListMap = new HashMap(); } IndexableByIdList indexableList = indexableListMap.get(to); if (to != null) { URL toUrl = null; try { // LOG.debug("To URL is ctx: "+ url +" + "+ to); toUrl = new URL(this.getURL(), to); } catch (MalformedURLException e1) { throw new RuntimeException("Bad catalogue reference: " + to, e1); } indexableList = IndexableByIdListManager.createFrom(toUrl, indexableListClass); } return indexableList; } /** get referenced indexable * @param ref (local "foo", or namespaced ("f:bar")) * @param namespace * @param type * @return the indexableor null */ public Indexable getIndexable ( String ref, CMLNamespace namespace, IndexableByIdList.Type type) { IndexableByIdList indexableList = this.getIndexableList(namespace, type); if (indexableList == null) { throw new RuntimeException("Cannot find indexableList "+type+" for: "+namespace); } String localName = CMLUtil.getLocalName(ref); if (localName.length() == 0) { throw new RuntimeException( "Cannot have empty local name for mol ref"); } return indexableList.getIndexableById(localName); } /** get URL for catalogMap. * @return the URL */ public URL getURL() { return url; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy