import java.io.File;
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import com.huawei.ngbss.common.XMLParserHelperDom4j;
public class XMLFileListener extends FileListener
{
private Logger logger = Logger.getLogger(XMLFileListener.class);
private EnumerateFile enumerateFile;
XMLFileListener(String filePath)
{
if (filePath != null)
{
this.file = new File(filePath);
if (!file.isFile())
{
logger.error("The file[" + filePath
+ "] does not exist,please check it.");
return;
}
enumerateFile = new EnumerateFile(filePath);
}
}
public boolean isFileUpdate()
{
return enumerateFile.getEnumFile().lastModified() > enumerateFile.getEnumLastModefieds();
}
public void loadFile()
{
loadXml();
}
public String getPropertyValue(String key)
{
return getTransferValue(key);
}
/**
* 加载枚举文件
*/
public void loadXml()
{
// 更新时间
enumerateFile.setEnumLastModefieds(enumerateFile.getEnumFile()
.lastModified());
// 解析XML
Element rootElement = XMLParserHelperDom4j.parserXML(enumerateFile
.getEnumFile().getPath());
if (rootElement == null)
{
logger.error("The file[" + enumerateFile.getEnumFile().getPath()
+ "] parser error,please check it again.");
}
else
{
// 将解析的文档的根节点保存,供以后读取所用
enumerateFile.setEnumElement(rootElement);
logger.info("The properties file["
+ enumerateFile.getEnumFile().getPath()
+ "] load complete.");
}
}
public String getTransferValue(String key)
{
// 由 Type + OriginallyValue + value 或 Type + TransferAttr + value组成。
String[] keys = key.split("\\|\\|");
// 没有传key,则返回空
if (keys == null)
{
return null;
}
String transferValue = keys[2];
Element transferAttrs = XMLParserHelperDom4j.getElement(
enumerateFile.getEnumElement(), null, keys[0]);
if(transferAttrs==null)
{
return null;
}
for(Iterator<?> i=transferAttrs.elementIterator();i.hasNext();)
{
Element trnasfer=(Element) i.next();
if(trnasfer==null)
continue;
String orig_str = XMLParserHelperDom4j.getText(trnasfer,
XMLParserHelperDom4j.ORIGINALL_VALUE);
String tran_str = XMLParserHelperDom4j.getText(trnasfer,
XMLParserHelperDom4j.TRANSFER_VALUE);
if (XMLParserHelperDom4j.ORIGINALL_VALUE.equals(keys[1])
&& keys[2].equals(orig_str))
{
transferValue = tran_str;
return transferValue;
}
else if (XMLParserHelperDom4j.TRANSFER_VALUE.equals(keys[1])
&& keys[2].equals(tran_str))
{
transferValue = orig_str;
return transferValue;
}
}
logger.warn("Cannot found the value [" + keys[2] + "] by node["
+ keys[0] + " in xml file]");
return transferValue;
}
}
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import com.huawei.ngbss.common.XMLParserHelperDom4j;
public class XMLFileListener extends FileListener
{
private Logger logger = Logger.getLogger(XMLFileListener.class);
private EnumerateFile enumerateFile;
XMLFileListener(String filePath)
{
if (filePath != null)
{
this.file = new File(filePath);
if (!file.isFile())
{
logger.error("The file[" + filePath
+ "] does not exist,please check it.");
return;
}
enumerateFile = new EnumerateFile(filePath);
}
}
public boolean isFileUpdate()
{
return enumerateFile.getEnumFile().lastModified() > enumerateFile.getEnumLastModefieds();
}
public void loadFile()
{
loadXml();
}
public String getPropertyValue(String key)
{
return getTransferValue(key);
}
/**
* 加载枚举文件
*/
public void loadXml()
{
// 更新时间
enumerateFile.setEnumLastModefieds(enumerateFile.getEnumFile()
.lastModified());
// 解析XML
Element rootElement = XMLParserHelperDom4j.parserXML(enumerateFile
.getEnumFile().getPath());
if (rootElement == null)
{
logger.error("The file[" + enumerateFile.getEnumFile().getPath()
+ "] parser error,please check it again.");
}
else
{
// 将解析的文档的根节点保存,供以后读取所用
enumerateFile.setEnumElement(rootElement);
logger.info("The properties file["
+ enumerateFile.getEnumFile().getPath()
+ "] load complete.");
}
}
public String getTransferValue(String key)
{
// 由 Type + OriginallyValue + value 或 Type + TransferAttr + value组成。
String[] keys = key.split("\\|\\|");
// 没有传key,则返回空
if (keys == null)
{
return null;
}
String transferValue = keys[2];
Element transferAttrs = XMLParserHelperDom4j.getElement(
enumerateFile.getEnumElement(), null, keys[0]);
if(transferAttrs==null)
{
return null;
}
for(Iterator<?> i=transferAttrs.elementIterator();i.hasNext();)
{
Element trnasfer=(Element) i.next();
if(trnasfer==null)
continue;
String orig_str = XMLParserHelperDom4j.getText(trnasfer,
XMLParserHelperDom4j.ORIGINALL_VALUE);
String tran_str = XMLParserHelperDom4j.getText(trnasfer,
XMLParserHelperDom4j.TRANSFER_VALUE);
if (XMLParserHelperDom4j.ORIGINALL_VALUE.equals(keys[1])
&& keys[2].equals(orig_str))
{
transferValue = tran_str;
return transferValue;
}
else if (XMLParserHelperDom4j.TRANSFER_VALUE.equals(keys[1])
&& keys[2].equals(tran_str))
{
transferValue = orig_str;
return transferValue;
}
}
logger.warn("Cannot found the value [" + keys[2] + "] by node["
+ keys[0] + " in xml file]");
return transferValue;
}
}