Merge "Fix codestyle"
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / flow / FlowFlagsInjector.java
1 /*
2  * Copyright (c) 2013 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.openflow.md.core.sal.convertor.flow;
10
11 import java.util.HashMap;
12 import java.util.Map;
13 import java.util.Optional;
14 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
15 import org.opendaylight.openflowplugin.api.OFConstants;
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorKey;
17 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ResultInjector;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlagsV10;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;
21
22 public class FlowFlagsInjector {
23     @SuppressWarnings("unchecked")
24     public static <FROM, TO> void inject(Optional<FROM> source, TO target, short version) {
25         FROM sourceResult;
26         if (source.isPresent()) {
27             sourceResult = source.get();
28         } else if (version == EncodeConstants.OF10_VERSION_ID) {
29             sourceResult = (FROM) FlowFlagsV10Convertor.defaultResult();
30         } else {
31             sourceResult = (FROM) FlowFlagsConvertor.defaultResult();
32         }
33
34         final Map<ConvertorKey, ResultInjector<?, ?>> injectorMap = new HashMap<>();
35         addInjectors(injectorMap);
36
37         final ResultInjector<FROM, TO> injection = (ResultInjector<FROM, TO>) injectorMap
38                 .get(new ConvertorKey(version, target.getClass()));
39
40         injection.inject(sourceResult, target);
41     }
42
43     private static void addInjectors(final Map<ConvertorKey, ResultInjector<?, ?>> injectionMapping) {
44         // OF-1.3|FlowModFlags --> FlowModInputBuilder
45         injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_3, FlowModInputBuilder.class),
46                 new ResultInjector<FlowModFlags, FlowModInputBuilder>() {
47                     @Override
48                     public void inject(final FlowModFlags value,
49                                        final FlowModInputBuilder target) {
50                         target.setFlags(value);
51                     }
52                 });
53
54         // OF-1.3|FlowModFlagsV10 --> FlowModInputBuilder
55         injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_0, FlowModInputBuilder.class),
56                 new ResultInjector<FlowModFlagsV10, FlowModInputBuilder>() {
57                     @Override
58                     public void inject(final FlowModFlagsV10 value,
59                                        final FlowModInputBuilder target) {
60                         target.setFlagsV10(value);
61                     }
62                 });
63     }
64 }