85f10cf870b4ab97834885252c1533616ef52d6d
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / queue / TicketProcessorFactory.java
1 /**
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.openflowplugin.openflow.md.queue;
9
10 import java.util.Collection;
11 import java.util.Map;
12
13 import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;
14 import org.opendaylight.openflowplugin.openflow.md.core.IMDMessageListener;
15 import org.opendaylight.yangtools.yang.binding.DataObject;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
18
19 /**
20  * @author mirehak
21  * 
22  */
23 public abstract class TicketProcessorFactory {
24
25     protected static final Logger LOG = LoggerFactory
26             .getLogger(TicketProcessorFactory.class);
27
28     /**
29      * @param ticket
30      * @param listenerMapping
31      * @return runnable ticket processor
32      */
33     public static <T> Runnable createProcessor(
34             final Ticket<T> ticket,
35             final Map<Class<? extends DataObject>, Collection<IMDMessageListener>> listenerMapping) {
36         return new Runnable() {
37             @Override
38             public void run() {
39                 // TODO: delegate processing of message - notify listeners
40                 LOG.debug("experimenter received, type: " + ticket.getRegisteredMessageType());
41
42                 notifyListener();
43
44                 ticket.getResult().set(null);
45             }
46
47             /**
48              * @param listenerMapping
49              */
50             private void notifyListener() {
51                 DataObject message = ticket.getMessage();
52                 Class<? extends DataObject> messageType = ticket.getRegisteredMessageType();
53                 Collection<IMDMessageListener> listeners = listenerMapping.get(messageType);
54                 ConnectionConductor conductor = ticket.getConductor();
55
56                 if (listeners != null) {
57                     for (IMDMessageListener listener : listeners) {
58                         // Pass cookie only for PACKT_IN
59                         if (messageType.equals("PacketInMessage.class")) {
60                             listener.receive(conductor.getAuxiliaryKey(),
61                                     conductor.getSessionContext(), message);
62                         } else {
63                             listener.receive(null, conductor.getSessionContext(), message);
64                         }
65                     }
66                 } else {
67                     LOG.warn("No listeners for this message Type {}", messageType);
68                 }
69             }
70         };
71     }
72 }