import java.sql.SQLException;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.*;
import java.util.Iterator;
public class Function {
private List<Map<String, String>> resultAll=new ArrayList<Map<String, String>>();
private Set<String> SetAllJobName = new HashSet<String>();
public List<Map<String, String>> getListResultDependency(List list,String string,boolean isUp) throws SQLException {
List<Map<String, String>> resultAll_tmp=new ArrayList<Map<String, String>>();
if(listContainsResult(list,string,isUp)==null)
return resultAll_tmp;
else {
resultAll_tmp=listContainsResult(list,string,isUp);
resultAll.addAll(resultAll_tmp);
//System.out.println(resultAll_tmp);
for (int i = 0; i <resultAll_tmp.size(); i++) {
Map<String,String> map = (Map)resultAll_tmp.get(i);
String dependency_Job=null;
String etl_Job=null;
for(Entry<String, String> vo : map.entrySet()){
etl_Job= vo.getKey();
dependency_Job=vo.getValue();
if (isUp) {
if(!SetAllJobName.contains(dependency_Job)){
this.SetAllJobName.add(dependency_Job);
getListResultDependency(list, dependency_Job, isUp);
}
} else {
if(!SetAllJobName.contains(etl_Job)){
this.SetAllJobName.add(etl_Job);
getListResultDependency(list, etl_Job, isUp);
}
}
}
}
return resultAll_tmp;
}
}
public List<Map<String, String>> getresultAll(){
return this.resultAll;
}
public List<Map<String, String>> listContainsResult(List list,String string,boolean isUp) throws SQLException{
List<Map<String, String>> result=new ArrayList<Map<String, String>>();
if(list!=null){
if (isUp){//向上寻找
int num=0;//string在list是否存在
for(int i=0;i<list.size();i++)
{
Map map = (Map)list.get(i);
Map<String, String> resultMap = new HashMap<String, String>();
Iterator<Entry<String,String>> iter = map.entrySet().iterator();
String etl_job =null;
String dependency_Job = null;
while(iter.hasNext()){
Entry<String,String> entry = iter.next();
String key = entry.getKey();
String value = entry.getValue();
if(key.equalsIgnoreCase("etl_job")&& value.equalsIgnoreCase(string)||key.equalsIgnoreCase("dependency_Job")){
if(key.equalsIgnoreCase("etl_job")){
etl_job=value;
}else{
dependency_Job=value;
}
}
}
if(etl_job!=null&&dependency_Job!=null){
resultMap.put(etl_job,dependency_Job);
num++;
result.add(resultMap);
}
}
//循环完看string是否存在
if (num==0)
return null;
else
return result;
}else{//向下寻找
int num=0;//string在list是否存在
for(int i=0;i<list.size();i++)
{
Map map = (Map)list.get(i);
Map<String, String> resultMap = new HashMap<String, String>();
Iterator<Entry<String,String>> iter = map.entrySet().iterator();
String etl_job =null;
String dependency_Job = null;
while(iter.hasNext()){
Entry<String,String> entry = iter.next();
String key = entry.getKey();
String value = entry.getValue();
if(key.equalsIgnoreCase("dependency_Job")&& value.equalsIgnoreCase(string)||key.equalsIgnoreCase("etl_job")){
if(key.equalsIgnoreCase("etl_job")){
etl_job=value;
}else{
dependency_Job=value;
}
}
}
if(etl_job!=null&&dependency_Job!=null){
resultMap.put(etl_job,dependency_Job);
num++;
result.add(resultMap);
}
}
//循环完看string是否存在
if (num==0)
return null;
else
return result;
}
} else{
return list;
}
}
}
其中传入的参数是(List list,String string,boolean isUp)
list是依赖表全部数据,里边是map,数据结构为[{map},{map}....]
string是要查看那个任务的任务名
isUp 真 代表向上查影响性分析,假 代表向下血缘性分析
返回list [{etl_job->dependency_job},{etl_job->dependency_job},...]
实现的有点笨重呀
##是年 实现这个功能她还在身边调试BUG,感叹算不尽芸芸众生微贱命,回头看五味杂陈奈何天!祝你好运吧!。