/* See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * Esri Inc. licenses this file to You 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 com.esri.gpt.catalog.context; import java.util.logging.Level; import com.esri.gpt.catalog.arcims.ImsCatalog; import com.esri.gpt.catalog.discovery.DiscoveryQueryAdapter; import com.esri.gpt.catalog.lucene.LuceneConfig; import com.esri.gpt.catalog.schema.SchemaFactory; import com.esri.gpt.catalog.schema.Schemas; import com.esri.gpt.catalog.search.SearchConfig; import com.esri.gpt.control.georss.DcatSchemas; import com.esri.gpt.control.search.browse.TocCollection; import com.esri.gpt.control.search.browse.TocFactory; import com.esri.gpt.framework.collection.StringAttributeMap; import com.esri.gpt.framework.context.Configuration; import com.esri.gpt.framework.context.ConfigurationException; import com.esri.gpt.framework.context.RequestContext; import com.esri.gpt.framework.http.HttpClientRequest; import com.esri.gpt.framework.util.LogUtil; import com.esri.gpt.framework.util.Val; /** * Catalog configuration information. */ public class CatalogConfiguration extends Configuration { // class variables ============================================================= // instance variables ========================================================== private Schemas _configuredSchemas = null; private ImsCatalog _imsCatalog; private LuceneConfig _luceneConfig = new LuceneConfig(); private String _mvsTablePrefix = "MVS_"; private StringAttributeMap _parameters = new StringAttributeMap(); private SearchConfig _searchConfig; private String _tablePrefix = "GPT_"; private TocCollection _tocCollection = null; private DcatSchemas _dcatSchemas = new DcatSchemas(); private int connectionTimeOut = HttpClientRequest.DEFAULT_CONNECTION_TIMEOUT; private int responseTimeOut = HttpClientRequest.DEFAULT_RESPONSE_TIMEOUT; // constructors ================================================================ /** Default constructor. */ public CatalogConfiguration() { super(); setArcImsCatalog(new ImsCatalog()); setSearchConfig(new SearchConfig()); getConfiguredTocs(); } // properties ================================================================== /** * Gets the configured ArcIMS catalog. * @return the configured catalog */ public ImsCatalog getArcImsCatalog() { return _imsCatalog; } /** * Sets the configured ArcIMS catalog. * @param catalog the configured catalog */ private void setArcImsCatalog(ImsCatalog catalog) { _imsCatalog = catalog; } /** * Gets the configured schemas. Prevents queuing by not using synchronized and * only calls the getConfiguredSchemasHelper when necessary * * @return the configured schemas */ public Schemas getConfiguredSchemas() { if (_configuredSchemas != null) { return _configuredSchemas; } return getConfiguredSchemasHelper(); } /** * Loads the configured schemas * * @return the configured schemas */ private synchronized Schemas getConfiguredSchemasHelper() { if (_configuredSchemas != null) { return _configuredSchemas; } else { Schemas schemas; try { SchemaFactory factory = new SchemaFactory(); schemas = factory.loadSchemas(); String cacheOpt = Val.chkStr(this.getParameters().getValue("cacheSchemaDefinitions")); if (!cacheOpt.equalsIgnoreCase("false")) { _configuredSchemas = schemas; } return schemas; } catch (Exception e) { e.printStackTrace(System.err); LogUtil.getLogger().log(Level.SEVERE, "Unable to configure schemas:", e); return new Schemas(); } } } /** * Loads the configured tocs * * @return the configured tocs */ public synchronized TocCollection getConfiguredTocs() { if (_tocCollection != null) { return _tocCollection; } else { TocCollection tocs; try { TocFactory factory = new TocFactory(); tocs = factory.loadTocConfig(); String cacheOpt = Val.chkStr(this.getParameters().getValue("cacheTocDefinitions")); if (!cacheOpt.equalsIgnoreCase("false")) { _tocCollection = tocs; } return tocs; } catch (Exception e) { e.printStackTrace(System.err); LogUtil.getLogger().log(Level.SEVERE, "Unable to load toc configuration:", e); return new TocCollection(); } } } /** * Gets the harvesting history table name. * @return the harvesting history table name */ public String getHarvestingHistoryTableName() { return getTablePrefix() + "HARVESTING_HISTORY"; } /** * Gets pending harvesting jobs table name. * This is a table holding jobs definition to be processed or being processed * at the time. * @return pending harvesting jobs table name */ public String getHarvestingJobsPendingTableName() { return getTablePrefix() + "HARVESTING_JOBS_PENDING"; } /** * Gets completed harvesting jobs table name. * This is a table holding historical data about already processed jobs. * @return completed harvesting jobs table name */ public String getHarvestingJobsCompletedTableName() { return getTablePrefix() + "HARVESTING_JOBS_COMPLETED"; } /** * Gets the Lucene configuration. * @return the Lucene configuration */ public LuceneConfig getLuceneConfig() { return _luceneConfig; } /** * Gets resource table name. * @return resource table name */ public String getResourceTableName() { return getTablePrefix() + "RESOURCE"; } /** * Gets resource data table name. * @return resource data table name */ public String getResourceDataTableName() { return getTablePrefix() + "RESOURCE_DATA"; } /** * Gets the prefix used for MVS table names. * @return the prefix */ public String getMvsTablePrefix() { return _mvsTablePrefix; } /** * Sets the prefix used for MVS table names. * @param prefix the prefix */ public void setMvsTablePrefix(String prefix) { _mvsTablePrefix = Val.chkStr(prefix); if (_tablePrefix.length() == 0) { _mvsTablePrefix = "MVS_"; } } /** * Gets the map generally configured paramaters. * @return the configured parameters (from <parameter> tag) */ public StringAttributeMap getParameters() { return _parameters; } //StringAttributeMap /** * Gets the search config. * @return the search config (possibly null) */ public SearchConfig getSearchConfig() { return _searchConfig; } /** * Sets the search config. * @param searchConfig the new search config */ public void setSearchConfig(SearchConfig searchConfig) { this._searchConfig = searchConfig; } /** * Gets the name of the saved search table. * @return the save search table name */ public String getSearchTableName() { return getTablePrefix() + "SEARCH"; } /** * Gets the prefix used for table names. * @return the prefix */ public String getTablePrefix() { return _tablePrefix; } /** * Sets the prefix used for table names. * @param prefix the prefix */ public void setTablePrefix(String prefix) { _tablePrefix = Val.chkStr(prefix); if (_tablePrefix.length() == 0) { _tablePrefix = "GPT_"; } } /** * Gets the name of the user table. * @return the user table name */ public String getUserTableName() { return getTablePrefix() + "USER"; } /** * Gets the connection time out in milliseconds. * * @return the connection time out (always >= 0) */ public int getConnectionTimeOutMs() { if(connectionTimeOut < 0) { connectionTimeOut = 0; } return connectionTimeOut; } /** * Sets the connection time out in milliseconds. * * @param connectionTimeOut the new connection time out */ public void setConnectionTimeMs(int connectionTimeOut) { this.connectionTimeOut = connectionTimeOut; } /** * Gets the response time out in milliseconds * * @return the response time out (always >= 0) */ public int getResponseTimeOutMs() { if(responseTimeOut < 0) { responseTimeOut = 0; } return responseTimeOut; } /** * Sets the response time out in milliseconds. * * @param responseTimeOut the new response time out */ public void setResponseTimeOutMs(int responseTimeOut) { this.responseTimeOut = responseTimeOut; } /** * Gets the dcat schemas * @return the _dcatSchemas */ public DcatSchemas getDcatSchemas() { return _dcatSchemas; } // methods ===================================================================== /** * Makes a catalog index adapter. * @param context the request context * @return the catalog index adapter (null if none) */ public CatalogIndexAdapter makeCatalogIndexAdapter(RequestContext context) { if (this.getLuceneConfig().getIndexLocation().length() > 0) { return new com.esri.gpt.catalog.lucene.LuceneIndexAdapter(context); } else { return null; } } /** * Instantiates a new discovery query adapter. * <p/> * By default, a new instance of * com.esri.gpt.catalog.lucene.LuceneQueryAdapter is returned. * <p/> * This can be overridden by the configuration parameter: * /gptConfig/catalog/parameter@key="discoveryQueryAdapter" * @return the discovery query adapter */ public DiscoveryQueryAdapter newDiscoveryQueryAdapter() { String className = Val.chkStr(getParameters().getValue("discoveryQueryAdapter")); if (className.length() == 0) { className = com.esri.gpt.catalog.lucene.LuceneQueryAdapter.class.getName(); } try { Class<?> cls = Class.forName(className); Object obj = cls.newInstance(); if (obj instanceof DiscoveryQueryAdapter) { return (DiscoveryQueryAdapter)obj; } else { String sMsg = "The configured discoveryQueryAdapter parameter is invalid: "+className; throw new ConfigurationException(sMsg); } } catch (ConfigurationException t) { throw t; } catch (Throwable t) { String sMsg = "Error instantiating discovery query adapter: "+className; throw new ConfigurationException(sMsg,t); } } /** * Returns the string representation of the object. * @return the string */ @Override public String toString() { StringBuffer sb = new StringBuffer(getClass().getName()).append(" (\n"); sb.append(" gptTablePrefix=").append(getTablePrefix()).append("\n"); sb.append(" mvsTablePrefix=").append(getMvsTablePrefix()).append("\n"); sb.append(" userTableName=").append(getUserTableName()).append("\n"); sb.append(" searchTableName=").append(getSearchTableName()).append("\n"); sb.append(" resourceTableName=").append(getResourceTableName()).append("\n"); sb.append(" resourceDataTableName=").append(getResourceDataTableName()).append("\n"); sb.append(" harvestingHistoryTableName=").append( getHarvestingHistoryTableName()).append("\n"); sb.append(" harvestingJobsPendingTableName=").append( getHarvestingJobsPendingTableName()).append("\n"); sb.append(" harvestingJobsCompletedTableName=").append( getHarvestingJobsCompletedTableName()).append("\n"); sb.append(getArcImsCatalog()).append("\n"); sb.append(this.getSearchConfig()).append("\n"); sb.append(this.getLuceneConfig()).append("\n"); sb.append(") ===== end ").append(getClass().getName()); return sb.toString(); } }