package org.opendaylight.openflowplugin.impl.registry.group;
+import com.google.common.annotations.VisibleForTesting;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import java.util.function.Consumer;
import org.opendaylight.openflowplugin.api.openflow.registry.group.DeviceGroupRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
-/**
- * Created by Martin Bobak <mbobak@cisco.com> on 15.4.2015.
- */
public class DeviceGroupRegistryImpl implements DeviceGroupRegistry {
- private final List<GroupId> groupIdList = new ArrayList<>();
- private final List<GroupId> marks = new ArrayList<>();
+ private final List<GroupId> groupIds = Collections.synchronizedList(new ArrayList<>());
+ private final List<GroupId> marks = Collections.synchronizedList(new ArrayList<>());
@Override
public void store(final GroupId groupId) {
- groupIdList.add(groupId);
+ groupIds.add(groupId);
}
@Override
- public void markToBeremoved(final GroupId groupId) {
+ public void addMark(final GroupId groupId) {
marks.add(groupId);
}
@Override
- public void removeMarked() {
- synchronized (groupIdList) {
- groupIdList.removeAll(marks);
- }
+ public boolean hasMark(final GroupId groupId) {
+ return marks.contains(groupId);
+ }
+
+ @Override
+ public void processMarks() {
+ groupIds.removeAll(marks);
marks.clear();
}
@Override
- public List<GroupId> getAllGroupIds() {
- return groupIdList;
+ public void forEach(final Consumer<GroupId> consumer) {
+ synchronized (groupIds) {
+ groupIds.forEach(consumer);
+ }
+ }
+
+ @Override
+ public int size() {
+ return groupIds.size();
}
@Override
public void close() {
- synchronized (groupIdList) {
- groupIdList.clear();
- }
- synchronized (marks) {
- marks.clear();
- }
+ groupIds.clear();
+ marks.clear();
+ }
+
+ @VisibleForTesting
+ List<GroupId> getAllGroupIds() {
+ return groupIds;
}
}