Package org.jbpm.ui.editor.ltk

Source Code of org.jbpm.ui.editor.ltk.FormNodePresentation

package org.jbpm.ui.editor.ltk;

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

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.jface.text.Document;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.CompositeChange;
import org.eclipse.ltk.core.refactoring.TextFileChange;
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.FormNode;
import org.jbpm.ui.resource.Messages;
import org.jbpm.ui.util.IOUtils;

public class FormNodePresentation extends Presentation {
    private final FormNode formNode;
    private final IFolder folder;

    public FormNodePresentation(IFolder folder, FormNode formNode, String variableName, String replacement) {
        super(variableName, replacement);
        this.folder = folder;
        this.formNode = formNode;
    }

    @Override
    public List<Change> getChanges() throws Exception {
        CompositeChange result = new CompositeChange(formNode.getName());
        if (formNode.hasForm()) {
            IFile file = folder.getFile(formNode.getFormFileName());
            result.addAll(processFile(file, Messages.getString("Search.formNode.form")));
        }
        if (formNode.hasFormValidation()) {
            IFile file = folder.getFile(formNode.getValidationFileName());
            result.addAll(processFile(file, Messages.getString("Search.formNode.validation")));
        }
        if (result.getChildren().length > 0)
            return Arrays.asList((Change) result);
        return new ArrayList<Change>();
    }

    private Change[] processFile(IFile file, final String label) throws Exception {
        Document document = new Document();
        String text = IOUtils.readStream(file.getContents());
        document.set(text);

        List<Change> changes = new ArrayList<Change>();

        int offset = 0;   // TODO in forms use "\" + varName + "\"
        MultiTextEdit multiEdit = new MultiTextEdit();
        int len = variableName.length();
        while (offset > -1) {
            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) {
            TextFileChange fileChange = new TextFileChange(file.getName(), file) {
                @Override
                public Object getAdapter(Class adapter) {
                    if (adapter == TextEditChangeNode.class) {
                        return new GPDChangeNode(this, null, label);
                    }
                    return super.getAdapter(adapter);
                }
            };
            fileChange.setEdit(multiEdit);
            changes.add(fileChange);
        }
        return changes.toArray(new Change[changes.size()]);
    }
}
TOP

Related Classes of org.jbpm.ui.editor.ltk.FormNodePresentation

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.