Как получить доступ к SVNClientAdapter, который используется во время выполнения? - PullRequest
4 голосов
/ 22 сентября 2011

Я использую API Subclipse, и я хотел бы реализовать ISVNNotifyListener, чтобы я мог узнать о событиях subclipse, как они происходят во время выполнения.Я считаю, что мне нужно добавить (подписаться) мой экземпляр слушателя уведомлений на набор слушателей, о которых клиентский адаптер будет уведомлять, но я не знаю, как получить доступ к клиентскому адаптеру, который используется Subclipse во время выполнения,Есть ли способ получить к нему доступ, чтобы я мог добавить своего слушателя в набор?

1 Ответ

5 голосов
/ 22 сентября 2011

Извините, но, к сожалению, Subclipse не был закодирован таким образом, чтобы обеспечить доступ к внутренним компонентам.Subclipse создает новый объект ISVNClientAdapter для каждого вызова API, который необходимо выполнить в Subversion, и добавляет ISVNNotifyListener к этому объекту на лету по мере необходимости.Таким образом, у вас нет возможности вставить свой собственный прослушиватель.

Возможно, вы могли бы написать класс, который реализует IConsoleListener и заставить его действовать в качестве прокси для класса Subclipse.Затем вы можете вызвать SVNProviderPlugin.getConsoleListener, чтобы получить текущий консольный слушатель и сохранить ссылку на него в вашем классе.Затем вызовите SVNProviderPlugin.setConsoleListener, чтобы заменить класс в Subclipse вашим классом.Поскольку события запускаются в вашем классе, вы можете просто переслать их в класс Subclipse и делать все, что вы хотите с событиями в вашем коде.Как то так:

import java.io.File;

import org.tigris.subversion.subclipse.core.client.IConsoleListener;
import org.tigris.subversion.svnclientadapter.SVNNodeKind;

public class ProxyListener implements IConsoleListener {

    private IConsoleListener subclipseListener;

    public ProxyListener(IConsoleListener subclipseListener) {
        super();
        this.subclipseListener = subclipseListener;
    }


    public void setCommand(int command) {
        subclipseListener.setCommand(command);
        // TODO add your code

    }

    public void logCommandLine(String commandLine) {
        subclipseListener.logCommandLine(commandLine);
        // TODO add your code

    }

    public void logMessage(String message) {
        subclipseListener.logMessage(message);
        // TODO add your code

    }

    public void logError(String message) {
        subclipseListener.logError(message);
        // TODO add your code

    }

    public void logRevision(long revision, String path) {
        subclipseListener.logRevision(revision , path);
        // TODO add your code

    }

    public void logCompleted(String message) {
        subclipseListener.logCompleted(message);
        // TODO add your code

    }

    public void onNotify(File path, SVNNodeKind kind) {
        subclipseListener.onNotify(path, kind);
        // TODO add your code

    }

}
...