diff options
-rw-r--r-- | python/src/tcf/services/pathmap.py | 8 | ||||
-rw-r--r-- | python/src/tcf/services/remote/PathMapProxy.py | 65 |
2 files changed, 60 insertions, 13 deletions
diff --git a/python/src/tcf/services/pathmap.py b/python/src/tcf/services/pathmap.py index 85de42616..ed96042e7 100644 --- a/python/src/tcf/services/pathmap.py +++ b/python/src/tcf/services/pathmap.py @@ -52,6 +52,14 @@ PROTOCOL_HOST = "host" PROTOCOL_TARGET = "target" +class PathMapListener(object): + """Pathmap event listener is notified when pathmap changes.""" + + def changed(self): + """Called when a pathmap has been changed.""" + pass + + class PathMapRule(object): """ PathMapRule represents a single file path mapping rule. diff --git a/python/src/tcf/services/remote/PathMapProxy.py b/python/src/tcf/services/remote/PathMapProxy.py index 770e972f9..28f64881f 100644 --- a/python/src/tcf/services/remote/PathMapProxy.py +++ b/python/src/tcf/services/remote/PathMapProxy.py @@ -1,5 +1,5 @@ -# ******************************************************************************* -# * Copyright (c) 2011 Wind River Systems, Inc. and others. +# ***************************************************************************** +# * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. # * All rights reserved. This program and the accompanying materials # * are made available under the terms of the Eclipse Public License v1.0 # * which accompanies this distribution, and is available at @@ -7,38 +7,61 @@ # * # * Contributors: # * Wind River Systems - initial API and implementation -# ******************************************************************************* +# ***************************************************************************** +from tcf import channel from tcf.services import pathmap from tcf.channel.Command import Command + +class ChannelEventListener(channel.EventListener): + def __init__(self, service, listener): + self.service = service + self.listener = listener + + def event(self, name, data): + try: + if name == "changed": + self.listener.changed() + except Exception as x: + self.service.channel.terminate(x) + + class PathMapProxy(pathmap.PathMapService): def __init__(self, channel): self.channel = channel + self.listeners = {} def get(self, done): done = self._makeCallback(done) service = self + class GetCommand(Command): def __init__(self): - super(GetCommand, self).__init__(service.channel, service, "get", None) + super(GetCommand, self).__init__(service.channel, service, + "get", None) + def done(self, error, args): - map = None + pmMap = None if not error: assert len(args) == 2 error = self.toError(args[0]) - if args[1]: map = _toPathMap(args[1]) - done.doneGet(self.token, error, map) + if args[1]: + pmMap = _toPathMap(args[1]) + done.doneGet(self.token, error, pmMap) return GetCommand().token - def set(self, map, done): - if isinstance(map, pathmap.PathMapRule) or isinstance(map, dict): - map = (map,) + def set(self, pmMap, done): + if isinstance(pmMap, pathmap.PathMapRule) or isinstance(pmMap, dict): + pmMap = (pmMap,) done = self._makeCallback(done) service = self + class SetCommand(Command): def __init__(self): - super(SetCommand, self).__init__(service.channel, service, "set", (map,)) + super(SetCommand, self).__init__(service.channel, service, + "set", (pmMap,)) + def done(self, error, args): if not error: assert len(args) == 1 @@ -46,11 +69,27 @@ class PathMapProxy(pathmap.PathMapService): done.doneSet(self.token, error) return SetCommand().token + def addListener(self, listener): + """Add a pathmap listener to the connected channel.""" + l = ChannelEventListener(self, listener) + self.channel.addEventListener(self, l) + self.listeners[listener] = l + + def removeListener(self, listener): + """Remove given pathmap listener from the connected channel.""" + l = self.listeners.get(listener) + if l: + del self.listeners[listener] + self.channel.removeEventListener(self, l) + def _toPathMap(o): - if o is None: return None + if o is None: + return None return map(_toPathMapRule, o) + def _toPathMapRule(o): - if o is None: return None + if o is None: + return None return pathmap.PathMapRule(o) |