a29dc3cb9d694ac895319625db6178e4017f3e23
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / registry / meter / DeviceMeterRegistryImpl.java
1 /*
2  * Copyright (c) 2015 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.openflowplugin.impl.registry.meter;
10
11 import com.google.common.annotations.VisibleForTesting;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.function.Consumer;
16 import org.opendaylight.openflowplugin.api.openflow.registry.meter.DeviceMeterRegistry;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
18
19 public class DeviceMeterRegistryImpl implements DeviceMeterRegistry {
20
21     private final List<MeterId> meterIds = Collections.synchronizedList(new ArrayList<>());
22     private final List<MeterId> marks = Collections.synchronizedList(new ArrayList<>());
23
24     @Override
25     public void store(final MeterId meterId) {
26         meterIds.add(meterId);
27     }
28
29     @Override
30     public void addMark(final MeterId meterId) {
31         marks.add(meterId);
32     }
33
34     @Override
35     public boolean hasMark(final MeterId meterId) {
36         return marks.contains(meterId);
37     }
38
39     @Override
40     public void processMarks() {
41         meterIds.removeAll(marks);
42         marks.clear();
43     }
44
45     @Override
46     public void forEach(final Consumer<MeterId> consumer) {
47         synchronized (meterIds) {
48             meterIds.forEach(consumer);
49         }
50     }
51
52     @Override
53     public int size() {
54         return meterIds.size();
55     }
56
57     @Override
58     public void close() {
59         meterIds.clear();
60         marks.clear();
61     }
62
63     @VisibleForTesting
64     List<MeterId> getAllMeterIds() {
65         return meterIds;
66     }
67 }