/* * Copyright (C) 2012 Jan Pokorsky * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package cz.cas.lib.proarc.common.config; import cz.cas.lib.proarc.common.catalog.AlephXServer; import cz.cas.lib.proarc.common.catalog.BibliographicCatalog; import cz.cas.lib.proarc.common.catalog.DigitizationRegistryCatalog; import cz.cas.lib.proarc.common.catalog.OaiCatalog; import cz.cas.lib.proarc.common.catalog.Z3950Catalog; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.configuration.Configuration; /** * Manages bibliographic catalog configurations. * * @author Jan Pokorsky */ public final class Catalogs { private static final Logger LOG = Logger.getLogger(Catalogs.class.getName()); static final String CATALOG_PREFIX = "catalog"; static final String PROPERTY_CATALOGS = "catalogs"; private final Configuration config; public Catalogs(Configuration config) { this.config = config; } /** * Gets configuration of all registered catalogs. * @return list of configurations */ public List<CatalogConfiguration> getConfigurations() { ArrayList<CatalogConfiguration> catalogs = new ArrayList<CatalogConfiguration>(); for (String catalogId : config.getStringArray(PROPERTY_CATALOGS)) { CatalogConfiguration catalog = readConfiguration(catalogId); if (catalog != null) { catalogs.add(catalog); } } return catalogs; } /** * Finds particular catalog. * @param id catalog id * @return catalog or {@code null} */ public BibliographicCatalog findCatalog(String id) { CatalogConfiguration props = findConfiguration(id); if (props == null) { return null; } BibliographicCatalog catalog = DigitizationRegistryCatalog.get(props); if (catalog != null) { return catalog; } catalog = AlephXServer.get(props); if (catalog != null) { return catalog; } catalog = OaiCatalog.get(props); if (catalog != null) { return catalog; } catalog = Z3950Catalog.get(props); return catalog; } /** * Finds particular catalog configuration. * @param id catalog id * @return catalog configuration or {@code null} */ public CatalogConfiguration findConfiguration(String id) { for (CatalogConfiguration catalog : getConfigurations()) { if (catalog.getId().equals(id)) { return catalog; } } return null; } private CatalogConfiguration readConfiguration(String catalogId) { String catalogPrefix = CATALOG_PREFIX + '.' + catalogId; Configuration catalogConfig = config.subset(catalogPrefix); CatalogConfiguration catalog = new CatalogConfiguration(catalogId, catalogPrefix, catalogConfig); if (!isValidProperty(catalogPrefix, CatalogConfiguration.PROPERTY_URL, catalog.getUrl())) { return null; } isValidProperty(catalogPrefix, CatalogConfiguration.PROPERTY_NAME, catalog.getName()); return catalog; } private static boolean isValidProperty(String prefix, String name, String value) { if (value == null || value.isEmpty()) { LOG.log(Level.WARNING, "Missing {0}.{1} property!", new Object[]{prefix, name}); return false; } return true; } }