??xml version="1.0" encoding="utf-8" standalone="yes"?>
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Assert;
import org.junit.Test;
public class RegexUnit {
@Test
/**
* <p>向前\向后查找</p>
*/
public void unit9()throws Exception{
String testStr = "http://www.google.com";
/* 一般查?br /> * .+(:) 查询出结果包含?
*/
Pattern pattern = Pattern.compile(".+(:)");
Matcher matcher = pattern.matcher(testStr);
Assert.assertTrue("错误Q 查扑ևl果通过 .+(:) 此regex没有包含 : ",
matcher.find() && matcher.group().equals("http:") );
/* 向前查找
* .+(?=:) 查询l果不包含?
*/
Pattern pattern2 = Pattern.compile(".+(?=:)");
Matcher matcher2 = pattern2.matcher(testStr);
Assert.assertTrue("错误Q 查扑ևl果通过 .+(?=:) 此regex有包含? ",
matcher2.find()&& matcher2.group().equals("http"));
/* 向后查找
* (?<=:).+
*/
Pattern pattern3 = Pattern.compile("(?<=://).+");
Matcher matcher3 = pattern3.matcher(testStr);
Assert.assertTrue("错误Q查扑ևl果包含 http:// 不向后查?/span>",
matcher3.find()&& matcher3.group().equals("www.google.com") );
}
@Test
/** 回朔应用
* 查询回朔、回朔替换、回朔大写替换
*/
public void unit8()throws Exception{
String testStr = "this is a block of of test,"+
" several words here are are " +
" repeated , and and they should not be. ";
Pattern pattern = Pattern.compile("[ ]+(\\w+)[ ]+\\1");
Matcher matcher = pattern.matcher(testStr);
//查询l果 are are
Assert.assertTrue("错误Qregex 不匹配?/span>",
matcher.find()&&matcher.group().split(" ").length>=2 );
while( matcher.find() ){
Assert.assertTrue("错误Qregex 不匹配?/span>",
matcher.group().split(" ").length>=2 );
}
//替换
String testStr2s = "313-555-1234";
Pattern pattern2 = Pattern.compile("(\\d{3})(-)(\\d{3})(-)(\\d{4})");
Matcher mtmp = pattern2.matcher(testStr2s);
Assert.assertTrue("错误Q没有查替换",
mtmp.find() &&
mtmp.replaceAll("($1) $3-$5").equals("(313) 555-1234") );
/*大小写替?java 不能成功)
* \E l束 \L 或 \U转换
* \l \L 把下一个字W??换ؓ写
* \ u \U 把下一个字W??转换为大写?br /> */
String testStr3 = "tt:google:xx";
Pattern pattern3 = Pattern.compile("(?<=:)(.+)(?=:)");
Matcher matcher2 = pattern3.matcher(testStr3);
if( matcher2.find())
System.out.println( matcher2.group() ) ;
}
}
]]>
]]>
文章路径Q?a id="n3dz" >http://www.chinaitpower.com/A200508/2005-08-07/183934.html
权限设计通常包括数据库设计、应用程序接?API)设计、程序实C个部分?/p>
权限分类Q?/font>
首先?strong id="a-fu">针对数据存取的权限,通常有录入、浏览、修攏V删除四U?/p>
其次?strong id="obi3">功能Q它可以包括例如l计{所有非直接数据存取操作Q另外,我们q可能对一些关键数据表某些字段的存取进行限制?/p>
权限表及相关内容大体可以用六个表来描qͼ如下Q?br id="f:vt" /> 1 拥有权限角色Q即用户l)Q具?strong id="m2-j">拥有权限描述实体?/p>
2 用户?/font>Q用L描述Q其它(如地址、电话等信息Q; 4 权限列表Q程?strong id="ohbe">所?/strong>权限列表。该表记录所有要加以控制的权限,如录入、修攏V删除、执行等Q?br id="garo" /> 5 权限-角色-用户对应?/font>Q?strong id="ome4">权限对应角色(多对多关p?/font>)再由4表关pd用户?/p>
在探讨文中的W?条,我怎么都不太理解?望大家探讨。反向权限吗Q那怎么和系l中的拥有一hqͼ
下面提出一些自q见解Q?/strong>
1 用户表:用户的描qͼ其它Q如地址、电话等信息Q;
2 权限列表Q程?strong id="n-8.">所?font id="r7ps" color="#660000">权限列表。该表记录所有要加以控制的权限,如录入、修攏V删除、执行等Q?br id="xst3" /> 3 权限树(模糊看成角色Q但有些不同。树性结构,l构数据库中表外键自己)Q孩子接点承父亲接点全部权限,q在ơ上扩充和删减权限徏立自己分支?/font>
4 权限列表-权限树:Q多对多关系Q用于描q此权限树接?/font>?font id="tu_b" color="#990000">父亲接点权限l承?/strong> 本表中用一列枚丑ֈ用于表示本纪录是d或删减权限?/p>
5 用户-权限树:权限树接?/strong>对应用户Q多对一Q关pR?/p>
感觉自己的这U框Ӟ能很好的扩充Q在某接点下增,删某权限或直接找?strong id="dwf0">最向近的一个权限树接点q?/strong>Q ?/p>
大家多说说自q见解Q和Ҏ下这两个框架的一些优~点把。本人随时恭听。G_G
?008-4-7 22:50北京 google doc 原稿Q?a class="tabcontent" id="publishedDocumentUrl" target="_blank">http://docs.google.com/Doc?id=dkvfctc_16hgvfkbfs HashMap cL有分cL者排序。它允许一?/span> null 键和多个 null 倹{?/span> Hashtable cM?/span> HashMapQ但是不允许 null 键和 null 倹{它也比 HashMap 慢,因ؓ它是同步的?/span> 6. GC System.gc() Runtime.getRuntime().gc() 7.重写Overriding和重?/span>Overloading 如果在一个类中定义了多个同名的方法,它们或有不同的参C数或有不同的参数cdQ则UCؓҎ的重?/span>(Overloading)?/span>Overloaded的方法是可以改变q回值的cd?/span> 8.抽象cL否可l承实体c?/span>(concrete class) 抽象cL否可l承实体c,但前提是实体cdL明确的构造函?/span> 9.try {}里有一?/span>return语句Q那么紧跟在q个try后的finally {}里的code会不会被执行Q什么时候被执行Q在return前还是后? 会执行,?/span>return前执行?/span> @version ?br /> @since 从以下版本开 /** */中的开头是注解
3 角色-用户对应?/font>Q该表记录用户与角色之间的对应关p?多对多关p?/font>)Q一个用户可以隶属于多个角色Q一个角色组也可拥有多个用户?/p>
]]>
-> all jar
-> build.xml;build-dist.properties;maven.xml;project.properties;project.xml
开始:
1.在项目工E?根目录下Z文g夹:xdoclet 拯 *.xml 到此文g?br /> 2.在此目录下徏 lib q把 xdoclet jar 攑օ .
3.修改 build.xml
<target name="clean">
<delete >
<fileset dir="${samples.dist.dir}" >
<include name="**/*.hbm.xml"/>
</fileset>
</delete>
</target>
<!-- hibernatedoclet 改ؓ version 3.0 和 include **/*.java-->
<hibernatedoclet >
<fileset dir="${samples.java.dir}">
<include name="**/*.java"/>
</fileset>
<hibernate version="3.0"/>
hbm2ddl>> http://blog.csdn.net/f1musicc/archive/2006/02/21/604699.aspx
eclipse->>
ant runtime home + classpath = 到本工程中的 classpath
ant runtime home + mysql jar ;
ant runtime home + commons-collection.jar
<mkdir dir="${hbm2ddl.sql.dir}" />
<taskdef name="hbm2ddl"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpath="E:\\test\\caijing\\WebRoot\\WEB-INF\\classes"/>
<hbm2ddl destdir="${hbm2ddl.sql.dir}">
<configuration configurationfile="../src/hibernate.cfg.xml" />
<hbm2ddl export="true" console="false" create="true" update="false" drop="false" outputfilename="bestunix.sql"/>
</hbm2ddl>
</target>
->target->name=hibernate->hibernate version=3.0
4.修改 build-dist.properties->
samples.lib.dirQ指定工EjarQ?/font>
samples.src.dir/samples.java.dirQ代码所在)
samples.gen-src.dir Q映生成地址Q?/font>
samples.lib.dir = ..\\lib
samples.src.dir = ..\\src\\java\\questionnaire
samples.java.dir = ..\\src\\java\\questionnaire
samples.gen-src.dir = ..\\src\\java\\questionnaire
加蝲?eclipse ?ant ?br />调用q个 target 动v来了p栗工作吧Q?br />
]]>
jar 下蝲Q?http://xdoclet.codehaus.org
eclipes 插g xdoclet http://www.beust.com/doclipse/
XDoclet 1 一些工?br /> http://xdoclet.sourceforge.net/xdoclet/tools.html
|上demo资料Q?br /> http://www.aygfsteel.com/martinx/archive/2006/01/25/29197.html
XDoclet 2 for Hibernate 3
http://www.hibernate.org/338.html
http://www.aygfsteel.com/martinx/archive/2006/01/25/29197.html
XDoclet 2 Tags 说明
http://xdoclet.codehaus.org/XDoclet+Plugins
XDoclet 1? Ҏ
http://bbmyth.javaeye.com/blog/31812
大家一PXDoclet 2时代p来到。我们大家一赯上?img src ="http://www.aygfsteel.com/Good-Game/aggbug/188055.html" width = "1" height = "1" />
]]>
双色球(2008002Q?/span>=03,04,18,22,25,29#09..
junit代码
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import junit.framework.TestCase;
public class HttpConn extends TestCase {
public void testT() throws Exception {
zq :
for(int i=2008001;true;i++){
String num = getQihao(i) ;
System.out.println("双色球("+i+"Q?"+ num);
if(num==null||num.equals("")) break zq;
}
}
public String getQihao(int qihao) throws Exception {
URL url = new URL("http://www.cnlot.net/ssq/details.php?issue="+qihao);
URLConnection uconn = url.openConnection();
String num = "";
InputStream in = uconn.getInputStream();
byte[] bs = new byte[in.available()];
in.read(bs);
String date = new String(bs) ;
Pattern pa = Pattern.compile(" .+color=red>([0-9][0-9])<.+" );
Matcher m = pa.matcher(date);
while( m.find() )
num+= m.group(1)+",";
pa = Pattern.compile(" .+color=blue>([0-9][0-9])<.+" );
m = pa.matcher(date);
while( m.find() )
num = num.substring( 0,num.length()-1 )+"#"+m.group(1) ;
pa = Pattern.compile("^(([0-9][0-9],){5,}[0-9][0-9]#([0-9][0-9],)*[0-9][0-9]\\|)*(([0-9][0-9],){5,}[0-9][0-9]#([0-9][0-9],)*[0-9][0-9])*$");
m = pa.matcher(num);
if( m.find() )
return num ;
else
return null ;
}
}
]]>
timer.schedule(new RunTask(), 1000 * 60, 1000 * 240);
////////////////////////////////////
public class RunTask extends TimerTask {
private boolean run = false;
public RunTask() {
}
public void run() {
.
}
private static Logger logger = Logger.getLogger(RunTask.class);
}
]]>
]]>
URL httpurl = new URL(url);
HttpURLConnection httpConn = null;
httpConn = (HttpURLConnection) httpurl.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
//正式q接
httpConn.getOutputStream();
/**输入参数
PrintWriter outs = new PrintWriter(httpConn.getOutputStream());
outs.print("&back_url=" + returnurl);
outs.print("&orderid=" + deposit.getOrderId());
outs.print("&bussinessid=" + SZFConstant.B_ID);
outs.print("&digestString="
+ MD5Util.MD5Encode(SZFConstant.B_ID + deposit.getOrderId()
+ SZFConstant.KEY));
outs.flush();
outs.close();
GET ׃??了?url + 参数
*/
byte[] bb = new byte[httpConn.getInputStream().available()];
httpConn.getInputStream().read(bb);
//取得数据
String str = new String(bb);
javascript 现在q种取法有个名字叫(ajaxQ??
<html>
<head>
<link href="http://www.cc168.com.cn/css/index.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="http://www.cc168.com.cn/css/framework.css" type="text/css"/>
<script language="javascript">
window.onload = function()
{
CreateDateSelect();
}
var xmlHttp = false;
var e;
//创徏XMLHTTP对象
function getXMLHTTPObj()
{
var C = null;
try
{
C = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
C = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(sc)
{
C = null;
}
}
if( !C && typeof XMLHttpRequest != "undefined" )
{
C = new XMLHttpRequest();
}
return C;
}
//调用q程Ҏ
function callServer(e)
{
try
{
if( xmlHttp && xmlHttp .readyState != 0 )
{
xmlHttp.abort();
}
xmlHttp = getXMLHTTPObj();
if( xmlHttp )
{
document.getElementById("outgroup").style.display = "none";
//获取查询日期
var dateSele = e.options[e.selectedIndex].value;
document.getElementById("date").innerHTML = dateSele + " 开攑ּ基金净?/span>";
//构造查询连接字W串
var url = "https://www.google.com/accounts/ManageAccount";
//打开q接
if(navigator.appName == 'Netscape'){
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
alert("Permission UniversalBrowserRead denied.");
}}
xmlHttp.open("GET", url, true);
//讄回调函数
xmlHttp.onreadystatechange = updatePage;
//发送请?/span>
xmlHttp.send(null);
}
else
{
document.getElementById("flag").innerHTML = "XMLHTTP对象创徏p|";
}
}
catch (e)
{
document.getElementById("flag").innerHTML = "查询错误:" + e;
}
}
//回调处理函数
function updatePage()
{
try {
if (xmlHttp.readyState == 1)
{
document.getElementById("flag").innerHTML = "正在加蝲q接对象";
}
if (xmlHttp.readyState == 2)
{
document.getElementById("flag").innerHTML = "q接对象加蝲完毕?/span>";
}
if (xmlHttp.readyState == 3)
{
document.getElementById("flag").innerHTML = "数据获取?img src="http://www.aygfsteel.com/images/dot.gif" />";
}
if (xmlHttp.readyState == 4)
{
var response = xmlHttp.responseText;
document.getElementById("out").innerHTML = response;
document.getElementById("outgroup").style.display = "";
}
}
catch (e)
{
document.getElementById("flag").innerHTML = "回调处理错误:" + e;
}
}
//创徏日期选择下拉?/span>
function CreateDateSelect()
{
var html = [];
for(var iYear=2005; iYear<=2006; iYear ++)
{
for( var iMonth=1; iMonth<=12; iMonth ++ )
{
for( var iDay=1; iDay<=31; iDay ++ )
{
html[html.length] = "<option value=\"" + iYear + "\-" + iMonth + "\-" + iDay + "\">" + iYear + "q?/span>" + iMonth + "?/span>" + iDay + "?/span>" + "</option>";
}
}
}
document.getElementById("dateSele").innerHTML = "<select name=\"dateSele\" id=\"dateSele\" onchange=\"callServer(this);\">" + html.join("") + "</select>";
}
</script>
]]>
官方完整APIQ?Template Language (*.xdt)
因ؓ参考中Q是q是比较复杂的例Q数本h愚钝^_^Q特留一文:
1>ant~辑文g
<project name="xdocletExample" default="doall" basedir=".">
<property name="basedir" location="E:\ue_test\xdoclet" />
<property name="xdoclet.lib.dir" location="D:\hbn\hibernate-3.2\xdoclet-1.2.3\lib" />
<property name="gen.src.dir" location="${basedir}/target" />
<property name="src.dir" location="${basedir}/src" />
<property name="template.dir" location="${basedir}/template" />
<property name="customtag.dir" location="${basedir}/bin" />
<path id="xdoclet.lib.path">
<fileset dir="${xdoclet.lib.dir}" includes="*.jar" />
</path>
<taskdef name="xdoclet" classname="xdoclet.DocletTask" classpathref="xdoclet.lib.path" />
<target name="init" />
<target name="daogener" depends="init">
<xdoclet destdir="${gen.src.dir}">
<fileset dir="${src.dir}" includes="${cjava.file}" />
<template templateFile="${xdt.file}" acceptInterfaces="false" acceptAbstractClasses="false" destinationfile="{0}DAO.java" />
</xdoclet>
</target>
<target name="doall" depends="daogener,daoimplgener" />
</project>
在运行上面文件时候动态输入参?br /> 1.依照?.java 文gQ?cjava.file Q;
2.依照?.xdt.file 文gQ?xdt.file Q;
比如DOS中输入:
E:\ue_test\xdoclet>ant daogener
-Dxdt.file=template\daointerface.xdt
-Dcjava.file=test\TestXDoclet.java
2.参考的java文gQ简单过头了 呵呵Q?br />
/**
* @hasRef
*/
public class TestXDoclet{
/**
* @ref.model name="sytp"
*/
private PubSystype sytp;
private String gg;
}
3.xdt 模板
标签解释Q?br /> <XDtClass:ifHasClassTag tagName="hasRef">判断 java文g中有 @hasRef
<XDtField:forAllFields> 1> 循环查找
2>判断?/font>@ref.model name=。?/span>
<XDtField:ifHasFieldTag tagName="ref.model" paramName="name">
3>取?/b>
<XDtField:fieldTagValue tagName="ref.model" paramName="name" />
import java.util.List;
//q是 packageName.className q和好理?/font>
import <XDtPackage:packageName />.<XDtClass:className />;
public interface <XDtClass:className />DAO {
//d
boolean add(<XDtClass:className /> instance);
//逻辑d
<XDtClass:ifHasClassTag tagName="hasRef">
boolean add(<XDtClass:className /> instance,
<XDtField:forAllFields>
<XDtField:ifHasFieldTag tagName="ref.model" paramName="name">
String <XDtField:fieldTagValue tagName="ref.model" paramName="name" />
</XDtField:ifHasFieldTag>
</XDtField:forAllFields>);
</XDtClass:ifHasClassTag>
//更新
boolean update(<XDtClass:className /> instance);
//得到一个对?/font>
<XDtClass:className /> get(String pkid);
}
q行DOS->
E:\ue_test\xdoclet>ant daogener
-Dxdt.file=template\daointerface.xdt
-Dcjava.file=test\TestXDoclet.java
得到的代码:
import java.util.List;
//q是 packageName.className q和好理?/span>
import test.TestXDoclet;
public interface TestXDocletDAO {
//d
boolean add(TestXDoclet instance);
//逻辑d
boolean add(TestXDoclet instance,String sytp);
//更新
boolean update(TestXDoclet instance);
//得到一个对?/span>
TestXDoclet get(String pkid);
}
]]>
* 对象{化成java.sql.Blob
* 要求 对象是序列化?br />
*/
public
java.sql.Blob ObjectToBlob(Object obj)
throws
IOException{
try
{
ByteArrayOutputStream out
=
new
ByteArrayOutputStream();
ObjectOutputStream outputStream
=
new
ObjectOutputStream(out);
outputStream.writeObject(obj);
byte
[] bytes
=
out.toByteArray();
outputStream.close();
return
Hibernate.createBlob(bytes);
}
catch
(Exception e) {
//
TODO: handle exception
System.out.println(
"
ObjectToBlob
"
);
return
null
;
}
}
/*
* java.sql.Blob 转化成 对象 相应对?br /> * 要求 对象是序列化?br />
*/
public
Object BlobToObject(java.sql.Blob desblob,Object obj)
throws
IOException{
try
{
ObjectInputStream in
=
new
ObjectInputStream(desblob.getBinaryStream());
obj
=
in.readObject();
in.close();
return
obj;
}
catch
(Exception e) {
//
TODO: handle exception
System.out.println(
"
BlobToObject
"
);
e.printStackTrace();
return
null
;
}
}
]]>
2. 被声明ؓfinal的变量必d声明时给定初|而在以后的引用中只能dQ不可修攏V?br />
3. 匿名的内部类是没有名字的内部cR不?/span>extends(l承) 其它c,但一个内部类可以作ؓ一个接口,由另一个内部类实现?br />
4. 静态内部类Q?/span>Inner ClassQ写成这h可以 在内?new ?Q?static final public class XXXxx
1.创徏一?/span>static内部cȝ对象Q不需要一个外部类对象
2不能从一?/span>static内部cȝ一个对象访问一个外部类对象
5.
如果在子cM定义某方法与其父cL相同的名U和参数Q我们说该方法被重写 (Overriding)?/span>
]]>
@author 作?br /> @see 另请参见
Q?Q、@see "string" ?string"d文本,不生链接?br /> Q?Q、@see <a href="URL#Value">Label</a> 使用HTML标记产生链接
Q?Q、@see package.class#member Label 使用Java语言的名字package.class #member产生链接?
@param 参数说明
*/ 的就q原?在那个上面就为那个注?/dt>
参照Qhttp://java.ccidnet.com/art/3743/20031203/519697_1.html
/** class description
*/
3、Variable Description:描述变量的意义和取值含义?br /> /** var variable description
*/
4、Method Description:标明每个Ҏ的输入、输出参数和q回值类型,说明Ҏ变量取值的含义。相关类文链接?br />
/** method description
* @param var signification Ҏ参数说明
* @exception exception class name throws 说明
* @return return_value return signification return 说明
*/
5、Association Description:兌cL描qͼ在注释当中需要参引其它文描q的地方Q可在相应的注释当中如下插入Q?br /> /** method description
* @param var signification
* @exception exception class name
* @return return_value return signification
* @see package.class#member label
*/
6、包描述文gQ概括描q包的功能和设计概要。ؓ每个包创Z个描q文Ӟ命名为package.htmlQ与包的java文g攑֜一赗?
]]>
2.cȝ?( alt+shift+V )
3.Ҏ上移父类,下移子类 (alt+shift+T) + U/D
4.Ҏ接口化?(alt+shift+T) +T
5.部分代码提升为方?alt+shift+M
6.局部变量提升ؓcd?alt+shift+F
.............
***************************************************************
Ctrl+M: 工作区最大化/最化
Alt+/: 提示
F3: 察看声明
Crtl+1: 修正错误
Shift+Alt+T: 重构
Shift+Alt+M: 提取函数
Shift+Alt+R: 重命?
Shift+Alt+C: 更改函数标记
Ctrl+Shitf+F: 格式化代?
]]>
在框架中 发现 ConfigHelpercvC作用 ?br />l合自己开发需求,写出了自q 带查询文件功能类
扩展的主要部分在 findFileҎ q用了一?单的数据l构有兴的可以看看
试Q?/b>
文gskynet.xml
<xml-body>
<man id='1'>
<name>刘凯?/span></name>
<avg>24</avg>
</man>
<man id='2'>
<name>heha</name>
<avg>25</avg>
</man>
</xml-body>
试c?/font>
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.XMLDocumentContainer;
import junit.framework.TestCase;
public class SkynetConfigTest extends TestCase {
protected void setUp() throws Exception {
super.setUp();
}
public void testConfigFile(){
System.out.println(
//find file in System user.dir -> skynet.xml
SkynetConfig.getResourceAsFile(System.getProperty("user.dir") ,
"skynet.xml").getPath()
);
System.out.println(
//find file in System java.class.path -> skynet.xml
SkynetConfig.getResourceAsFile(System.getProperty("java.class.path") ,
"skynet.xml").getPath()
);
}
public void testConfigURL(){
JXPathContext jx = JXPathContext.newContext(new XMLDocumentContainer(
// in System user.dir,java.class.path find url:skynet
SkynetConfig.getResourceAsURL("skynet.xml")
));
System.out.println( jx.getValue("//man[avg='24']/@id") );
System.out.println( jx.getValue("//man[avg='24']/name") );
}
public void testConfigStream(){
System.out.println( SkynetConfig.getResourceAsStream("skynet.xml") );
}
}
l果Q?br />E:\src3\rlzy15\lmisWeb\WEB-INF\classes\test\config\skynet.xml
E:\src3\rlzy15\lmisWeb\WEB-INF\classes\test\config\skynet.xml
1
刘凯?br />java.io.FileInputStream@1551d7f
SkynetConfig c?/span>
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.XMLDocumentContainer;
import org.hibernate.util.ConfigHelper;
public class SkynetConfig {
public static final URL getResourceAsURL(final String path) {
URL url = null;
// First, try to locate this resource through the current
// context classloader.
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
if (contextClassLoader!=null) {
url = contextClassLoader.getResource(path);
}
if (url != null)
return url;
// Next, try to locate this resource through this class's classloader
url = ConfigHelper.class.getClassLoader().getResource(path);
if (url != null)
return url;
// Next, try to locate this resource through the system classloader
url = ClassLoader.getSystemClassLoader().getResource(path);
if(url !=null)
return url;
File ff = getResourceAsFile(System.getProperty("user.dir") ,path);
if(ff==null)
ff = getResourceAsFile(System.getProperty("java.class.path") , path);
try {
url = new URL("file:/"+ff.getPath());
} catch (Exception e) {e.printStackTrace();}
return url;
}
public static InputStream getResourceAsStream(final String resource) {
String stripped = resource.startsWith("/") ?
resource.substring(1) : resource;
InputStream stream = null;
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader!=null) {
stream = classLoader.getResourceAsStream( stripped );
}
if ( stream == null ) {
SkynetConfig.class.getResourceAsStream( resource );
}
if ( stream == null ) {
stream = SkynetConfig.class.getClassLoader().getResourceAsStream( stripped );
}
if ( stream == null ) {
File ff = getResourceAsFile(System.getProperty("user.dir") ,resource);
if(ff==null)
ff = getResourceAsFile(System.getProperty("java.class.path") , resource);
try {
stream = new FileInputStream(ff);
if(stream==null)
throw new Exception( resource + " not found" );
} catch (Exception e) {e.printStackTrace();}
}
return stream;
}
public static File getResourceAsFile(String str,String findff){
String[] sfd = str.split(";");
for(int i=0;i<sfd.length;i++){
File file = new File(sfd[i]);
if( file.isDirectory()){
File[] cfs = file.listFiles();
for(int j=0;j<cfs.length;j++){
File ff = findFile(cfs[j],findff);
if(ff==null)continue;
else return ff;
}
}
}
return null ;
}
private static File findFile(File file,String findff){
if(file.isFile() && file.exists() && isFileEqu(file,findff) ) return file ;
else if( file.isDirectory() ){
File[] cfs = file.listFiles();
for(int i=0;i<cfs.length;i++){
File ff = findFile(cfs[i],findff);
if(ff==null)continue;
if( isFileEqu(ff,findff) ){
return ff;
}
}
}
return null ;
}
private static boolean isFileEqu(File ff,String findff){
String path = ff.getPath().trim() ;
String findfft = findff.trim() ;
if( path.lastIndexOf( findfft )>0)return true;
return false;
}
}
]]>