如何访问subclipse在运行时使用的SVNClientAdapter?

jbr*_*aud 4 subclipse eclipse-plugin listener

我正在使用Subclipse API,我想实现ISVNNotifyListener,这样我就可以了解在运行时发生的subclipse事件.我相信我需要将我的通知监听器实例添加(订阅)给客户端适配器将通知的一组监听器,但是我对如何访问Subclipse在运行时使用的客户机适配器感到茫然.有没有办法访问它,以便我可以将我的监听器添加到集合?

Mar*_*ard 5

对不起,但不幸的是,Subclipse没有以这样的方式编码来提供对内部的访问.Subclipse为它需要在Subversion中进行的每个API调用构造一个新的ISVNClientAdapter对象,并根据需要动态地将其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

    }

}
Run Code Online (Sandbox Code Playgroud)