/* 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.framework.context; import com.esri.gpt.catalog.context.CatalogConfiguration; import com.esri.gpt.control.download.DownloadConfiguration; import com.esri.gpt.control.webharvest.engine.HarvesterConfiguration; import com.esri.gpt.control.webharvest.protocol.ProtocolFactories; import com.esri.gpt.framework.ArcGIS.InteractiveMap; import com.esri.gpt.framework.mail.MailConfiguration; import com.esri.gpt.framework.scheduler.ThreadSchedulerConfiguration; import com.esri.gpt.framework.security.identity.IdentityAdapter; import com.esri.gpt.framework.security.identity.IdentityConfiguration; import com.esri.gpt.framework.security.identity.UnconfiguredIdentityAdapter; import com.esri.gpt.framework.sql.DatabaseReferences; import com.esri.gpt.framework.util.LogUtil; import com.esri.gpt.framework.util.Val; import com.esri.gpt.framework.security.metadata.MetadataAccessPolicy; import java.util.logging.Level; /** * Represents the primary configuration for an application. * <p> * This configuration is scoped at the application level. Writes * should occur during initial loading only. Writing during normal request * execution will affect all threads, it's not safe. */ public class ApplicationConfiguration extends Configuration { // class variables ============================================================= // instance variables ========================================================== private CatalogConfiguration _catalogConfiguration; private DatabaseReferences _databaseReferences; private IdentityConfiguration _identityConfiguration; private InteractiveMap _interactiveMap = new InteractiveMap(); private MailConfiguration _mailConfiguration = new MailConfiguration(); private ThreadSchedulerConfiguration _threadSchedulerConfiguration; private DownloadConfiguration _downloadDataConfiguration; private MetadataAccessPolicy _metadataAccessPolicy; private String _version = ""; private HarvesterConfiguration _harvesterConfiguration = new HarvesterConfiguration(); private ProtocolFactories _protocolFactories = new ProtocolFactories(); // constructors ================================================================ /** Default constructor. */ public ApplicationConfiguration() { super(); setDatabaseReferences(new DatabaseReferences()); setIdentityConfiguration(new IdentityConfiguration()); setCatalogConfiguration(new CatalogConfiguration()); setMailConfiguration(new MailConfiguration()); setThreadSchedulerConfiguration(new ThreadSchedulerConfiguration()); setDownloadDataConfiguration(new DownloadConfiguration()); setMetadataAccessPolicy(new MetadataAccessPolicy()); } // properties ================================================================== /** * Gets the metadata access level configuration associated with this application. * @return the catalog configuration */ public MetadataAccessPolicy getMetadataAccessPolicy() { return _metadataAccessPolicy; } /** * Sets the metadata access level configuration associated with this application. * @param metadataAccessPolicy access policy */ public void setMetadataAccessPolicy( MetadataAccessPolicy metadataAccessPolicy) { this._metadataAccessPolicy = metadataAccessPolicy; } /** * Gets the metadata catalog configuration associated with this application. * @return the catalog configuration */ public CatalogConfiguration getCatalogConfiguration() { return _catalogConfiguration; } /** * Sets the metadata catalog configuration associated with this application. * @param configuration the catalog configuration */ private void setCatalogConfiguration(CatalogConfiguration configuration) { _catalogConfiguration = configuration; if (_catalogConfiguration == null) { _catalogConfiguration = new CatalogConfiguration(); } } /** * Gets the database references associated with this application. * @return the database references */ public DatabaseReferences getDatabaseReferences() { return _databaseReferences; } /** * Sets the database references associated with this application. * @param references the database references */ private void setDatabaseReferences(DatabaseReferences references) { _databaseReferences = references; if (_databaseReferences == null) { _databaseReferences = new DatabaseReferences(); } } /** * Gets the identity configuration associated with this application. * @return the identity configuration */ public IdentityConfiguration getIdentityConfiguration() { return _identityConfiguration; } /** * Sets the identity configuration associated with this application. * @param configuration the identity configuration */ private void setIdentityConfiguration(IdentityConfiguration configuration) { _identityConfiguration = configuration; if (_identityConfiguration == null) { _identityConfiguration = new IdentityConfiguration(); } } /** * Gets the interactive map configuration (for ArcGIS Server Javascript API). * @return the interactive map configuration */ public InteractiveMap getInteractiveMap() { return _interactiveMap; } /** * Gets the mail configuration associated with this application. * @return the mail configuration */ public MailConfiguration getMailConfiguration() { return _mailConfiguration; } /** * Sets the mail configuration associated with this application. * @param configuration the mail configuration */ private void setMailConfiguration(MailConfiguration configuration) { _mailConfiguration = configuration; if (_mailConfiguration == null) { _mailConfiguration = new MailConfiguration(); } } /** * Gets thread scheduler configuration. * @return thread scheduler configuration */ public ThreadSchedulerConfiguration getThreadSchedulerConfiguration() { return _threadSchedulerConfiguration; } /** * Sets thread scheduler configuration. * @param configuration thread scheduler configuration */ private void setThreadSchedulerConfiguration( ThreadSchedulerConfiguration configuration) { _threadSchedulerConfiguration = configuration; if (_threadSchedulerConfiguration == null) { _threadSchedulerConfiguration = new ThreadSchedulerConfiguration(); } } /** * Gets data download configuration. * @return data download configuration */ public DownloadConfiguration getDownloadDataConfiguration() { return _downloadDataConfiguration; } /** * Sets data download configuration. * @param downloadConfiguration data download configuration */ public void setDownloadDataConfiguration( DownloadConfiguration downloadConfiguration) { _downloadDataConfiguration = downloadConfiguration != null ? downloadConfiguration : new DownloadConfiguration(); } /** * Gets harvester configuration. * @return harvester configuration */ public HarvesterConfiguration getHarvesterConfiguration() { return this._harvesterConfiguration; } /** * Sets harvester configuration. * @param harvesterConfiguration harvester configuration */ public void setHarvesterConfiguration(HarvesterConfiguration harvesterConfiguration) { this._harvesterConfiguration = harvesterConfiguration != null ? harvesterConfiguration : new HarvesterConfiguration(); } /** * Gets protocol factories. * @return protocol factories */ public ProtocolFactories getProtocolFactories() { return _protocolFactories; } /** * Sets protocol factories. * @param protocolFactories protocol factories */ public void setProtocolFactories(ProtocolFactories protocolFactories) { this._protocolFactories = protocolFactories!=null? protocolFactories: new ProtocolFactories(); } /** * Gets the version. * @return the version */ public String getVersion() { return _version; } /** * Sets the version. * @param version the version */ protected void setVersion(String version) { _version = Val.chkStr(version); } // methods ===================================================================== /** * Instantiates a new Identity adapter. * @return the new identity adapter */ protected IdentityAdapter newIdentityAdapter() { IdentityAdapter identityAdapter = null; try { String adapterClassName = getIdentityConfiguration().getAdapterClassName(); if (adapterClassName.length() == 0) { throw new ConfigurationException( "The identity adapter class name was not properly configured."); } else { Class<?> clsAdapter = Class.forName(adapterClassName); Object objAdapter = clsAdapter.newInstance(); if (objAdapter instanceof IdentityAdapter) { identityAdapter = (IdentityAdapter) objAdapter; identityAdapter.setApplicationConfiguration(this); } else { throw new ConfigurationException( "The identity adapter class name is invalid: " + adapterClassName); } } } catch (Throwable t) { identityAdapter = new UnconfiguredIdentityAdapter(); identityAdapter.setApplicationConfiguration(this); LogUtil.getLogger().log(Level.SEVERE, "Unable to create a new IdenityAdapter.", t); } return identityAdapter; } /** * Returns a string representation of this object. * @return the string */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getName()).append(" (\n"); sb.append(" version=\"").append(getVersion()).append("\"\n"); sb.append(getDatabaseReferences()).append("\n"); sb.append(getMailConfiguration()).append("\n"); sb.append(getInteractiveMap()).append("\n"); sb.append(getCatalogConfiguration()).append("\n"); sb.append(getIdentityConfiguration()).append("\n"); sb.append(getThreadSchedulerConfiguration()).append("\n"); sb.append(getDownloadDataConfiguration()).append("\n"); sb.append(getMetadataAccessPolicy()).append("\n"); sb.append(getHarvesterConfiguration()).append("\n"); sb.append(getProtocolFactories()).append("\n"); sb.append(") ===== end ").append(getClass().getName()); return sb.toString(); } }