Package org.erlide.ui.internal.compare

Source Code of org.erlide.ui.internal.compare.ErlStructureDiffViewerCreator$ErlViewerComparator

package org.erlide.ui.internal.compare;

import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.IViewerCreator;
import org.eclipse.compare.structuremergeviewer.DiffNode;
import org.eclipse.compare.structuremergeviewer.StructureDiffViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.widgets.Composite;

public class ErlStructureDiffViewerCreator implements IViewerCreator {

    @Override
    public Viewer createViewer(final Composite parent, final CompareConfiguration config) {
        final StructureDiffViewer viewer = new StructureDiffViewer(parent, config);
        viewer.setStructureCreator(new ErlStructureCreator());
        viewer.setComparator(new ErlViewerComparator());
        return viewer;
    }

    private static class ErlViewerComparator extends ViewerComparator {
        public ErlViewerComparator() {
        }

        @Override
        public int compare(final Viewer viewer, final Object e1, final Object e2) {
            final ErlNode en1 = getErlNode(e1);
            final ErlNode en2 = getErlNode(e2);
            if (en1 != null && en2 != null) {
                return en1.getRange().getOffset() - en2.getRange().getOffset();
            }
            return super.compare(viewer, e1, e2);
        }

        private ErlNode getErlNode(final Object e) {
            if (e instanceof DiffNode) {
                final DiffNode d = (DiffNode) e;
                final ITypedElement left = d.getLeft();
                if (left instanceof ErlNode) {
                    return (ErlNode) left;
                }
                final ITypedElement right = d.getRight();
                if (right instanceof ErlNode) {
                    return (ErlNode) right;
                }
            }
            return null;
        }
    }
}
TOP

Related Classes of org.erlide.ui.internal.compare.ErlStructureDiffViewerCreator$ErlViewerComparator

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.