Java tutorial
/* * This file is part of Dorado 7.x (http://dorado7.bsdn.org). * * Copyright (c) 2002-2012 BSTEK Corp. All rights reserved. * * This file is dual-licensed under the AGPLv3 (http://www.gnu.org/licenses/agpl-3.0.html) * and BSDN commercial (http://www.bsdn.org/licenses) licenses. * * If you are unsure which license is appropriate for your use, please contact the sales department * at http://www.bstek.com/contact. */ package com.bstek.dorado.data.config; import java.util.LinkedHashSet; import java.util.Set; import java.util.Vector; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.bstek.dorado.config.ConfigUtils; import com.bstek.dorado.core.io.Resource; import com.bstek.dorado.data.provider.manager.DataProviderManager; import com.bstek.dorado.data.resolver.manager.DataResolverManager; import com.bstek.dorado.data.type.manager.DataTypeManager; /** * ???? * * @author Benny Bao (mailto:benny.bao@bstek.com) * @since Feb 20, 2007 */ public abstract class DataConfigManagerSupport implements DataConfigManager { private static Log logger = LogFactory.getLog(DataConfigManagerSupport.class); private Set<Resource> resourceSet = new LinkedHashSet<Resource>(); private transient Vector<DataConfigManagerListener> configManagerListeners; /** * DataType? */ protected DataTypeManager dataTypeManager; /** * DataProvider? */ protected DataProviderManager dataProviderManager; /** * DataResolver? */ protected DataResolverManager dataResolverManager; /** * ?ConfigManager??? */ public Set<Resource> getResources() { return resourceSet; } /** * DataType? */ public void setDataTypeManager(DataTypeManager dataTypeManager) { this.dataTypeManager = dataTypeManager; } /** * DataProvider? */ public void setDataProviderManager(DataProviderManager dataProviderManager) { this.dataProviderManager = dataProviderManager; } /** * DataResolver? */ public void setDataResolverManager(DataResolverManager dataResolverManager) { this.dataResolverManager = dataResolverManager; } public synchronized void addConfigManagerListener(DataConfigManagerListener l) { if (configManagerListeners == null) { configManagerListeners = new Vector<DataConfigManagerListener>(1); } configManagerListeners.add(l); } public synchronized void removeConfigManagerListener(DataConfigManagerListener l) { if (configManagerListeners != null) { configManagerListeners.remove(l); } } /** * ??????? * * @param event * ?? */ protected void fireOnConfigChanged(DataConfigManagerEvent event) { if (configManagerListeners != null) { for (DataConfigManagerListener listener : configManagerListeners) { listener.onConfigChanged(event); } } } public synchronized void loadConfigs(Resource[] resources, boolean throwOnError) throws Exception { long startTime = System.currentTimeMillis(); CollectionUtils.addAll(resourceSet, resources); ConfigUtils.setDuringBuildTemplate(true); try { internalUnloadConfigs(resources); internalLoadConfig(resources); } catch (Exception ex) { if (throwOnError) { throw ex; } else { logger.error(ex, ex); } } finally { ConfigUtils.setDuringBuildTemplate(false); } DataConfigManagerEvent event = new DataConfigManagerEvent(this); event.setResource(resources); fireOnConfigChanged(event); long endTime = System.currentTimeMillis(); String message = "Configures loaded in " + (endTime - startTime) + " ms."; message += " ["; for (int i = 0; i < resources.length; i++) { if (i > 0) message += ','; message += resources[i]; } message += "]."; logger.info(message); } /** * ???? internalLoadConfig()?loadConfig() * * @param resources * ???? * @return ??? * @throws Exception */ protected abstract boolean internalLoadConfig(Resource[] resources) throws Exception; public synchronized void unloadConfigs(Resource[] resources) throws Exception { if (internalUnloadConfigs(resources)) { dataTypeManager.clearCache(); } for (Resource resource : resources) { resourceSet.remove(resource); } DataConfigManagerEvent event = new DataConfigManagerEvent(this); event.setResource(resources); event.setMode(DataConfigManagerEvent.MODE_UNLOAD); fireOnConfigChanged(event); String message = "Configures unloaded ["; for (int i = 0; i < resources.length; i++) { if (i > 0) { message += ','; } message += resources[i]; } message += "]."; logger.info(message); } /** * ????? * internalUnloadConfig()?unloadConfig() * * @param resources * ???? * @return ??? * @throws Exception */ protected abstract boolean internalUnloadConfigs(Resource[] resources) throws Exception; }