/* * 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.DigitizationRegistryCatalog; import java.io.PrintWriter; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.apache.commons.configuration.BaseConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationUtils; /** * Bibliographic catalog configuration. * * @author Jan Pokorsky */ public final class CatalogConfiguration { private static final Logger LOG = Logger.getLogger(CatalogConfiguration.class.getName()); public static final String PROPERTY_DEBUG = "debug"; public static final String PROPERTY_NAME = "name"; public static final String PROPERTY_USER = "user"; public static final String PROPERTY_PASSWD = "password"; public static final String PROPERTY_URL = "url"; public static final String PROPERTY_TYPE = "type"; /** The configuration property name to list field IDs. */ public static final String PROPERTY_FIELDS = "fields"; /** The configuration property prefix of field's properties. */ public static final String FIELD_PREFIX = "field"; private final String id; private final String prefix; private final Configuration properties; public CatalogConfiguration(String id, String prefix, Configuration properties) { this.id = id; this.properties = properties; this.prefix = prefix; } public String getId() { return id; } public boolean getDebug() { return properties.getBoolean(PROPERTY_DEBUG, false); } public String getName() { return properties.getString(PROPERTY_NAME); } public String getType() { return properties.getString(PROPERTY_TYPE); } public String getUrl() { return fixUrlProtocol(properties.getString(PROPERTY_URL)); } public List<CatalogQueryField> getQueryFields() { String[] fieldIds = properties.getStringArray(PROPERTY_FIELDS); if (fieldIds.length == 0) { return getDefaultQueryFields(); } ArrayList<CatalogQueryField> fields = new ArrayList<CatalogQueryField>(fieldIds.length); for (String fieldId : fieldIds) { CatalogQueryField field = new CatalogQueryField(fieldId, properties.subset(FIELD_PREFIX + '.' + fieldId)); fields.add(field); } return fields; } /** * Fills fields for existing configurations to ensure backward compatibility. */ private List<CatalogQueryField> getDefaultQueryFields() { String type = getType(); ArrayList<CatalogQueryField> fields = new ArrayList<CatalogQueryField>(); if (AlephXServer.TYPE.equals(type)) { BaseConfiguration emptyConfiguration = new BaseConfiguration(); fields.add(new CatalogQueryField("barcode", emptyConfiguration)); fields.add(new CatalogQueryField("ccnb", emptyConfiguration)); fields.add(new CatalogQueryField("isbn", emptyConfiguration)); fields.add(new CatalogQueryField("issn", emptyConfiguration)); fields.add(new CatalogQueryField("signature", emptyConfiguration)); } else if (DigitizationRegistryCatalog.TYPE.equals(type)) { BaseConfiguration emptyConfiguration = new BaseConfiguration(); fields.add(new CatalogQueryField("barcode", emptyConfiguration)); fields.add(new CatalogQueryField("ccnb", emptyConfiguration)); fields.add(new CatalogQueryField("isbn", emptyConfiguration)); fields.add(new CatalogQueryField("issn", emptyConfiguration)); fields.add(new CatalogQueryField("signature", emptyConfiguration)); fields.add(new CatalogQueryField("title", emptyConfiguration)); } return fields; } public Configuration getProperties() { return properties; } public String getProperty(String name) { return properties.getString(name); } public String getProperty(String name, String defaultValue) { return properties.getString(name, defaultValue); } @Override public String toString() { StringWriter dump = new StringWriter(); PrintWriter printWriter = new PrintWriter(dump); ConfigurationUtils.dump(properties, printWriter); printWriter.flush(); return "CatalogConfiguration{id=" + id + ", prefix=" + prefix + ", properties:" + dump + '}'; } /** Adds missing protocol that is required by URL/URI classes. */ private static String fixUrlProtocol(String url) { if (url == null) { return url; } if (url.contains("://")) { return url; } else { return "http://" + url; } } }