org.eclipse.ui.console指南

org.eclipse.ui.console指南

hanlray@hotmail.com

Revision: 0.9 Date: 2005/07/07


org.eclipse.ui.console是一个可扩展的console视图插件,利用它可以实现各种console,并把它们显示出来。该插件本身就实现了一个Message Console,对于只需要进行消息输出的RCP应用来说,其功能已经足够:

  • 调用ConsolePlugin.getDefault().getConsoleManager()得到一个IConsoleManager引用
  • 创建所需的MessageConsole,并把它(们)加入到上一步得到的Console Manager里
  • 调用MessageConsole.newMessageStream()得到连接这个Console的输出流(MessageConsoleStream)
  • 通过MessageConsoleStream的print,println方法进行消息的输出。当然需要把Console View打开才能看到 输出,可以利用Window/Show View来打开,或者把该View在放到自己实现的Perspective的初始布局中

下面简要列举其设计及实现要点:

  • 作为一个通用的console及其显示的框架,org.eclipse.ui.console定义了以下几个接口:
    • IConsole. 代表一个Console,主要方法是createPage,用来创建该Console在Console View中的分页
    • IConsole Manager. 代表一个Console Manager,对Console进行管理
    • IConsoleListener. 代表一个Console Listener,当Console被加进Console Manager中或从中删除时会得到通知
    • IConsoleView. 代表Console View,用来显示各个Console
  • org.eclipse.ui.console本身实现了一个Console View,通过在org.eclipse.ui.views扩展点上扩展的方式。 该实现已经相当一般化,一般情况下是不需要实现自己的Console View的.它的实现类是ConsoleView,是一个 PageBookView,每个Console以一个Page的方式呈现,效果就是我们在eclipse里看到的那个Console标签页。
  • Console和PageBookView Page的关系。简言之,就是MVC中Model和View的关系,Model是Console,Page负责把它显示出来。对于TextConsole和TextConsolePage, 这种Model-View关系是通过TextConsole和(TextConsolePage所关联的)TextConsoleViewer之间的Model-View关系来实现的,如图所示。 再看TextConsole和TextConsoleViewer的Model-View关系的实现:TextConsole关联一个ConsoleDocument,实现了IDoucment接口,而 TextConsoleViewer是一个TextViewer,在其构造函数中设置其Document为TextConsole关联的Document(ConsoleDocument),由此可以 看出,TextConsole和TextConsolePage之间的Model-View关系最终还是由jface text框架的IDocument和TextViewer之间的Model-View 关系来实现的。Console和其Page的关系是通过IConsole的createPage方法来建立的,比如,TextConsole的createPage创建的TextConsolePage对象 保存了相应TextConsole对象的引用;对于MessageConsole来说,由于它没有覆盖IOConsole的createPage方法,因此创建的是一个IOConsolePage对象, 该IOConsolePage对象保存的虽然是一个TextConsole引用, 但其实际类型是MessageConsole。
  • 当向第1步得到的Console Manager里加Console时,如果此时ConsoleView已经实例化,则它会是该Console Manager 的一个Console Listener,因此会受到consolesAdded的事件通知,ConsoleView对此事件的处理是调用相应 Console的createPage方法创建一个IPageBookViewPage并显示它。如果ConsoleView是以后实例化的,则它实例化时会从Console Manager取到当前在Console Manager中的所有Console,对每个Console创建一个 IPageBookViewPage。
  • MessgaeConsole是一个IOConsole,IOConsole用于显示I/O流里的Text;而IOConsole又是一个TextConsole,TextConsole是一个抽象的文本Console,支持正则表达式匹配和超级链接,它包含一个Document,概念上就是 jface text框架中的文档概念,其实现类是ConsoleDocument。MessageConsole.createPage返回的实际上是一个 IOConsolePage,其createControl方法的实现创建了一个IOConsoleViewer,该viewer是jface text框架 的TextViewer,其Document被设置为这个MessageConsole的Document,因此当MessageConsole的Document改变时, 其Page上的TextViewer将反映该变化。
  • IOConsole关联一个Doucment Partitioner(IConsoleDocumentPartitioner),该接口扩展自jface text框架中的 IDocumentPartitioner,其实现类是IOConsolePartitioner.当通过MessageConsoleStream往MessageConsole上 输出消息时,消息实际进入了这个IOConsolePartitioner内部保存的一个消息列表里。IOConsolePartitioner里实现了一个Job Scheduling,其效果就是不断检查该消息列表,把其中的消息添加到MessageConsole的Document的末尾,当然这个工作是在另外的 线程中作的。此时如果ConsoleView已实例化,则该MessageConsole会和其Page上IOConsoleViewer相关联, 因此消息便能在该Console的Page中显示出来了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
