Add timeout for device initialization
[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 javax.annotation.concurrent.ThreadSafe;
17 import org.opendaylight.openflowplugin.api.openflow.registry.meter.DeviceMeterRegistry;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
19
20 @ThreadSafe
21 public class DeviceMeterRegistryImpl implements DeviceMeterRegistry {
22
23     private final List<MeterId> meterIds = Collections.synchronizedList(new ArrayList<>());
24     private final List<MeterId> marks = Collections.synchronizedList(new ArrayList<>());
25
26     @Override
27     public void store(final MeterId meterId) {
28         meterIds.add(meterId);
29     }
30
31     @Override
32     public void addMark(final MeterId meterId) {
33         marks.add(meterId);
34     }
35
36     @Override
37     public void processMarks() {
38         meterIds.removeAll(marks);
39         marks.clear();
40     }
41
42     @Override
43     public void forEach(final Consumer<MeterId> consumer) {
44         synchronized (meterIds) {
45             meterIds.forEach(consumer);
46         }
47     }
48
49     @Override
50     public int size() {
51         return meterIds.size();
52     }
53
54     @Override
55     public void close() {
56         meterIds.clear();
57         marks.clear();
58     }
59
60     @VisibleForTesting
61     List<MeterId> getAllMeterIds() {
62         return meterIds;
63     }
64 }