/*****************************************************************************
* *
* This file is part of the tna framework distribution. *
* Documentation and updates may be get from biaoping.yin the author of *
* this framework *
* *
* Sun Public License Notice: *
* *
* The contents of this file are subject to the Sun Public License Version *
* 1.0 (the "License"); you may not use this file except in compliance with *
* the License. A copy of the License is available at http://www.sun.com *
* *
* The Original Code is tag. The Initial Developer of the Original *
* Code is biaoping yin. Portions created by biaoping yin are Copyright *
* (C) 2000. All Rights Reserved. *
* *
* GNU Public License Notice: *
* *
* Alternatively, the contents of this file may be used under the terms of *
* the GNU Lesser General Public License (the "LGPL"), in which case the *
* provisions of LGPL are applicable instead of those above. If you wish to *
* allow use of your version of this file only under the terms of the LGPL *
* and not to allow others to use your version of this file under the SPL, *
* indicate your decision by deleting the provisions above and replace *
* them with the notice and other provisions required by the LGPL. If you *
* do not delete the provisions above, a recipient may use your version of *
* this file under either the SPL or the LGPL. *
* *
* biaoping.yin (yin-bp@163.com) *
* Author of Learning Java *
* *
*****************************************************************************/
package com.frameworkset.common.tag.tree;
import java.io.InputStream;
import java.io.Serializable;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Properties;
import org.apache.log4j.Logger;
import com.frameworkset.common.tag.tree.itf.ITree;
/**
* @author biaoping.yin
* created on 2005-3-13
* version 1.0
*/
public class TreeFactory implements Serializable
{
private final static Logger log = Logger.getLogger(TreeFactory.class);
private static HashMap map;
static
{
ClassLoader classLoader = TreeFactory.class.getClassLoader();
try
{
URL url = classLoader.getResource("treedata.properties");
Properties treeProps = new Properties();
if(map == null)
map = new HashMap();
if (url != null)
{
InputStream is = url.openStream();
treeProps.load(is);
is.close();
Enumeration keys = treeProps.keys();
while(keys != null && keys.hasMoreElements())
{
String key = (String)keys.nextElement();
String className = treeProps.getProperty(key);
map.put(key.trim(),className.trim());
}
}
}
catch (Exception e)
{
//:log
log.info("not found resources file treedata.properties");
//e.printStackTrace();
}
}
public static ITree getTreeData(String type)
{
ITree ret = null;
type = type.trim();
try
{
ret = (ITree)Class.forName(type).newInstance();
return ret;
}
catch(Exception e)
{
log.info("class " + type + " not found in class path,tree.properties will been checked!!!");
}
if(map == null)
{
return null;
}
else
{
Object obj = map.get(type);
/**
* 如果对应的类型没有加载进来,则可执行以下的代码加载,
* 如果类型没有在属性文件中配置,则提示到treedata.properties中进行配置
*/
if(obj == null)
{
try
{
ClassLoader classLoader = TreeFactory.class.getClassLoader();
URL url = classLoader.getResource("treedata.properties");
Properties treeProps = new Properties();
if (url != null)
{
InputStream is = url.openStream();
treeProps.load(is);
is.close();
obj = treeProps.getProperty(type);
if(obj != null)
{
map.put(type + "",obj);
}
}
else
{
log.info("not found resources file treedata.properties");
return null;
}
}
catch (Exception e)
{
//:log
log.info("not found resources file treedata.properties");
return null;
//e.printStackTrace();
}
}
if(obj != null)
{
String className = ((String)obj).trim();
try
{
ret = (ITree)Class.forName(className).newInstance();
//map.put(key,inc);
}
catch(Exception e)
{
//:log
log.info("class " + className + " not found in class path!!!");
return null;
}
}
if(ret == null)
log.info("type " + type + " not exist please check treedata.properties");
return ret;
}
}
}