package dao.imp; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import common.Pager; import dao.BaseDao; import dao.UserDao; import entity.User; public class UserDaoImpl extends BaseDao implements UserDao { //根据SQL查询所有用户信息 public List<User> getusersBySql(String sql,Object...args){ List<User> list = new ArrayList<User>(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConn(); pstmt = conn.prepareStatement(sql); if(args!=null&&args.length>0){ for(int i = 0;i<args.length;i++){ pstmt.setObject(i+1, args[i]); } } rs = pstmt.executeQuery(); while(rs.next()){ User user = new User(); user.setUserno(rs.getInt("USERNO")); user.setUsername(rs.getString("USERNAME")); user.setSex(rs.getString("SEX")); user.setAge(rs.getInt("AGE")); user.setTellphone(rs.getString("TELLPHONE")); user.setAddress(rs.getString("ADDRESS")); user.setPermission(rs.getInt("permission")); user.setPassword(rs.getString("password")); list.add(user); } } catch (Exception e) { e.printStackTrace(); }finally{ closeAll(rs, pstmt, conn); }return list; } //分页查询用户 public List<User> getUsersByPager(Pager pager,User condition){ String conditionSql = ""; String sql = "select * from (select t1.*,rownum rn from userinfo t1 where rownum<=?"; if (condition.getUsername()!=null&&!condition.getUsername().trim().equals("")) { conditionSql="and username like '%"+condition.getUsername()+"%'"; } sql+=conditionSql; sql+=") where rn>?"; List<User> list = getusersBySql(sql, pager.getCurrentPage()*pager.getPageSize(), (pager.getCurrentPage()-1)*pager.getPageSize()); String countSql = "select count(*) from userinfo where 1=1"+conditionSql; pager.setTotalCount(getUserCount(countSql)); return list; } //查询条数 public int getUserCount(String sql){ int count = 0; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConn(); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); if(rs.next()){ count = rs.getInt(1); } } catch (Exception e) { e.printStackTrace(); }finally{ closeAll(rs, pstmt, conn); } return count; } //查询所有用户信息 public List<User> getAllUsers(){ String sql = "select * from userinfo"; return getusersBySql(sql); } //根据用户名查询 public User getUserByUsernameandP(String username,String password){ String sql = "select * from userinfo where username = ? and password=?"; List<User> list = getusersBySql(sql, username,password); return list != null && list.size()>0 ? list.get(0) : null; } //根据编号查询 public User getUserByUserno(int userno){ String sql = "select * from userinfo where userno = ?"; List<User> list = getusersBySql(sql, userno); return list != null && list.size()>0 ? list.get(0) : null; } public List<User> getUserByUserno1(int userno){ String sql = "select * from userinfo where userno = ?"; List<User> list = getusersBySql(sql, userno); return list; } //增加 public int addUser(User user){ String sql = "insert into userinfo values(seq_user.nextval,?,?,?,?,?,?,?)"; return super.executeSql(sql,user.getUsername(),user.getSex(),user.getAge(),user.getTellphone(),user.getAddress(),user.getPermission(),user.getPassword()); } //修改 public int updateUser(User user){ String sql = "update userinfo set username=?,sex=?,age=?,tellphone=?,address=?,permission=? ,password=? where userno=?"; return super.executeSql(sql, user.getUsername(),user.getSex(),user.getAge(),user.getTellphone(),user.getAddress(),user.getPermission(),user.getPassword(),user.getUserno()); } //删除 public int deleteUser(String username){ String sql = "delete from userinfo where username=?"; return super.executeSql(sql, username); } public int deleteUser(int userno){ String sql = "delete from userinfo where userno=?"; return super.executeSql(sql, userno); } public int updatePassword(String password,String username){ String sql="update userinfo set password=? where username=?"; return super.executeSql(sql, password,username); } public User getUserByUsername(String username){ String sql="select * from userinfo where username=?"; List<User> list=getusersBySql(sql, username); return list != null && list.size()>0 ? list.get(0) : null; } public List<User> getUserByUsername1(String username){ String sql="select * from userinfo where username=?"; List<User> list=getusersBySql(sql, username); return list; } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值