Committed by
Gerrit Code Review
[ONOS-4691] Refactoring OpticalPortOperator (2/3)
- Define ConfigOperator for a Port - Refactor OpticalPortOperator as PortConfigOperator - Add plug-in mechanism for PortConfigOperator on DeviceManager - Move OpticalPortConfig, OpticalPortOperator to optical-model bundle Change-Id: I5d416305b0c1b0e31e0ad64baa92d126303548bc
Showing
14 changed files
with
343 additions
and
71 deletions
... | @@ -47,6 +47,13 @@ | ... | @@ -47,6 +47,13 @@ |
47 | 47 | ||
48 | <dependency> | 48 | <dependency> |
49 | <groupId>org.onosproject</groupId> | 49 | <groupId>org.onosproject</groupId> |
50 | + <artifactId>onos-api</artifactId> | ||
51 | + <classifier>tests</classifier> | ||
52 | + <scope>test</scope> | ||
53 | + </dependency> | ||
54 | + | ||
55 | + <dependency> | ||
56 | + <groupId>org.onosproject</groupId> | ||
50 | <artifactId>onlab-junit</artifactId> | 57 | <artifactId>onlab-junit</artifactId> |
51 | <scope>test</scope> | 58 | <scope>test</scope> |
52 | </dependency> | 59 | </dependency> | ... | ... |
... | @@ -13,7 +13,7 @@ | ... | @@ -13,7 +13,7 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.net.config.basics; | 16 | +package org.onosproject.net.optical.config; |
17 | 17 | ||
18 | import java.util.Optional; | 18 | import java.util.Optional; |
19 | 19 | ||
... | @@ -30,6 +30,7 @@ import static org.onosproject.net.config.Config.FieldPresence.OPTIONAL; | ... | @@ -30,6 +30,7 @@ import static org.onosproject.net.config.Config.FieldPresence.OPTIONAL; |
30 | * Configurations for an optical port on a device. | 30 | * Configurations for an optical port on a device. |
31 | */ | 31 | */ |
32 | public final class OpticalPortConfig extends Config<ConnectPoint> { | 32 | public final class OpticalPortConfig extends Config<ConnectPoint> { |
33 | + | ||
33 | // optical type {OMS, OCH, ODUClt, fiber} | 34 | // optical type {OMS, OCH, ODUClt, fiber} |
34 | public static final String TYPE = "type"; | 35 | public static final String TYPE = "type"; |
35 | 36 | ... | ... |
... | @@ -13,17 +13,26 @@ | ... | @@ -13,17 +13,26 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.net.device.impl; | 16 | +package org.onosproject.net.optical.config; |
17 | 17 | ||
18 | import static org.onosproject.net.optical.device.OchPortHelper.ochPortDescription; | 18 | import static org.onosproject.net.optical.device.OchPortHelper.ochPortDescription; |
19 | import static org.onosproject.net.optical.device.OduCltPortHelper.oduCltPortDescription; | 19 | import static org.onosproject.net.optical.device.OduCltPortHelper.oduCltPortDescription; |
20 | import static org.onosproject.net.optical.device.OmsPortHelper.omsPortDescription; | 20 | import static org.onosproject.net.optical.device.OmsPortHelper.omsPortDescription; |
21 | import static org.onosproject.net.optical.device.OtuPortHelper.otuPortDescription; | 21 | import static org.onosproject.net.optical.device.OtuPortHelper.otuPortDescription; |
22 | import static org.slf4j.LoggerFactory.getLogger; | 22 | import static org.slf4j.LoggerFactory.getLogger; |
23 | -import org.onosproject.net.config.ConfigOperator; | 23 | + |
24 | -import org.onosproject.net.config.basics.OpticalPortConfig; | 24 | +import java.util.Set; |
25 | + | ||
26 | +import static com.google.common.base.MoreObjects.firstNonNull; | ||
27 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
28 | + | ||
29 | +import org.onosproject.net.config.NetworkConfigService; | ||
30 | +import org.onosproject.net.config.PortConfigOperator; | ||
25 | import org.onosproject.net.AnnotationKeys; | 31 | import org.onosproject.net.AnnotationKeys; |
32 | +import org.onosproject.net.ConnectPoint; | ||
26 | import org.onosproject.net.DefaultAnnotations; | 33 | import org.onosproject.net.DefaultAnnotations; |
34 | +import org.onosproject.net.Port; | ||
35 | +import org.onosproject.net.Port.Type; | ||
27 | import org.onosproject.net.PortNumber; | 36 | import org.onosproject.net.PortNumber; |
28 | import org.onosproject.net.SparseAnnotations; | 37 | import org.onosproject.net.SparseAnnotations; |
29 | import org.onosproject.net.device.DefaultPortDescription; | 38 | import org.onosproject.net.device.DefaultPortDescription; |
... | @@ -34,63 +43,85 @@ import org.onosproject.net.device.OtuPortDescription; | ... | @@ -34,63 +43,85 @@ import org.onosproject.net.device.OtuPortDescription; |
34 | import org.onosproject.net.device.PortDescription; | 43 | import org.onosproject.net.device.PortDescription; |
35 | import org.slf4j.Logger; | 44 | import org.slf4j.Logger; |
36 | 45 | ||
46 | +import com.google.common.collect.Sets; | ||
47 | + | ||
37 | /** | 48 | /** |
38 | * Implementations of merge policies for various sources of optical port | 49 | * Implementations of merge policies for various sources of optical port |
39 | * configuration information. This includes applications, provides, and network | 50 | * configuration information. This includes applications, provides, and network |
40 | * configurations. | 51 | * configurations. |
41 | */ | 52 | */ |
42 | -public final class OpticalPortOperator implements ConfigOperator { | 53 | +public final class OpticalPortOperator implements PortConfigOperator { |
43 | 54 | ||
44 | private static final Logger log = getLogger(OpticalPortOperator.class); | 55 | private static final Logger log = getLogger(OpticalPortOperator.class); |
45 | 56 | ||
46 | - private OpticalPortOperator() { | 57 | + /** |
58 | + * Port.Type this PortConfigOperator reacts on. | ||
59 | + */ | ||
60 | + private final Set<Port.Type> optical = Sets.immutableEnumSet(Port.Type.ODUCLT, | ||
61 | + Port.Type.OMS, | ||
62 | + Port.Type.OCH, | ||
63 | + Port.Type.OTU, | ||
64 | + Port.Type.FIBER, | ||
65 | + Port.Type.PACKET); | ||
66 | + | ||
67 | + private NetworkConfigService networkConfigService; | ||
68 | + | ||
69 | + | ||
70 | + public OpticalPortOperator() { | ||
71 | + } | ||
72 | + | ||
73 | + @Override | ||
74 | + public void bindService(NetworkConfigService networkConfigService) { | ||
75 | + this.networkConfigService = networkConfigService; | ||
76 | + } | ||
77 | + | ||
78 | + private OpticalPortConfig lookupConfig(ConnectPoint cp) { | ||
79 | + if (networkConfigService == null) { | ||
80 | + return null; | ||
81 | + } | ||
82 | + return networkConfigService.getConfig(cp, OpticalPortConfig.class); | ||
47 | } | 83 | } |
48 | 84 | ||
49 | /** | 85 | /** |
50 | * Generates a PortDescription containing fields from a PortDescription and | 86 | * Generates a PortDescription containing fields from a PortDescription and |
51 | * an OpticalPortConfig. | 87 | * an OpticalPortConfig. |
52 | * | 88 | * |
53 | - * @param opc the port config entity from network config | 89 | + * @param cp {@link ConnectPoint} representing the port. |
54 | - * @param descr a PortDescription | 90 | + * @param descr input {@link PortDescription} |
55 | - * @return PortDescription based on both sources | 91 | + * @return Combined {@link PortDescription} |
56 | */ | 92 | */ |
57 | - public static PortDescription combine(OpticalPortConfig opc, PortDescription descr) { | 93 | + @Override |
94 | + public PortDescription combine(ConnectPoint cp, PortDescription descr) { | ||
95 | + checkNotNull(cp); | ||
96 | + | ||
97 | + // short-circuit for non-optical ports | ||
98 | + // must be removed if we need type override | ||
99 | + if (descr != null && !optical.contains(descr.type())) { | ||
100 | + return descr; | ||
101 | + } | ||
102 | + | ||
103 | + OpticalPortConfig opc = lookupConfig(cp); | ||
58 | if (opc == null) { | 104 | if (opc == null) { |
59 | return descr; | 105 | return descr; |
60 | } | 106 | } |
61 | 107 | ||
62 | - PortNumber port = descr.portNumber(); | 108 | + PortNumber number = descr.portNumber(); |
63 | - final String name = opc.name(); | 109 | + // handle PortNumber "name" portion |
64 | - final String numName = opc.numberName(); | 110 | + if (!opc.name().isEmpty()) { |
65 | - // if the description is null, or the current description port name != config name, | 111 | + number = PortNumber.portNumber(descr.portNumber().toLong(), opc.name()); |
66 | - // create a new PortNumber. | ||
67 | - PortNumber newPort = null; | ||
68 | - if (port == null) { | ||
69 | - // try to get the portNumber from the numName. | ||
70 | - if (!numName.isEmpty()) { | ||
71 | - final long pn = Long.parseLong(numName); | ||
72 | - newPort = (!name.isEmpty()) ? PortNumber.portNumber(pn, name) : PortNumber.portNumber(pn); | ||
73 | - } else { | ||
74 | - // we don't have defining info (a port number value) | ||
75 | - throw new RuntimeException("Possible misconfig, bailing on handling for: \n\t" + descr); | ||
76 | - } | ||
77 | - } else if ((!name.isEmpty()) && !name.equals(port.name())) { | ||
78 | - final long pn = (numName.isEmpty()) ? port.toLong() : Long.parseLong(numName); | ||
79 | - newPort = PortNumber.portNumber(pn, name); | ||
80 | } | 112 | } |
81 | 113 | ||
82 | - // Port type won't change unless we're overwriting a port completely. | 114 | + // handle additional annotations |
83 | - // Watch out for overwrites to avoid class cast craziness. | 115 | + SparseAnnotations annotations = combine(opc, descr.annotations()); |
84 | - boolean noOwrite = opc.type() == descr.type(); | ||
85 | 116 | ||
86 | - SparseAnnotations sa = combine(opc, descr.annotations()); | 117 | + // (Future work) handle type overwrite? |
87 | - if (noOwrite) { | 118 | + Type type = firstNonNull(opc.type(), descr.type()); |
88 | - return updateDescription((newPort == null) ? port : newPort, sa, descr); | 119 | + if (type != descr.type()) { |
89 | - } else { | 120 | + // TODO: Do we need to be able to overwrite Port.Type? |
90 | - // TODO: must reconstruct a different type of PortDescription. | 121 | + log.warn("Port type overwrite requested for {}. Ignoring.", cp); |
91 | - log.info("Type rewrite from {} to {} required", descr.type(), opc.type()); | ||
92 | } | 122 | } |
93 | - return descr; | 123 | + |
124 | + return updateDescription(number, annotations, descr); | ||
94 | } | 125 | } |
95 | 126 | ||
96 | // updates a port description whose port type has not changed. | 127 | // updates a port description whose port type has not changed. |
... | @@ -161,8 +192,9 @@ public final class OpticalPortOperator implements ConfigOperator { | ... | @@ -161,8 +192,9 @@ public final class OpticalPortOperator implements ConfigOperator { |
161 | * @param an the annotation | 192 | * @param an the annotation |
162 | * @return annotation combining both sources | 193 | * @return annotation combining both sources |
163 | */ | 194 | */ |
164 | - public static SparseAnnotations combine(OpticalPortConfig opc, SparseAnnotations an) { | 195 | + private static SparseAnnotations combine(OpticalPortConfig opc, SparseAnnotations an) { |
165 | DefaultAnnotations.Builder b = DefaultAnnotations.builder(); | 196 | DefaultAnnotations.Builder b = DefaultAnnotations.builder(); |
197 | + b.putAll(an); | ||
166 | if (!opc.staticPort().isEmpty()) { | 198 | if (!opc.staticPort().isEmpty()) { |
167 | b.set(AnnotationKeys.STATIC_PORT, opc.staticPort()); | 199 | b.set(AnnotationKeys.STATIC_PORT, opc.staticPort()); |
168 | } | 200 | } |
... | @@ -173,7 +205,8 @@ public final class OpticalPortOperator implements ConfigOperator { | ... | @@ -173,7 +205,8 @@ public final class OpticalPortOperator implements ConfigOperator { |
173 | if (!opc.name().isEmpty()) { | 205 | if (!opc.name().isEmpty()) { |
174 | b.set(AnnotationKeys.PORT_NAME, opc.name()); | 206 | b.set(AnnotationKeys.PORT_NAME, opc.name()); |
175 | } | 207 | } |
176 | - return DefaultAnnotations.union(an, b.build()); | 208 | + return b.build(); |
177 | } | 209 | } |
178 | 210 | ||
211 | + | ||
179 | } | 212 | } | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); you may not | ||
5 | + * use this file except in compliance with the License. You may obtain a copy of | ||
6 | + * 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, WITHOUT | ||
12 | + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||
13 | + * License for the specific language governing permissions and limitations under | ||
14 | + * the License. | ||
15 | + */ | ||
16 | +/** | ||
17 | + * Various optical model related configurations. | ||
18 | + */ | ||
19 | +package org.onosproject.net.optical.config; |
apps/optical-model/src/main/java/org/onosproject/net/optical/internal/OpticalModelLoader.java
0 → 100644
1 | +/* | ||
2 | + * Copyright 2016-present 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 | + */ | ||
16 | +package org.onosproject.net.optical.internal; | ||
17 | + | ||
18 | +import static org.onosproject.net.config.basics.SubjectFactories.CONNECT_POINT_SUBJECT_FACTORY; | ||
19 | + | ||
20 | +import org.apache.felix.scr.annotations.Activate; | ||
21 | +import org.apache.felix.scr.annotations.Component; | ||
22 | +import org.apache.felix.scr.annotations.Deactivate; | ||
23 | +import org.apache.felix.scr.annotations.Reference; | ||
24 | +import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
25 | +import org.onosproject.net.ConnectPoint; | ||
26 | +import org.onosproject.net.config.ConfigFactory; | ||
27 | +import org.onosproject.net.config.NetworkConfigRegistry; | ||
28 | +import org.onosproject.net.config.PortConfigOperatorRegistry; | ||
29 | +import org.onosproject.net.optical.config.OpticalPortConfig; | ||
30 | +import org.onosproject.net.optical.config.OpticalPortOperator; | ||
31 | +import org.slf4j.Logger; | ||
32 | +import org.slf4j.LoggerFactory; | ||
33 | + | ||
34 | +/** | ||
35 | + * Loader which registers optical model related config, etc. | ||
36 | + */ | ||
37 | +@Component(immediate = true) | ||
38 | +public class OpticalModelLoader { | ||
39 | + | ||
40 | + private final Logger log = LoggerFactory.getLogger(getClass()); | ||
41 | + | ||
42 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
43 | + protected PortConfigOperatorRegistry portOperatorRegistry; | ||
44 | + | ||
45 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
46 | + protected NetworkConfigRegistry netcfgRegistry; | ||
47 | + | ||
48 | + | ||
49 | + private OpticalPortOperator opticalPortOp; | ||
50 | + | ||
51 | + private ConfigFactory<ConnectPoint, OpticalPortConfig> | ||
52 | + opticalPortConfigFactory = new ConfigFactory<ConnectPoint, OpticalPortConfig>(CONNECT_POINT_SUBJECT_FACTORY, | ||
53 | + OpticalPortConfig.class, | ||
54 | + "optical") { | ||
55 | + @Override | ||
56 | + public OpticalPortConfig createConfig() { | ||
57 | + return new OpticalPortConfig(); | ||
58 | + } | ||
59 | + }; | ||
60 | + | ||
61 | + @Activate | ||
62 | + protected void activate() { | ||
63 | + netcfgRegistry.registerConfigFactory(opticalPortConfigFactory); | ||
64 | + | ||
65 | + opticalPortOp = new OpticalPortOperator(); | ||
66 | + portOperatorRegistry.registerPortConfigOperator(opticalPortOp, | ||
67 | + OpticalPortConfig.class); | ||
68 | + | ||
69 | + log.info("Started"); | ||
70 | + } | ||
71 | + | ||
72 | + @Deactivate | ||
73 | + protected void deactivate() { | ||
74 | + portOperatorRegistry.unregisterPortConfigOperator(opticalPortOp); | ||
75 | + | ||
76 | + netcfgRegistry.unregisterConfigFactory(opticalPortConfigFactory); | ||
77 | + log.info("Stopped"); | ||
78 | + } | ||
79 | +} |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); you may not | ||
5 | + * use this file except in compliance with the License. You may obtain a copy of | ||
6 | + * 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, WITHOUT | ||
12 | + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||
13 | + * License for the specific language governing permissions and limitations under | ||
14 | + * the License. | ||
15 | + */ | ||
16 | +/** | ||
17 | + * Internal tools for optical model. | ||
18 | + */ | ||
19 | +package org.onosproject.net.optical.internal; |
... | @@ -13,15 +13,15 @@ | ... | @@ -13,15 +13,15 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.incubator.net.config.basics; | 16 | +package org.onosproject.net.optical.config; |
17 | 17 | ||
18 | import static org.junit.Assert.assertEquals; | 18 | import static org.junit.Assert.assertEquals; |
19 | import static org.junit.Assert.assertFalse; | 19 | import static org.junit.Assert.assertFalse; |
20 | -import static org.onosproject.net.config.basics.OpticalPortConfig.TYPE; | 20 | +import static org.onosproject.net.optical.config.OpticalPortConfig.NAME; |
21 | -import static org.onosproject.net.config.basics.OpticalPortConfig.NAME; | 21 | +import static org.onosproject.net.optical.config.OpticalPortConfig.PORT; |
22 | -import static org.onosproject.net.config.basics.OpticalPortConfig.PORT; | 22 | +import static org.onosproject.net.optical.config.OpticalPortConfig.STATIC_LAMBDA; |
23 | -import static org.onosproject.net.config.basics.OpticalPortConfig.STATIC_LAMBDA; | 23 | +import static org.onosproject.net.optical.config.OpticalPortConfig.STATIC_PORT; |
24 | -import static org.onosproject.net.config.basics.OpticalPortConfig.STATIC_PORT; | 24 | +import static org.onosproject.net.optical.config.OpticalPortConfig.TYPE; |
25 | 25 | ||
26 | import java.io.IOException; | 26 | import java.io.IOException; |
27 | import java.util.Iterator; | 27 | import java.util.Iterator; |
... | @@ -41,7 +41,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; | ... | @@ -41,7 +41,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; |
41 | import com.fasterxml.jackson.databind.node.JsonNodeFactory; | 41 | import com.fasterxml.jackson.databind.node.JsonNodeFactory; |
42 | import com.fasterxml.jackson.databind.node.ObjectNode; | 42 | import com.fasterxml.jackson.databind.node.ObjectNode; |
43 | import com.google.common.collect.Lists; | 43 | import com.google.common.collect.Lists; |
44 | -import org.onosproject.net.config.basics.OpticalPortConfig; | ||
45 | 44 | ||
46 | public class OpticalPortConfigTest { | 45 | public class OpticalPortConfigTest { |
47 | private static final String FIELD = "ports"; | 46 | private static final String FIELD = "ports"; | ... | ... |
... | @@ -13,14 +13,14 @@ | ... | @@ -13,14 +13,14 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.net.device.impl; | 16 | +package org.onosproject.net.optical.config; |
17 | 17 | ||
18 | import org.junit.Before; | 18 | import org.junit.Before; |
19 | import org.junit.Test; | 19 | import org.junit.Test; |
20 | import org.onosproject.net.CltSignalType; | 20 | import org.onosproject.net.CltSignalType; |
21 | import org.onosproject.net.config.Config; | 21 | import org.onosproject.net.config.Config; |
22 | import org.onosproject.net.config.ConfigApplyDelegate; | 22 | import org.onosproject.net.config.ConfigApplyDelegate; |
23 | -import org.onosproject.net.config.basics.OpticalPortConfig; | 23 | +import org.onosproject.net.config.NetworkConfigServiceAdapter; |
24 | import org.onosproject.net.AnnotationKeys; | 24 | import org.onosproject.net.AnnotationKeys; |
25 | import org.onosproject.net.ConnectPoint; | 25 | import org.onosproject.net.ConnectPoint; |
26 | import org.onosproject.net.DefaultAnnotations; | 26 | import org.onosproject.net.DefaultAnnotations; |
... | @@ -29,6 +29,7 @@ import org.onosproject.net.Port; | ... | @@ -29,6 +29,7 @@ import org.onosproject.net.Port; |
29 | import org.onosproject.net.PortNumber; | 29 | import org.onosproject.net.PortNumber; |
30 | import org.onosproject.net.SparseAnnotations; | 30 | import org.onosproject.net.SparseAnnotations; |
31 | import org.onosproject.net.device.PortDescription; | 31 | import org.onosproject.net.device.PortDescription; |
32 | + | ||
32 | import com.fasterxml.jackson.databind.ObjectMapper; | 33 | import com.fasterxml.jackson.databind.ObjectMapper; |
33 | import com.fasterxml.jackson.databind.node.JsonNodeFactory; | 34 | import com.fasterxml.jackson.databind.node.JsonNodeFactory; |
34 | 35 | ||
... | @@ -62,27 +63,33 @@ public class OpticalPortOperatorTest { | ... | @@ -62,27 +63,33 @@ public class OpticalPortOperatorTest { |
62 | 63 | ||
63 | private static final ConnectPoint CP = new ConnectPoint(DID, UNNAMED); | 64 | private static final ConnectPoint CP = new ConnectPoint(DID, UNNAMED); |
64 | 65 | ||
65 | - private static final OpticalPortConfig OPC = new OpticalPortConfig(); | 66 | + private OpticalPortConfig opc; |
67 | + | ||
68 | + private OpticalPortOperator oper; | ||
66 | 69 | ||
67 | @Before | 70 | @Before |
68 | public void setUp() { | 71 | public void setUp() { |
69 | - OPC.init(CP, CFG_KEY, JsonNodeFactory.instance.objectNode(), mapper, delegate); | 72 | + opc = new OpticalPortConfig(); |
73 | + opc.init(CP, CFG_KEY, JsonNodeFactory.instance.objectNode(), mapper, delegate); | ||
74 | + | ||
75 | + oper = new OpticalPortOperator(); | ||
76 | + oper.bindService(new MockNetworkConfigService()); | ||
70 | } | 77 | } |
71 | 78 | ||
72 | @Test | 79 | @Test |
73 | public void testConfigPortName() { | 80 | public void testConfigPortName() { |
74 | - OPC.portType(Port.Type.ODUCLT) | 81 | + opc.portType(Port.Type.ODUCLT) |
75 | .portNumberName(PORT_NUMBER) | 82 | .portNumberName(PORT_NUMBER) |
76 | .portName(CFG_PORT_NAME); | 83 | .portName(CFG_PORT_NAME); |
77 | 84 | ||
78 | PortDescription res; | 85 | PortDescription res; |
79 | // full desc + opc with name | 86 | // full desc + opc with name |
80 | - res = OpticalPortOperator.combine(OPC, N_DESC); | 87 | + res = oper.combine(CP, N_DESC); |
81 | assertEquals("Configured port name expected", | 88 | assertEquals("Configured port name expected", |
82 | CFG_PORT_NAME, res.portNumber().name()); | 89 | CFG_PORT_NAME, res.portNumber().name()); |
83 | assertEquals(DESC_STATIC_PORT, res.annotations().value(AnnotationKeys.STATIC_PORT)); | 90 | assertEquals(DESC_STATIC_PORT, res.annotations().value(AnnotationKeys.STATIC_PORT)); |
84 | 91 | ||
85 | - res = OpticalPortOperator.combine(OPC, U_DESC); | 92 | + res = oper.combine(CP, U_DESC); |
86 | assertEquals("Configured port name expected", | 93 | assertEquals("Configured port name expected", |
87 | CFG_PORT_NAME, res.portNumber().name()); | 94 | CFG_PORT_NAME, res.portNumber().name()); |
88 | assertEquals(DESC_STATIC_PORT, res.annotations().value(AnnotationKeys.STATIC_PORT)); | 95 | assertEquals(DESC_STATIC_PORT, res.annotations().value(AnnotationKeys.STATIC_PORT)); |
... | @@ -90,12 +97,12 @@ public class OpticalPortOperatorTest { | ... | @@ -90,12 +97,12 @@ public class OpticalPortOperatorTest { |
90 | 97 | ||
91 | @Test | 98 | @Test |
92 | public void testConfigAddStaticLambda() { | 99 | public void testConfigAddStaticLambda() { |
93 | - OPC.portType(Port.Type.ODUCLT) | 100 | + opc.portType(Port.Type.ODUCLT) |
94 | .portNumberName(PORT_NUMBER) | 101 | .portNumberName(PORT_NUMBER) |
95 | .staticLambda(CFG_STATIC_LAMBDA); | 102 | .staticLambda(CFG_STATIC_LAMBDA); |
96 | 103 | ||
97 | PortDescription res; | 104 | PortDescription res; |
98 | - res = OpticalPortOperator.combine(OPC, N_DESC); | 105 | + res = oper.combine(CP, N_DESC); |
99 | assertEquals("Original port name expected", | 106 | assertEquals("Original port name expected", |
100 | DESC_PORT_NAME, res.portNumber().name()); | 107 | DESC_PORT_NAME, res.portNumber().name()); |
101 | assertEquals(DESC_STATIC_PORT, res.annotations().value(AnnotationKeys.STATIC_PORT)); | 108 | assertEquals(DESC_STATIC_PORT, res.annotations().value(AnnotationKeys.STATIC_PORT)); |
... | @@ -105,17 +112,31 @@ public class OpticalPortOperatorTest { | ... | @@ -105,17 +112,31 @@ public class OpticalPortOperatorTest { |
105 | 112 | ||
106 | @Test | 113 | @Test |
107 | public void testEmptyConfig() { | 114 | public void testEmptyConfig() { |
108 | - OPC.portType(Port.Type.ODUCLT) | 115 | + opc.portType(Port.Type.ODUCLT) |
109 | .portNumberName(PORT_NUMBER); | 116 | .portNumberName(PORT_NUMBER); |
110 | 117 | ||
111 | PortDescription res; | 118 | PortDescription res; |
112 | - res = OpticalPortOperator.combine(OPC, N_DESC); | 119 | + res = oper.combine(CP, N_DESC); |
113 | assertEquals("Configured port name expected", | 120 | assertEquals("Configured port name expected", |
114 | DESC_PORT_NAME, res.portNumber().name()); | 121 | DESC_PORT_NAME, res.portNumber().name()); |
115 | assertEquals(DESC_STATIC_PORT, res.annotations().value(AnnotationKeys.STATIC_PORT)); | 122 | assertEquals(DESC_STATIC_PORT, res.annotations().value(AnnotationKeys.STATIC_PORT)); |
116 | } | 123 | } |
117 | 124 | ||
118 | 125 | ||
126 | + private class MockNetworkConfigService | ||
127 | + extends NetworkConfigServiceAdapter { | ||
128 | + | ||
129 | + @Override | ||
130 | + public <S, C extends Config<S>> C getConfig(S subject, | ||
131 | + Class<C> configClass) { | ||
132 | + if (configClass == OpticalPortConfig.class) { | ||
133 | + return (C) opc; | ||
134 | + } | ||
135 | + return null; | ||
136 | + } | ||
137 | + } | ||
138 | + | ||
139 | + | ||
119 | private class MockCfgDelegate implements ConfigApplyDelegate { | 140 | private class MockCfgDelegate implements ConfigApplyDelegate { |
120 | 141 | ||
121 | @Override | 142 | @Override | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present 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 | + */ | ||
16 | +package org.onosproject.net.config; | ||
17 | + | ||
18 | +import org.onosproject.net.ConnectPoint; | ||
19 | +import org.onosproject.net.DeviceId; | ||
20 | +import org.onosproject.net.device.PortDescription; | ||
21 | + | ||
22 | +import com.google.common.annotations.Beta; | ||
23 | + | ||
24 | +/** | ||
25 | + * {@link ConfigOperator} for Port. | ||
26 | + * <p> | ||
27 | + * Note: We currently assumes {@link PortConfigOperator}s are commutative. | ||
28 | + */ | ||
29 | +@Beta | ||
30 | +public interface PortConfigOperator extends ConfigOperator { | ||
31 | + | ||
32 | + /** | ||
33 | + * Binds {@link NetworkConfigService} to use for retrieving configuration. | ||
34 | + * | ||
35 | + * @param networkConfigService the service to use | ||
36 | + */ | ||
37 | + void bindService(NetworkConfigService networkConfigService); | ||
38 | + | ||
39 | + | ||
40 | + /** | ||
41 | + * Generates a PortDescription containing fields from a PortDescription and | ||
42 | + * configuration. | ||
43 | + * | ||
44 | + * @param cp {@link ConnectPoint} representing the port. | ||
45 | + * @param descr input {@link PortDescription} | ||
46 | + * @return Combined {@link PortDescription} | ||
47 | + */ | ||
48 | + PortDescription combine(ConnectPoint cp, PortDescription descr); | ||
49 | + | ||
50 | + /** | ||
51 | + * Generates a PortDescription containing fields from a PortDescription and | ||
52 | + * configuration. | ||
53 | + * | ||
54 | + * @param did DeviceId which the port described by {@code descr} resides. | ||
55 | + * @param descr input {@link PortDescription} | ||
56 | + * @return Combined {@link PortDescription} | ||
57 | + */ | ||
58 | + default PortDescription combine(DeviceId did, PortDescription descr) { | ||
59 | + return combine(new ConnectPoint(did, descr.portNumber()), descr); | ||
60 | + } | ||
61 | + | ||
62 | +} |
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); you may not | ||
5 | + * use this file except in compliance with the License. You may obtain a copy of | ||
6 | + * 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, WITHOUT | ||
12 | + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||
13 | + * License for the specific language governing permissions and limitations under | ||
14 | + * the License. | ||
15 | + */ | ||
16 | +package org.onosproject.net.config; | ||
17 | + | ||
18 | +import org.onosproject.net.ConnectPoint; | ||
19 | + | ||
20 | +import com.google.common.annotations.Beta; | ||
21 | + | ||
22 | +/** | ||
23 | + * Abstraction of a port operator registry. | ||
24 | + */ | ||
25 | +@Beta | ||
26 | +public interface PortConfigOperatorRegistry { | ||
27 | + | ||
28 | + /** | ||
29 | + * Registers {@link PortConfigOperator} instance. | ||
30 | + * | ||
31 | + * @param portOp {@link PortConfigOperator} instance. | ||
32 | + * @param configs {@link Config} class for a Port referred by {@code portOp} | ||
33 | + */ | ||
34 | + void registerPortConfigOperator(PortConfigOperator portOp, | ||
35 | + Class<? extends Config<ConnectPoint>>... configs); | ||
36 | + | ||
37 | + /** | ||
38 | + * Unregisters {@link PortConfigOperator} instance. | ||
39 | + * | ||
40 | + * @param portOp {@link PortConfigOperator} instance. | ||
41 | + */ | ||
42 | + void unregisterPortConfigOperator(PortConfigOperator portOp); | ||
43 | + | ||
44 | +} |
... | @@ -105,9 +105,7 @@ | ... | @@ -105,9 +105,7 @@ |
105 | </dependency> | 105 | </dependency> |
106 | 106 | ||
107 | <!-- TODO Remove after decoupling optical --> | 107 | <!-- TODO Remove after decoupling optical --> |
108 | - <!-- - DeviceManager.InternalDeviceProviderService#ensureGeneric --> | ||
109 | <!-- - OpticalCompilers x4 --> | 108 | <!-- - OpticalCompilers x4 --> |
110 | - <!-- - OpticalPortOperator --> | ||
111 | <dependency> | 109 | <dependency> |
112 | <groupId>org.onosproject</groupId> | 110 | <groupId>org.onosproject</groupId> |
113 | <artifactId>onos-optical-model</artifactId> | 111 | <artifactId>onos-optical-model</artifactId> | ... | ... |
... | @@ -34,7 +34,6 @@ import org.onosproject.net.config.NetworkConfigRegistry; | ... | @@ -34,7 +34,6 @@ import org.onosproject.net.config.NetworkConfigRegistry; |
34 | import org.onosproject.net.config.basics.BasicDeviceConfig; | 34 | import org.onosproject.net.config.basics.BasicDeviceConfig; |
35 | import org.onosproject.net.config.basics.BasicHostConfig; | 35 | import org.onosproject.net.config.basics.BasicHostConfig; |
36 | import org.onosproject.net.config.basics.BasicLinkConfig; | 36 | import org.onosproject.net.config.basics.BasicLinkConfig; |
37 | -import org.onosproject.net.config.basics.OpticalPortConfig; | ||
38 | import org.onosproject.net.config.basics.SubjectFactories; | 37 | import org.onosproject.net.config.basics.SubjectFactories; |
39 | import org.slf4j.Logger; | 38 | import org.slf4j.Logger; |
40 | import org.slf4j.LoggerFactory; | 39 | import org.slf4j.LoggerFactory; |
... | @@ -85,15 +84,6 @@ public class BasicNetworkConfigs implements BasicNetworkConfigService { | ... | @@ -85,15 +84,6 @@ public class BasicNetworkConfigs implements BasicNetworkConfigService { |
85 | public BasicLinkConfig createConfig() { | 84 | public BasicLinkConfig createConfig() { |
86 | return new BasicLinkConfig(); | 85 | return new BasicLinkConfig(); |
87 | } | 86 | } |
88 | - }, | ||
89 | - // TODO move this optical specific configuration out to optical app | ||
90 | - new ConfigFactory<ConnectPoint, OpticalPortConfig>(CONNECT_POINT_SUBJECT_FACTORY, | ||
91 | - OpticalPortConfig.class, | ||
92 | - "optical") { | ||
93 | - @Override | ||
94 | - public OpticalPortConfig createConfig() { | ||
95 | - return new OpticalPortConfig(); | ||
96 | - } | ||
97 | } | 87 | } |
98 | ); | 88 | ); |
99 | 89 | ... | ... |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment