知识大全 在Eclipse中扩展RefactoringWizard 框架
Posted 框架
篇首语:我自横刀向天笑,去留肝胆两昆仑。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Eclipse中扩展RefactoringWizard 框架相关的知识,希望对你有一定的参考价值。
在Eclipse中扩展RefactoringWizard 框架 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
扩展RefactoringWizard 框架 Eclipse中的RefactoringWizard框架扩展了Eclipse的Wizard框架 关于Wizard框架的介绍可以在Eclipse的帮助系统中找到 这里我们仅从OO设计和架构的角度探讨一下RefactoringWizard框架 我们从Wizard相关的几个类开始 WizardPage类 WizardPage是一个包含了多个界面元素(比如文本框Text 按钮Button)的一个界面组合部分 各个Page之间是独立的 是可以动态加载的 WizardPage类的职责有 ·组合SWT界面元素 构造出一个界面页 ·定义本身界面元素的操作行为 在RefactoringWizard框架中预设了两个通用的属性页 PreviewWizardPage和ErrorWizardPage PreviewWizardPage类是用来预览重构后的修改 对比代码或其他资源的变化 ErrorWizardPage类是用来处理条件检查及错误状态通知的 我们只需扩展RefactoringWizard框架就可以自动获取这两项强大的功能 Wizard类 一个Wizard就是一个装载一系列WizardPage页的容器 Wizard类的职责有 ·装载一系列WizardPage 构造出一个复杂的界面 ·装载领域类来处理具体业务逻辑 (在RefactoringWizard框架中这个类就是Refactoring类) 维护WizardPage页之间以及页与领域类之间的数据传递和状态共享 (在这里要补充一点 其实在具体RefactoringWizard框架的实现中有专门的类来分担这部分职责 ) 我们的界面行为可以千变万化(通过组合不同的WizardPage) 而负责处理业务逻辑的领域类也可以独立的变化 你可以随意扩展Wizard的界面功能(-对扩展开放) 而不用修改现有RefactoringWizard框架(-对修改封闭) 这正是OO设计的最基本原则-OCP(Open Close Principle) WizardDialog类 这个对话框类的主要职责是构造一个完整的GUI界面以及操作界面 它预设了一些按钮(Back Next Finish Cancel)等界面元素 它负责装载Wizard类 操作时通过按钮Back Next来在多个WizardPage之间切换 下面我们给出RefactoringWizard框架的架构图 > 从图 中我们可以看到 如果我们把每一个WizardPage页看作一项业务 那么Refactoring正是处理业务逻辑的控制中心 它封装了所有对业务逻辑的处理 当然它可以在将处理任务委任出去 但请注意 它并不负责实现业务流程 也就是说各业务(各个Page界面)之间的逻辑顺序关系不由它维护 RefactoringWizard框架充分考虑到了应用的可扩展性 它在SWT的MVC(模型-视图-控制)元架构模式的基础上 添加了一些新的架构元素 MVC模式促使业务逻辑与界面分离 界面与控制行为分离 而RefactoringWizard框架增强了界面本身分离的特性 它将一个完整的界面分拆成多个页面 用户可以动态组合这些页面或添加新的页面来扩展界面行为 这种特性-界面的动态组合 低耦合 高内聚 封装良好的接口-让我们领略到了OO设计的精髓 下面我们通过以下几个步骤来扩展RefactoringWizard框架 ·扩展RefactoringWizardPage ·扩展RefactoringWizard ·启动RefactoringWizard 第一步 扩展RefactoringWizardPage 首先我们新建一个类AnnotationRefactoringWizardPage 它需要继承UserInputWizardPage类(其父类是RefactoringWizardPage 而RefactoringWizardPage最终实现了IDialogPage接口) 接下来就是实现IDialogPage接口的createControl(…)方法 在这个方法里实现你的界面行为 比如我们例子中的TimeOut文本框 代码清单如下 清单 /** * create posite to add UI elements */ public void createControl(Composite parent) // define UI Composite posite = new Composite(parent SWT NONE); GridLayout lay = new GridLayout(); lay numColumns = ; posite setLayout(lay); btnCheck = new Button(posite SWT CHECK); btnCheck setText( Add timeout parameter ); GridData gdBtnCheck = new GridData(); gdBtnCheck horizontalSpan = ; gdBtnCheck horizontalAlignment = GridData FILL; btnCheck setLayoutData(gdBtnCheck); labName = new Label(posite SWT WRAP); labName setText( TimeOut: ); GridData gdLabName = new GridData(); gdLabName horizontalAlignment = GridData BEGINNING; gdLabName grabExcessHorizontalSpace = true; labName setLayoutData(gdLabName); txtTimeOut = new Text(posite SWT SINGLE | SWT BORDER); GridData gdTxtTimeOut = new GridData(); gdTxtTimeOut horizontalAlignment = GridData END; gdLabName grabExcessHorizontalSpace = true; txtTimeOut setLayoutData(gdTxtTimeOut); txtTimeOut setText( ); // init status labName setEnabled(false); txtTimeOut setEnabled(false); // add listener defineListener(); // 将posite纳入框架的控制 setControl(posite); Dialog applyDialogFont(posite); 在这里我们要特别注意的一点是在定义完我们的界面元素后 需要将自定义的Composite纳入框架的控制 就是这行代码 setControl(posite); 在我们处理完输入数据检查后进入下一页面之前 我们需要设置页面完成的状态 以及传递输入数据到领域类Refactoring 我们用以下代码设置好页面完成的状态后 下个页面ErrorWizardPage就会处理显示逻辑 清单 private void notifyStatus(boolean valid String message) //设置错误信息 setErrorMessage(message); //设置页面完成状态 setPageComplete(valid); 传递输入数据通过以下代码来处理 清单 private void setRefactoring(boolean selection String text) AnnotationRefactoring refactoring = (AnnotationRefactoring) getRefactoring(); refactoring setNeedTimeout(true); if(selection) refactoring setTimeout(Integer valueOf(txtTimeOut getText()) intValue()); 其中getRefactoring()方法是继承自RefactoringWizardPage的方法 由于我们的RefactoringWizard类装载了RefactoringWizardPage和Refactoring类 这个方法是从RefactoringWizard类中获得的 这里面用到了Observer设计模式 至此 我们完成RefactoringWizardPage的扩展 第二步 扩展RefactoringWizard 首先我们新建一个类AnnotationRefactoringWizard 它需要继承RefactoringWizard类 这个类中我们只需要加载定义好的AnnotationRefactoringWizardPage类和AnnotationRefactoring类 当然复杂的处理已经有RefactoringWizard框架处理好了 下面我们在构造函数中加载Refactoring类 清单 public AnnotationRefactoringWizard(Refactoring refactoring) super(refactoring WIZARD_BASED_USER_INTERFACE); 然后我们加载我们的AnnotationRefactoringWizardPage类 只需重载父类RefactoringWizard的addUserInputPages()方法就可以 清单 protected void addUserInputPages() page = new AnnotationRefactoringWizardPage( refactor annotation ); addPage(page); 第三步 启动RefactoringWizard 扩展好RefactoringWizard之后 就需要在用户点击菜单项或是按钮时弹出这个对话框 RefactoringWizard最好使用RefactoringWizardOpenOperation类来打开(当然也可以用RefactoringWizardDialog) RefactoringWizardOpenOperation首先进行重构的初始检查 通过后才打开RefactoringWinzard对话框 否则就会打开错误对话框 前面完成创建插件工程时我们提到 弹出RefactoringWizard对话框的代码应该放到响应菜单操作的类的run函数中 具体到本文工程中 就是把下面的代码放到AnnotationManageAction的run函数中 这些代码首先依次构造Refactoring和RefacoringWizard子类AnnotationRefactoring和AnnotationRefactoringWizard 并将AnnotationRefactoring的引用传递给AnnotationRefactoringWizard 然后用RefactoringWizardOpenOperation打开AnnotationRefactoringWizard 弹出向导对话框 清单 public void run(IAction action) Shell shell = window getShell(); AnnotationRefactoring refactor = new AnnotationRefactoring(select); AnnotationRefactoringWizard wizard = new AnnotationRefactoringWizard(refactor); RefactoringWizardOpenOperation op = new RefactoringWizardOpenOperation(wizard); try op run(shell Inserting @Override Annotation ); catch (InterruptedException e) e printStackTrace(); 小结 在Eclipse中有效的利用重构能够大大的减轻软件开发人员的工作负担 提高软件的健壮性 然而 目前重构仍然处在一个工具缺乏的时代 以Eclipse为例 只有JDT提供的重构工具最为完善 而针对其他语言例如C++ Python等的开发环境 都缺乏对应的重构功能 通过本文提供的方法 我们能够有效的利用Eclipse中的重构框架创建新的重构 从而进一步提高已有开发环境的效率 cha138/Article/program/Java/ky/201311/28785相关参考
扩展Eclipse的Java开发工具(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何扩
扩展Eclipse的Java开发工具(四) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 怎样分
Eclipse中的扩展点机制存在的理由 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 众所周知E
Eclipse重构功能:扩展点的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Eclips
在eclipse中使用jetty是非常简单的对于其他的ide配置基本上都一致以前如果想调试web服务必须要在庞大的开发插件下进行如myeclipse其实只是需要简单
开源技术:在Eclipse中构建备忘单 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Eclip
在Eclipse中编写JavaFX 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们今天先来看
Java深入:在Eclipse中如何利用Maven 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 在Eclipse中使用Hibernate一(组图)
在Eclipse中使用Hibernate一(组图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
如何在Eclipse中调试JBoss应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一般来说在J