blob: 603924725ae680596a50c98e7ba8977c733bb500 [file] [log] [blame]
alshabib1d2bc402015-07-31 17:04:11 -07001/*
2 * Copyright 2015 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.incubator.net.meter.impl;
17
18import org.apache.felix.scr.annotations.Activate;
19import org.apache.felix.scr.annotations.Component;
20import org.apache.felix.scr.annotations.Deactivate;
21import org.apache.felix.scr.annotations.Reference;
22import org.apache.felix.scr.annotations.ReferenceCardinality;
23import org.apache.felix.scr.annotations.Service;
24import org.onosproject.incubator.net.meter.Meter;
25import org.onosproject.incubator.net.meter.MeterEvent;
26import org.onosproject.incubator.net.meter.MeterFailReason;
27import org.onosproject.incubator.net.meter.MeterId;
28import org.onosproject.incubator.net.meter.MeterListener;
29import org.onosproject.incubator.net.meter.MeterOperation;
30import org.onosproject.incubator.net.meter.MeterProvider;
31import org.onosproject.incubator.net.meter.MeterProviderRegistry;
32import org.onosproject.incubator.net.meter.MeterProviderService;
33import org.onosproject.incubator.net.meter.MeterService;
34import org.onosproject.incubator.net.meter.MeterStoreDelegate;
35import org.onosproject.net.DeviceId;
36import org.onosproject.net.provider.AbstractListenerProviderRegistry;
37import org.onosproject.net.provider.AbstractProviderService;
38import org.onosproject.store.service.AtomicCounter;
39import org.onosproject.store.service.StorageService;
40import org.slf4j.Logger;
41
42import java.util.Collection;
43
44import static org.slf4j.LoggerFactory.getLogger;
45
46
47/**
48 * Provides implementation of the meter service APIs.
49 */
50@Component(immediate = true)
51@Service
52public class MeterManager extends AbstractListenerProviderRegistry<MeterEvent, MeterListener,
53 MeterProvider, MeterProviderService>
54 implements MeterService, MeterProviderRegistry {
55
56 private final String meterIdentifier = "meter-id-counter";
57 private final Logger log = getLogger(getClass());
58 private final MeterStoreDelegate delegate = new InternalMeterStoreDelegate();
59
60 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
61 protected StorageService storageService;
62
63 private AtomicCounter meterIdCounter;
64
65 @Activate
66 public void activate() {
67 meterIdCounter = storageService.atomicCounterBuilder()
68 .withName(meterIdentifier)
69 .build();
70 log.info("Started");
71 }
72
73 @Deactivate
74 public void deactivate() {
75 log.info("Stopped");
76 }
77
78 @Override
79 protected MeterProviderService createProviderService(MeterProvider provider) {
80 return new InternalMeterProviderService(provider);
81 }
82
83 @Override
84 public void addMeter(Meter meter) {
85
86 }
87
88 @Override
89 public void updateMeter(Meter meter) {
90
91 }
92
93 @Override
94 public void removeMeter(Meter meter) {
95
96 }
97
98 @Override
99 public void removeMeter(MeterId id) {
100
101 }
102
103 @Override
104 public Meter getMeter(MeterId id) {
105 return null;
106 }
107
108 @Override
109 public MeterId allocateMeterId() {
110 // FIXME: This will break one day.
111 return MeterId.meterId((int) meterIdCounter.getAndIncrement());
112 }
113
114 private class InternalMeterProviderService
115 extends AbstractProviderService<MeterProvider>
116 implements MeterProviderService {
117
118 /**
119 * Creates a provider service on behalf of the specified provider.
120 *
121 * @param provider provider to which this service is being issued
122 */
123 protected InternalMeterProviderService(MeterProvider provider) {
124 super(provider);
125 }
126
127 @Override
128 public void meterOperationFailed(MeterOperation operation, MeterFailReason reason) {
129
130 }
131
132 @Override
133 public void pushMeterMetrics(DeviceId deviceId, Collection<Meter> meterEntries) {
134
135 }
136 }
137
138 private class InternalMeterStoreDelegate implements MeterStoreDelegate {
139
140 @Override
141 public void notify(MeterEvent event) {
142
143 }
144 }
145
146}