1. 產生樹狀選單搜尋
用來執行搜尋工作的thread
public class SubChannelCategoryFinder implements Runnable {
//private Logger logger = Logger.getLogger(getClass());
private Logger logger = LoggerFactory.getLogger(this.getClass());
private Integer parentId;
private ChannelCategoryDao channelCategoryDao;
private List<ChannelCategoryView> subChannelCategoryView;
public List<ChannelCategoryView> getSubChannelCategoryView() {
return subChannelCategoryView;
}
public void setSubChannelCategoryView(List<ChannelCategoryView> subChannelCategoryView) {
this.subChannelCategoryView = subChannelCategoryView;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public SubChannelCategoryFinder(ChannelCategoryDao channelCategoryDao, Integer parentId) {
this.channelCategoryDao = channelCategoryDao;
this.parentId = parentId;
}
@Override
public void run() {
// TODO Auto-generated method stub
Calendar startCal = Calendar.getInstance();
logger.debug("Root finder(Id="+ parentId +") start at "
+ DateUtil.getInstance().getYYYYMMDDWithMilliFormat().format(startCal.getTime()));
//because the session is out of the service control, so here we have to control the
//session's close manually.
Session session = channelCategoryDao.getSession();
try{
subChannelCategoryView = channelCategoryDao.getChannelCategory(parentId, session);
}finally {
channelCategoryDao.closeSession(session);
}
//subChannelCategoryView = indexService.getSubChannelCategory(parentId);
if (subChannelCategoryView.size() > 0) {
List<SubChannelCategoryFinder> subFinders = new ArrayList<SubChannelCategoryFinder>();
for (ChannelCategoryView view : subChannelCategoryView) {
//SubChannelCategoryFinder finder = new SubChannelCategoryFinder(channelCategoryDao, view.getId());
SubChannelCategoryFinder finder = new SubChannelCategoryFinder(channelCategoryDao, view.getId());
subFinders.add(finder);
Thread thread = new Thread(finder);
String finderName = view.getName() + "(id=" + view.getId() + ") subCategory finder";
thread.setName(finderName);
thread.setDaemon(true);
logger.debug("subFinder " + finderName + "start at "
+ DateUtil.getInstance().getYYYYMMDDWithMilliFormat().format(new Date()));
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Calendar endCal = Calendar.getInstance();
long difference = endCal.getTimeInMillis() - startCal.getTimeInMillis();
logger.debug("all finder has execute complete at "
+ DateUtil.getInstance().getYYYYMMDDWithMilliFormat().format(endCal.getTime()));
logger.debug("Totally consume " + difference + " milli seconds");
for (ChannelCategoryView view : subChannelCategoryView) {
for (SubChannelCategoryFinder finder : subFinders) {
if (view.getId().intValue() == finder.getParentId().intValue()
&& finder.getSubChannelCategoryView().size() > 0) {
view.setSubChannelCategoryView(finder.getSubChannelCategoryView());
break;
}
}
}
}
}
}
叫用Finder產生Menu
public List<ChannelCategoryView> getChannelCategoryMenu(ChannelCategoryModel model) {
// TODO Auto-generated method stub
SubChannelCategoryFinder finder = new SubChannelCategoryFinder(channelCategoryDao,
model.getChannelCategoryId());
Thread thread = new Thread(finder);
String finderName = "id=" + model.getChannelCategoryId() + "'s subCategory finder";
thread.setName(finderName);
thread.setDaemon(true);
logger.info("RootId= " + model.getChannelCategoryId() + ", subCategory as follow:");
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<ChannelCategoryView> result = new ArrayList<ChannelCategoryView>();
result = finder.getSubChannelCategoryView();
return result;
}
沒有留言:
張貼留言