zoukankan      html  css  js  c++  java
  • 关于gmf编辑器的保存操作

    a)    First, in class DiagramDocumentEditor, the method 
    public void doSave(IProgressMonitor progressMonitor) { }
    b)    Second, the method above call the methon:
    protected void performSave(boolean overwrite, IProgressMonitor progressMonitor) {}
    this method is in class DiagramDocumentEditor.
    c)AbstractDocumentProvider)中的方法
    public final void saveDocument(IProgressMonitor monitor, final Object element, final IDocument document, final boolean overwrite) throws CoreException {

            
    if (element == null)
                
    return;


            executeOperation(getSaveOperation(element, document, overwrite), monitor);
        }
    d)    在自己的Document provider里面冲载方法
    protected void saveDocumentToFile(IDocument document, IFile file,
                
    boolean overwrite, IProgressMonitor monitor) throws CoreException {}
            
    e)    FileDiagramDocumentProvider种的方法
    protected void saveDocumentToFile(IDocument document, IFile file, boolean overwrite, IProgressMonitor monitor)
            
    throws CoreException {
            Diagram diagram 
    = (Diagram)document.getContent();
            Resource resource 
    = diagram.eResource();
            IFile resourceFile 
    = WorkspaceSynchronizer.getFile(resource);
            
    // if the diagram in the document is referring to another file, then we should
            
    // create a copy of this diagram and save it to the new file, save as scenario.
            if(resourceFile != null && !resourceFile.equals(file)) {
                diagram 
    = copyDiagramResource(diagram, file);
            }
            IDiagramDocument diagramDocument 
    = (IDiagramDocument)document;
            TransactionalEditingDomain domain 
    = diagramDocument.getEditingDomain();
            doSave(domain, file, diagram, 
    null, monitor);
        }

    protected void doSave(TransactionalEditingDomain domain, IFile file,
                Diagram diagram, Map options, IProgressMonitor monitor)
            
    throws CoreException {
            
    if (options == null) {
                DiagramIOUtil.save(domain, file, diagram, DiagramIOUtil
                    .hasUnrecognizedData(diagram.eResource()), monitor);
            } 
    else {
                DiagramIOUtil.save(domain, file, diagram, monitor, options);
            }
    }


    static public void save(TransactionalEditingDomain domain, IFile file, Diagram diagram, boolean bKeepUnrecognizedData, IProgressMonitor progressMonitor) throws CoreException {
            Map options 
    = new HashMap();
            
    if(bKeepUnrecognizedData)
                options.put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
            save(domain, file, diagram, progressMonitor, options);
        }

    static public void save(TransactionalEditingDomain domain, IFile file, Diagram diagram, IProgressMonitor progressMonitor, Map options) throws CoreException {
            Resource notationModel 
    = ((EObject) diagram).eResource();
            String fileName 
    = file.getFullPath().toOSString();
            notationModel.setURI(URI.createPlatformResourceURI(fileName, 
    true));
            
    try {
                notationModel.save(options);
            } 
    catch (IOException e) {
                
    throw new CoreException(new Status(IStatus.ERROR, EditorPlugin
                    .getPluginId(), EditorStatusCodes.RESOURCE_FAILURE, e
                    .getLocalizedMessage(), 
    null));
            }

            
    if (progressMonitor != null)
                progressMonitor.done();
        }
  • 相关阅读:
    堪称为经典游戏设计帖整理20个点击回复超高的精品贴
    【专题报道】Google I/O开发者大会
    android用户界面之AlarmManager教程实例汇
    Android2.2 API 中文文档系列
    ruby设计模式之【观察者】模式2————更加一般化的观察者模式
    ruby中require和load的区别
    ruby/python/java全覆盖的SeleniumWebdriver系列教程(1)————快速开始
    ruby + nokogiri实现将天涯易读全帖转换成txt文件的功能
    WatirWebdriver与watir1.x的差异
    Notepad++ 的一些常用快捷键
  • 原文地址:https://www.cnblogs.com/youngerbaby/p/411363.html
Copyright © 2011-2022 走看看