📄 componentconfig.java
字号:
/*
* $Id: ComponentConfig.java,v 1.17 2003/12/07 18:50:34 ajzeneski Exp $
*
* Copyright (c) 2003 The Open For Business Project - www.ofbiz.org
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
package org.ofbiz.base.component;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.xml.parsers.ParserConfigurationException;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.OrderedMap;
import org.ofbiz.base.util.UtilURL;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
/**
* ComponentConfig - Component configuration class for ofbiz-container.xml
*
* @author <a href="mailto:jonesde@ofbiz.org">David E. Jones</a>
* @author <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a>
* @version $Revision: 1.17 $
* @since 3.0
*/
public class ComponentConfig {
public static final String module = ComponentConfig.class.getName();
public static final String OFBIZ_COMPONENT_XML_FILENAME = "ofbiz-component.xml";
// this is not a UtilCache because reloading may cause problems
protected static Map componentConfigs = new OrderedMap();
protected static Map serverWebApps = new HashMap();
public static ComponentConfig getComponentConfig(String globalName) throws ComponentException {
// TODO: we need to look up the rootLocation from the container config, or this will blow up
return getComponentConfig(globalName, null);
}
public static ComponentConfig getComponentConfig(String globalName, String rootLocation) throws ComponentException {
ComponentConfig componentConfig = null;
if (UtilValidate.isNotEmpty(globalName)) {
componentConfig = (ComponentConfig) componentConfigs.get(globalName);
}
if (componentConfig == null) {
if (rootLocation != null) {
synchronized (ComponentConfig.class) {
if (UtilValidate.isNotEmpty(globalName)) {
componentConfig = (ComponentConfig) componentConfigs.get(globalName);
}
if (componentConfig == null) {
componentConfig = new ComponentConfig(globalName, rootLocation);
if (componentConfigs.containsKey(componentConfig.getGlobalName())) {
Debug.logWarning("WARNING: Loading ofbiz-component using a global name that already exists, will over-write: " + componentConfig.getGlobalName(), module);
}
componentConfigs.put(componentConfig.getGlobalName(), componentConfig);
}
}
} else {
throw new ComponentException("No component found named : " + globalName);
}
}
return componentConfig;
}
public static Collection getAllComponents() {
Collection values = componentConfigs.values();
if (values != null) {
return values;
} else {
Debug.logWarning("No components were found, something is probably missing or incorrect in the component-load setup.", module);
return new LinkedList();
}
}
public static List getAllClasspathInfos() {
List classpaths = new LinkedList();
Iterator i = getAllComponents().iterator();
while (i.hasNext()) {
ComponentConfig cc = (ComponentConfig) i.next();
classpaths.addAll(cc.getClasspathInfos());
}
return classpaths;
}
public static List getAllEntityResourceInfos(String type) {
List entityInfos = new LinkedList();
Iterator i = getAllComponents().iterator();
while (i.hasNext()) {
ComponentConfig cc = (ComponentConfig) i.next();
List ccEntityInfoList = cc.getEntityResourceInfos();
if (UtilValidate.isEmpty(type)) {
entityInfos.addAll(ccEntityInfoList);
} else {
Iterator ccEntityInfoIter = ccEntityInfoList.iterator();
while (ccEntityInfoIter.hasNext()) {
EntityResourceInfo entityResourceInfo = (EntityResourceInfo) ccEntityInfoIter.next();
if (type.equals(entityResourceInfo.type)) {
entityInfos.add(entityResourceInfo);
}
}
}
}
return entityInfos;
}
public static List getAllServiceResourceInfos(String type) {
List serviceInfos = new LinkedList();
Iterator i = getAllComponents().iterator();
while (i.hasNext()) {
ComponentConfig cc = (ComponentConfig) i.next();
List ccServiceInfoList = cc.getServiceResourceInfos();
if (UtilValidate.isEmpty(type)) {
serviceInfos.addAll(ccServiceInfoList);
} else {
Iterator ccServiceInfoIter = ccServiceInfoList.iterator();
while (ccServiceInfoIter.hasNext()) {
ServiceResourceInfo serviceResourceInfo = (ServiceResourceInfo) ccServiceInfoIter.next();
if (type.equals(serviceResourceInfo.type)) {
serviceInfos.add(serviceResourceInfo);
}
}
}
}
return serviceInfos;
}
public static List getAllWebappResourceInfos() {
List webappInfos = new LinkedList();
Iterator i = getAllComponents().iterator();
while (i.hasNext()) {
ComponentConfig cc = (ComponentConfig) i.next();
webappInfos.addAll(cc.getWebappInfos());
}
return webappInfos;
}
public static boolean isFileResourceLoader(String componentName, String resourceLoaderName) throws ComponentException {
ComponentConfig cc = ComponentConfig.getComponentConfig(componentName);
if (cc == null) {
throw new ComponentException("Could not find component with name: " + componentName);
}
return cc.isFileResourceLoader(resourceLoaderName);
}
public static InputStream getStream(String componentName, String resourceLoaderName, String location) throws ComponentException {
ComponentConfig cc = ComponentConfig.getComponentConfig(componentName);
if (cc == null) {
throw new ComponentException("Could not find component with name: " + componentName);
}
return cc.getStream(resourceLoaderName, location);
}
public static URL getURL(String componentName, String resourceLoaderName, String location) throws ComponentException {
ComponentConfig cc = ComponentConfig.getComponentConfig(componentName);
if (cc == null) {
throw new ComponentException("Could not find component with name: " + componentName);
}
return cc.getURL(resourceLoaderName, location);
}
public static String getFullLocation(String componentName, String resourceLoaderName, String location) throws ComponentException {
ComponentConfig cc = ComponentConfig.getComponentConfig(componentName);
if (cc == null) {
throw new ComponentException("Could not find component with name: " + componentName);
}
return cc.getFullLocation(resourceLoaderName, location);
}
public static List getAppBarWebInfos(String serverName) {
List webInfos = (List) serverWebApps.get(serverName);
if (webInfos == null) {
synchronized(ComponentConfig.class) {
if (webInfos == null) {
Iterator i = getAllComponents().iterator();
TreeMap tm = new TreeMap();
while (i.hasNext()) {
ComponentConfig cc = (ComponentConfig) i.next();
Iterator wi = cc.getWebappInfos().iterator();
while (wi.hasNext()) {
ComponentConfig.WebappInfo wInfo = (ComponentConfig.WebappInfo) wi.next();
if (serverName.equals(wInfo.server) && wInfo.appBarDisplay) {
tm.put(wInfo.title, wInfo);
}
}
}
List webInfoList = new LinkedList(tm.values());
serverWebApps.put(serverName, webInfoList);
return webInfoList;
}
}
}
return webInfos;
}
public static WebappInfo getWebAppInfo(String serverName, String contextRoot) {
ComponentConfig.WebappInfo info = null;
if (serverName == null || contextRoot == null) {
return info;
}
Iterator i = getAllComponents().iterator();
while (i.hasNext() && info == null) {
ComponentConfig cc = (ComponentConfig) i.next();
Iterator wi = cc.getWebappInfos().iterator();
while (wi.hasNext()) {
ComponentConfig.WebappInfo wInfo = (ComponentConfig.WebappInfo) wi.next();
if (serverName.equals(wInfo.server) && contextRoot.equals(wInfo.getContextRoot())) {
info = wInfo;
}
}
}
return info;
}
// ========== component info fields ==========
protected String globalName = null;
protected String rootLocation = null;
protected String componentName = null;
protected Map resourceLoaderInfos = new HashMap();
protected List classpathInfos = new LinkedList();
protected List entityResourceInfos = new LinkedList();
protected List serviceResourceInfos = new LinkedList();
protected List webappInfos = new LinkedList();
protected ComponentConfig() {}
protected ComponentConfig(String globalName, String rootLocation) throws ComponentException {
this.globalName = globalName;
if (!rootLocation.endsWith("/")) {
rootLocation = rootLocation + "/";
}
this.rootLocation = rootLocation.replace('\\', '/');
File rootLocationDir = new File(rootLocation);
if (rootLocationDir == null) {
throw new ComponentException("The given component root location is does not exist: " + rootLocation);
}
if (!rootLocationDir.isDirectory()) {
throw new ComponentException("The given component root location is not a directory: " + rootLocation);
}
String xmlFilename = rootLocation + "/" + OFBIZ_COMPONENT_XML_FILENAME;
URL xmlUrl = UtilURL.fromFilename(xmlFilename);
if (xmlUrl == null) {
throw new ComponentException("Could not find the " + OFBIZ_COMPONENT_XML_FILENAME + " configuration file in the component root location: " + rootLocation);
}
Document ofbizComponentDocument = null;
try {
ofbizComponentDocument = UtilXml.readXmlDocument(xmlUrl, true);
} catch (SAXException e) {
throw new ComponentException("Error reading the component config file: " + xmlUrl, e);
} catch (ParserConfigurationException e) {
throw new ComponentException("Error reading the component config file: " + xmlUrl, e);
} catch (IOException e) {
throw new ComponentException("Error reading the component config file: " + xmlUrl, e);
}
Element ofbizComponentElement = ofbizComponentDocument.getDocumentElement();
this.componentName = ofbizComponentElement.getAttribute("name");
if (UtilValidate.isEmpty(this.globalName)) {
this.globalName = this.componentName;
}
Iterator elementIter = null;
// resource-loader - resourceLoaderInfos
elementIter = UtilXml.childElementList(ofbizComponentElement, "resource-loader").iterator();
while (elementIter.hasNext()) {
Element curElement = (Element) elementIter.next();
ResourceLoaderInfo resourceLoaderInfo = new ResourceLoaderInfo(curElement);
this.resourceLoaderInfos.put(resourceLoaderInfo.name, resourceLoaderInfo);
}
// classpath - classpathInfos
elementIter = UtilXml.childElementList(ofbizComponentElement, "classpath").iterator();
while (elementIter.hasNext()) {
Element curElement = (Element) elementIter.next();
ClasspathInfo classpathInfo = new ClasspathInfo(this, curElement);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -