Open Kilda Java Documentation
IslLinkConverter.java
Go to the documentation of this file.
1 package org.openkilda.integration.converter;
2 
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6 
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.stereotype.Component;
13 
14 @Component
15 public class IslLinkConverter {
16 
17  @Autowired
18  private SwitchIntegrationService switchIntegrationService;
19 
20  public List<IslLinkInfo> toIslLinksInfo(final List<IslLink> islLinks,
21  Map<String, String> islCostMap) {
22  if (islLinks != null) {
23  final List<IslLinkInfo> islLinkInfos = new ArrayList<>();
24  final Map<String, String> csNames =
25  switchIntegrationService.getCustomSwitchNameFromFile();
26  islLinks.forEach(islLink -> {
27 
28  IslLinkInfo islLinkInfo = toIslLinkInfo(islLink, csNames, islCostMap);
29 
30  if (islLinkInfos.size() == 0) {
31  islLinkInfos.add(islLinkInfo);
32  } else {
33  boolean isSwitchRelationAdd = true;
34  for (IslLinkInfo flowInfo : islLinkInfos) {
35  if (islLinkInfo.getForwardKey().equalsIgnoreCase(flowInfo.getReverseKey())) {
36  isSwitchRelationAdd = false;
37  flowInfo.setUnidirectional(false);
38  flowInfo.setState1(islLinkInfo.getState());
39  if (!flowInfo.getState().equalsIgnoreCase(islLinkInfo.getState())) {
40  flowInfo.setAffected(true);
41  }
42  break;
43  }
44  }
45  if (isSwitchRelationAdd) {
46  islLinkInfos.add(islLinkInfo);
47  }
48  }
49  });
50  return islLinkInfos;
51  }
52  return null;
53  }
54 
55  private IslLinkInfo toIslLinkInfo(final IslLink islLink, final Map<String, String> csNames,
56  Map<String, String> islCostMap) {
57  IslLinkInfo islLinkInfo = new IslLinkInfo();
58  islLinkInfo.setUnidirectional(true);
59  islLinkInfo.setAvailableBandwidth(islLink.getAvailableBandwidth());
60  islLinkInfo.setSpeed(islLink.getSpeed());
61  islLinkInfo.setState(islLink.getState());
62  List<IslPath> islPaths = islLink.getPath();
63  if (islPaths != null && !islPaths.isEmpty()) {
64  if (islPaths.get(0) != null) {
65  islLinkInfo.setSrcPort(islPaths.get(0).getPortNo());
66  islLinkInfo.setSrcSwitch(islPaths.get(0).getSwitchId());
67  islLinkInfo.setSrcSwitchName(switchIntegrationService.customSwitchName(csNames,
68  islPaths.get(0).getSwitchId()));
69  if (islPaths.get(0).getSegmentLatency() > 0) {
70  islLinkInfo.setLatency(islPaths.get(0).getSegmentLatency());
71  }
72  }
73  if (islPaths.get(1) != null) {
74  islLinkInfo.setDstPort(islPaths.get(1).getPortNo());
75  islLinkInfo.setDstSwitch(islPaths.get(1).getSwitchId());
76  islLinkInfo.setDstSwitchName(switchIntegrationService.customSwitchName(csNames,
77  islPaths.get(1).getSwitchId()));
78  if (islPaths.get(1).getSegmentLatency() > 0) {
79  islLinkInfo.setLatency(islPaths.get(1).getSegmentLatency());
80  }
81  }
82  }
83  // set isl cost
84  if (islCostMap.containsKey(islLinkInfo.getForwardKey())) {
85  islLinkInfo.setCost(islCostMap.get(islLinkInfo.getForwardKey()));
86  } else if (islCostMap.containsKey(islLinkInfo.getReverseKey())) {
87  islLinkInfo.setCost(islCostMap.get(islLinkInfo.getReverseKey()));
88  }
89  return islLinkInfo;
90  }
91 }