前面的开发基本已经完成了。接下来的工作是使得Editor能够持久化到本地。

在下一次启动时,能够自动打开原来已经打开的Editor.

第一步:将EditorInput持久化

让EditInput实现IPersistableElement,并且在getPersistable()返回this.

代码
    @Override
    
public IPersistableElement getPersistable() {
        
return this;
    }

    @Override
    
public String getFactoryId() {
        
// TODO Auto-generated method stub
        return null;
    }

    @Override
    
public void saveState(IMemento memento) {
        
// TODO Auto-generated method stub
        
    }


 

第二步:定义Factory的扩展以及在getFactory中返回这个ID

代码
   <extension
         point
="org.eclipse.ui.elementFactories">
      
<factory
            
class="com.sg.intellifmea.editor.ProjectEditorInputFactory"
            id
="com.sg.intellifmea.editor.ProjectEditorInputFactory">
      
</factory>
   
</extension>
    @Override
    
public String getFactoryId() {
        
return "com.sg.intellifmea.editor.ProjectEditorInputFactory";
    }

第三步:实现saveState(IMemento memento),将EditorInput保存到本地的memento中

 

    @Override
    
public void saveState(IMemento memento) {
        
if(data!=null&&data.getOuid()!=null){
            memento.putString(
"ouid", data.getOuid());
        }        
    }


第四步:实现 IElementFactory

代码
public class ProjectEditorInputFactory implements IElementFactory {

    @Override
    
public IAdaptable createElement(IMemento memento) {
        String ouid 
= memento.getString("ouid");
        
return new ProjectInput(new LazyDTO(ouid));
    }

}


看起来已经完成了 ,但是,似乎还是不能自动打开上次退出系统时没有关闭的编辑器

检查后,发现EditorInput中还有一个方法要改:

 

    @Override
    
public boolean exists() {
        
return true;
    }

exists返回ture,告知系统这个input是否还存在。

可以理解editor是面向客户端文件设计的,而显示来自数据库的数据时,应当考虑数据库的这条记录以及所编辑的记录是否还存在或者完整。上面的内容我不详细写完了。可以根据自己的逻辑需要来写。

 

 

 

 

 

 

 

 

 

 

 

posted on 2009-12-03 13:54  钟华  阅读(1216)  评论(0编辑  收藏  举报