All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aspectj.ajde.ui.swing.GoToLineThread Maven / Gradle / Ivy

/* *******************************************************************
 * Copyright (c) 1999-2001 Xerox Corporation,
 *               2002 Palo Alto Research Center, Incorporated (PARC).
 * All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v 2.0
 * which accompanies this distribution and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
 *
 * Contributors:
 *     Xerox/PARC     initial implementation
 *     Helen Hawkins  Converted to new interface (bug 148190)
 * ******************************************************************/



package org.aspectj.ajde.ui.swing;

import javax.swing.SwingUtilities;

import org.aspectj.ajde.Ajde;
import org.aspectj.ajde.EditorAdapter;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.Message;

/**
 * Used to ensure that a source line has been seeked to.  Will repeatedly attempt
 * to seek to the line until this has succeeded.
 *
 * @author	Mik Kersten
 */
public class GoToLineThread extends Thread {
	private EditorAdapter editorAdapter = null;

    private int lineNumber = 0;
    private String fileToSeekTo = "";
    private boolean finished = false;

    public boolean isFinished() {
        return finished;
    }

    public boolean needsRetry() {
        return !this.isAlive() && !finished;
    }

    public GoToLineThread(String fileToSeekTo, int lineNumber, EditorAdapter editorAdapter) {
        this.lineNumber = lineNumber;
        this.fileToSeekTo = fileToSeekTo;
        this.editorAdapter = editorAdapter;
    }

    public void run() {

        while(true) {
            String file = editorAdapter.getCurrFile();
            if (file != null) {
                if (file.equals(this.fileToSeekTo)) {
                    try {
                    SwingUtilities.invokeAndWait( new Runnable() {
                        public void run() {
                            editorAdapter.showSourceLine(lineNumber, true);
                        }
                    });
                    } catch (Exception e) {
                    	Message msg = new Message("Could not seek to line.",IMessage.ERROR,e,null);
                    	Ajde.getDefault().getMessageHandler().handleMessage(msg);
                    }
                    finished = true;
                    break;
                }
                shortPause();
            }
        }
    }

    private void shortPause() {
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy