Migrate users of Optional.get()
[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 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow;
9
10 import java.util.HashMap;
11 import java.util.Map;
12 import java.util.Optional;
13 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
14 import org.opendaylight.openflowplugin.api.OFConstants;
15 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorKey;
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ResultInjector;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlagsV10;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;
20 import org.opendaylight.yangtools.yang.common.Uint8;
21
22 public final class FlowFlagsInjector {
23     private FlowFlagsInjector() {
24     }
25
26     @SuppressWarnings("unchecked")
27     public static <F, T> void inject(final Optional<F> source, final T target, final Uint8 version) {
28         F sourceResult;
29         if (source.isPresent()) {
30             sourceResult = source.orElseThrow();
31         } else if (version.equals(EncodeConstants.OF_VERSION_1_0)) {
32             sourceResult = (F) FlowFlagsV10Convertor.defaultResult();
33         } else {
34             sourceResult = (F) FlowFlagsConvertor.defaultResult();
35         }
36
37         final Map<ConvertorKey, ResultInjector<?, ?>> injectorMap = new HashMap<>();
38         addInjectors(injectorMap);
39
40         final ResultInjector<F, T> injection = (ResultInjector<F, T>) injectorMap
41                 .get(new ConvertorKey(version, target.getClass()));
42
43         injection.inject(sourceResult, target);
44     }
45
46     private static void addInjectors(final Map<ConvertorKey, ResultInjector<?, ?>> injectionMapping) {
47         // OF-1.3|FlowModFlags --> FlowModInputBuilder
48         injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_3, FlowModInputBuilder.class),
49             (ResultInjector<FlowModFlags, FlowModInputBuilder>)(value, target) -> target.setFlags(value));
50
51         // OF-1.3|FlowModFlagsV10 --> FlowModInputBuilder
52         injectionMapping.put(new ConvertorKey(OFConstants.OFP_VERSION_1_0, FlowModInputBuilder.class),
53             (ResultInjector<FlowModFlagsV10, FlowModInputBuilder>)(value, target) -> target.setFlagsV10(value));
54     }
55 }