38e0596a07a30028b38877283638d9f678482815
[controller.git] / opendaylight / md-sal / samples / clustering-test-app / provider / src / main / java / org / opendaylight / controller / clustering / it / provider / impl / YnlListener.java
1 /*
2  * Copyright (c) 2017 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
9 package org.opendaylight.controller.clustering.it.provider.impl;
10
11 import com.google.common.base.Preconditions;
12 import java.util.concurrent.atomic.AtomicLong;
13 import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeYnlOutput;
14 import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeYnlOutputBuilder;
15 import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.target.rev170215.IdSequence;
16 import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.target.rev170215.OdlMdsalLowlevelTargetListener;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19
20 public class YnlListener implements OdlMdsalLowlevelTargetListener {
21
22     private static final Logger LOG = LoggerFactory.getLogger(YnlListener.class);
23
24     private final String id;
25
26     private AtomicLong localNumber = new AtomicLong();
27     private AtomicLong allNot = new AtomicLong();
28     private AtomicLong idNot = new AtomicLong();
29     private AtomicLong errNot = new AtomicLong();
30
31     public YnlListener(final String id) {
32         Preconditions.checkNotNull(id);
33         this.id = id;
34     }
35
36     @Override
37     public void onIdSequence(final IdSequence notification) {
38         LOG.debug("Received id-sequence notification, : {}", notification);
39
40         allNot.incrementAndGet();
41
42         if (notification.getId().equals(id)) {
43             idNot.incrementAndGet();
44
45             localNumber.getAndUpdate((value -> {
46                 if (notification.getSequenceNumber() - value == 1) {
47                     return value + 1;
48                 } else {
49                     errNot.getAndIncrement();
50                     return value;
51                 }
52             }));
53         }
54     }
55
56     public UnsubscribeYnlOutput getOutput() {
57         return new UnsubscribeYnlOutputBuilder()
58                 .setAllNot(allNot.get())
59                 .setErrNot(errNot.get())
60                 .setIdNot(idNot.get())
61                 .setLocalNumber(localNumber.get())
62                 .build();
63     }
64 }