Changes between Version 13 and Version 14 of MiddleWareConnection


Ignore:
Timestamp:
10/28/12 17:18:20 (7 years ago)
Author:
welberge
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MiddleWareConnection

    v13 v14  
    1818} 
    1919}}} 
     20=== RsbToBMLRealizerAdapter === 
     21{{{ 
     22package asap.rsbadapters; 
     23 
     24import lombok.extern.slf4j.Slf4j; 
     25import rsb.AbstractEventHandler; 
     26import rsb.Event; 
     27import rsb.Factory; 
     28import rsb.Informer; 
     29import rsb.InitializeException; 
     30import rsb.Listener; 
     31import rsb.RSBException; 
     32import asap.bml.bridge.RealizerPort; 
     33import asap.bml.feedback.BMLFeedbackListener; 
     34 
     35/** 
     36 * Submits rsb BML messages to a RealizerPort; submits RealizerPort feedbacks to the rsb.  
     37 * Assumes that the connected realizerport is threadsafe (or at least that its performBML function is). 
     38 * @author Herwin 
     39 */ 
     40@Slf4j 
     41public class RsbToBMLRealizerAdapter implements BMLFeedbackListener 
     42{ 
     43    private final RealizerPort realizerPort; 
     44    private final Informer<String> informer; 
     45    private final Listener listener; 
     46     
     47    public RsbToBMLRealizerAdapter(RealizerPort port) 
     48    { 
     49        realizerPort = port; 
     50        Factory factory = Factory.getInstance(); 
     51 
     52        // setup feedback sender 
     53        informer = factory.createInformer(RsbAdapterConstants.BML_FEEDBACK_SCOPE);         
     54 
     55        // setup BML receiver 
     56        listener = factory.createListener(RsbAdapterConstants.BML_SCOPE); 
     57        listener.addHandler(new AbstractEventHandler() 
     58        { 
     59            @Override 
     60            public void handleEvent(Event event) 
     61            { 
     62                realizerPort.performBML(event.getData().toString()); 
     63            } 
     64        }, true); 
     65         
     66        try 
     67        { 
     68            listener.activate(); 
     69            informer.activate(); 
     70        } 
     71        catch (InitializeException e) 
     72        { 
     73            throw new RuntimeException(e); 
     74        } 
     75    } 
     76 
     77    /** 
     78     * Submit feedback over rsb 
     79     */ 
     80    @Override 
     81    public void feedback(String feedback) 
     82    { 
     83        try 
     84        { 
     85            informer.send(feedback); 
     86        } 
     87        catch (RSBException e) 
     88        { 
     89            log.warn("Could not submit feedback over RSB.", e); 
     90        } 
     91    } 
     92 
     93    public void close() 
     94    { 
     95        informer.deactivate(); 
     96        listener.deactivate(); 
     97    } 
     98} 
     99}}} 
    20100=== BMLRealizerToRsbAdapter === 
    21 === RsbToBMLRealizerAdapter === 
     101{{{ 
     102package asap.rsbadapters; 
     103 
     104import java.util.ArrayList; 
     105import java.util.Collections; 
     106import java.util.List; 
     107 
     108import com.google.common.collect.ImmutableList; 
     109 
     110import lombok.extern.slf4j.Slf4j; 
     111import rsb.AbstractEventHandler; 
     112import rsb.Event; 
     113import rsb.Factory; 
     114import rsb.Informer; 
     115import rsb.InitializeException; 
     116import rsb.Listener; 
     117import rsb.RSBException; 
     118import asap.bml.bridge.RealizerPort; 
     119import asap.bml.feedback.BMLFeedbackListener; 
     120 
     121/** 
     122 * Submits BML through rsb messages; submits received feedback (from rsb) to registered listeners. 
     123 * @author Herwin 
     124 */ 
     125@Slf4j 
     126public class BMLRealizerToRsbAdapter implements RealizerPort 
     127{ 
     128    private final Informer<String> informer; 
     129    private final Listener listener; 
     130    private List<BMLFeedbackListener> feedbackListeners = Collections.synchronizedList(new ArrayList<BMLFeedbackListener>()); 
     131     
     132    public BMLRealizerToRsbAdapter() 
     133    { 
     134        Factory factory = Factory.getInstance(); 
     135 
     136        // setup bml sender 
     137        informer = factory.createInformer(RsbAdapterConstants.BML_SCOPE);   
     138         
     139        // setup feedback receiver 
     140        listener = factory.createListener(RsbAdapterConstants.BML_FEEDBACK_SCOPE); 
     141        listener.addHandler(new AbstractEventHandler() 
     142        { 
     143            @Override 
     144            public void handleEvent(Event event) 
     145            { 
     146                synchronized(feedbackListeners) 
     147                { 
     148                    for(BMLFeedbackListener fbl:feedbackListeners) 
     149                    { 
     150                        fbl.feedback(event.getData().toString()); 
     151                    } 
     152                } 
     153            } 
     154        }, true); 
     155         
     156        try 
     157        { 
     158            listener.activate(); 
     159            informer.activate(); 
     160        } 
     161        catch (InitializeException e) 
     162        { 
     163            throw new RuntimeException(e); 
     164        } 
     165    } 
     166     
     167    @Override 
     168    public void addListeners(BMLFeedbackListener... listeners) 
     169    { 
     170        feedbackListeners.addAll(ImmutableList.copyOf(listeners));         
     171    } 
     172 
     173    @Override 
     174    public void removeAllListeners() 
     175    { 
     176        feedbackListeners.clear(); 
     177    } 
     178 
     179    @Override 
     180    public void performBML(String bmlString) 
     181    { 
     182        try 
     183        { 
     184            informer.send(bmlString); 
     185        } 
     186        catch (RSBException e) 
     187        { 
     188            log.warn("Cannot send BML ",e); 
     189        }         
     190    } 
     191     
     192    public void close() 
     193    { 
     194        listener.deactivate(); 
     195        informer.deactivate(); 
     196    } 
     197} 
     198}}}