/* * Copyright 2013 Esri. * * 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 com.esri.gpt.control.webharvest.validator; import com.esri.gpt.catalog.harvest.repository.HrRecord; import com.esri.gpt.framework.collection.StringAttributeMap; import com.esri.gpt.framework.context.ApplicationConfiguration; import com.esri.gpt.framework.context.ApplicationContext; import com.esri.gpt.framework.util.Val; import java.util.HashMap; import java.util.logging.Logger; /** * Validator factory. */ public class ValidatorFactory { private final static Logger LOGGER = Logger.getLogger(ValidatorFactory.class.getCanonicalName()); private static final HashMap<Class,IValidatorFactory> factories = new HashMap<Class, IValidatorFactory>(); private static ValidatorFactory instance = new ValidatorFactory(); static { register(new ArcImsValidatorFactory()); register(new OAIValidatorFactory()); register(new ArcGISValidatorFactory()); register(new Agp2AgpValidatorFactory()); register(new Ags2AgpValidatorFactory()); register(new WAFValidatorFactory()); register(new DCATValidatorFactory()); } /** * Gets singleton instance. */ public static ValidatorFactory getInstance() { if (instance==null) { LOGGER.fine("Creating singleton instance of protcol validator factory..."); ApplicationContext appCtx = ApplicationContext.getInstance(); ApplicationConfiguration appCfg = appCtx.getConfiguration(); StringAttributeMap parameters = appCfg.getCatalogConfiguration().getParameters(); String validatorFactoryClassName = Val.chkStr(parameters.getValue("webharvester.validatorFactory.class")); if (!validatorFactoryClassName.isEmpty()) { try { Class validatorFactoryClass = Class.forName(validatorFactoryClassName); instance = (ValidatorFactory)validatorFactoryClass.newInstance(); } catch (Exception ex) { LOGGER.fine("Instance of protcol validator as defined in 'webharvester.validatorFactory.class' couldn't be created. Creating generic one."); instance = new ValidatorFactory(); } } else { instance = new ValidatorFactory(); } } return instance; } /** * Registers validator factory. * @param factory validator factory */ public static void register(IValidatorFactory factory) { factories.put(factory.getProtocolClass(), factory); } /** * Gets validator. * @param record repository record * @return validator or <code>null</code> if validator not available */ public IValidator getValidator(HrRecord record) { IValidatorFactory validatorFactory = factories.get(record.getProtocol().getClass()); return validatorFactory!=null? validatorFactory.create(record): new DefaultValidator(record.getHostUrl(), record.getProtocol()); } }