001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: *
023: * Free Software Foundation, Inc.
024: * 59 Temple Place, Suite 330
025: * Boston, MA 02111-1307 USA
026: *
027: * @author Scott Ferguson
028: */
029:
030: package com.caucho.jca;
031:
032: import com.caucho.config.program.ConfigProgram;
033: import com.caucho.loader.EnvironmentClassLoader;
034: import com.caucho.loader.EnvironmentLocal;
035: import com.caucho.util.L10N;
036:
037: import javax.annotation.PostConstruct;
038: import java.util.ArrayList;
039: import java.util.logging.Logger;
040:
041: /**
042: * The configuration for a resource-default.
043: */
044: public class ResourceDefault {
045: private static final L10N L = new L10N(ResourceDefault.class);
046: private static final Logger log = Logger
047: .getLogger(ResourceDefault.class.getName());
048:
049: private static EnvironmentLocal<ArrayList<ResourceConfig>> _localConfig = new EnvironmentLocal<ArrayList<ResourceConfig>>();
050:
051: private ResourceConfig _config = new ResourceConfig();
052:
053: /**
054: * Adds to the builder program.
055: */
056: public void addBuilderProgram(ConfigProgram program) {
057: _config.addBuilderProgram(program);
058: }
059:
060: @PostConstruct
061: public void init() {
062: ArrayList<ResourceConfig> defaultList = _localConfig.getLevel();
063:
064: if (defaultList == null) {
065: defaultList = new ArrayList<ResourceConfig>();
066: _localConfig.set(defaultList);
067: }
068:
069: defaultList.add(_config);
070: }
071:
072: public static ArrayList<ResourceConfig> getDefaultList() {
073: return getDefaultList(Thread.currentThread()
074: .getContextClassLoader());
075: }
076:
077: public static ArrayList<ResourceConfig> getDefaultList(
078: ClassLoader loader) {
079: ArrayList<ResourceConfig> defaultList = new ArrayList<ResourceConfig>();
080:
081: getDefaultList(defaultList, loader);
082:
083: return defaultList;
084: }
085:
086: private static void getDefaultList(ArrayList<ResourceConfig> list,
087: ClassLoader loader) {
088: for (; loader != null; loader = loader.getParent()) {
089: if (loader instanceof EnvironmentClassLoader) {
090: getDefaultList(list, loader.getParent());
091:
092: ArrayList<ResourceConfig> defaultList = _localConfig
093: .getLevel(loader);
094:
095: if (defaultList != null)
096: list.addAll(defaultList);
097: }
098: }
099: }
100: }
|