Package org.jbpm.ui.editor.ltk

Source Code of org.jbpm.ui.editor.ltk.DelegablePresentation$DocumentChangeExt

package org.jbpm.ui.editor.ltk;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.DocumentChange;
import org.eclipse.ltk.ui.refactoring.TextEditChangeNode;
import org.eclipse.text.edits.MultiTextEdit;
import org.eclipse.text.edits.ReplaceEdit;
import org.jbpm.ui.common.model.Delegable;

public class DelegablePresentation extends Presentation {
    private final Delegable delegable;
    private final Document document = new Document();
    private final String name;

    public DelegablePresentation(final Delegable delegable, String name, String variableName, String replacement) {
        super(variableName, replacement);
        this.delegable = delegable;
        this.name = name;
        document.addDocumentListener(new IDocumentListener() {
            public void documentAboutToBeChanged(DocumentEvent de) {
            }
            public void documentChanged(DocumentEvent de) {
                delegable.setDelegationConfiguration(de.getDocument().get());
            }
        });
    }

    @Override
    public List<Change> getChanges() throws Exception {
        List<Change> changes = new ArrayList<Change>();
        document.set(delegable.getDelegationConfiguration());

        int offset = 0;
        MultiTextEdit multiEdit = new MultiTextEdit();
        int len = variableName.length();
        while (offset > -1) {
            if (offset >= document.getLength()) {
                break;
            }
            offset = document.search(offset, variableName, true, true, true);
            if (offset == -1) {
                break;
            }
            ReplaceEdit replaceEdit = new ReplaceEdit(offset, len, replacement);
            multiEdit.addChild(replaceEdit);
            offset += len; // to avoid overlapping
        }
       
        if (multiEdit.getChildrenSize() > 0) {
            DocumentChange change = new DocumentChangeExt(name, document);
            change.setEdit(multiEdit);
            changes.add(change);
        }
        return changes;
    }

    private class DocumentChangeExt extends DocumentChange {

        public DocumentChangeExt(String name, IDocument document) {
            super(name, document);
        }
       
        @Override
        public Object getAdapter(Class adapter) {
            if (adapter == TextEditChangeNode.class) {
                return new GPDChangeNode(this, delegable.getClass());
            }
            return super.getAdapter(adapter);
        }
    }
}
TOP

Related Classes of org.jbpm.ui.editor.ltk.DelegablePresentation$DocumentChangeExt

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.