Untitled
unknown
plain_text
a year ago
8.4 kB
13
Indexable
package com.ericsson.msdp.spg.repositories;
import com.ericsson.msdp.spg.model.Attribute;
import com.ericsson.msdp.spg.model.BasicNode;
import com.ericsson.msdp.spg.model.SiteNode;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.google.cloud.bigquery.FieldValue;
import com.google.cloud.bigquery.FieldValueList;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.function.Consumer;
@Slf4j
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class EaiRowMapper {
public static final String ID_FIELD_NAME = "SPG_ID_NODE_FIELD_NAME";
@JsonIgnore
static final Map<String, String> keyMap = Map.of("L", "LONG_VALUE", "S", "STRING_VALUE", "I", "INTEGER_VALUE", "D",
"DOUBLE_VALUE", "B", "BOOLEAN_VALUE");
/**
* Not null only if there is a need to override the setting from EAI
* NIM_NGO_NODE tables.
*/
private String idFieldName;
private String nameFieldName;
private String subtypeFieldName;
private String subtypeAttrName;
private String defaultSubtype;
private int physicalNode = -1;
private String typeName;
private String vendorFieldName;
private String nodeAttrName = "Cloud Node Role";
private String statusFieldName;
private String ipAttrName;
private String cloudNodeName = "Cloud Node";
// original equipment manufacturer
private String oemAttrName = "Cloud Node OEM";
private List<Map<String, String>> attributesNames = new ArrayList<>();
private List<String> dynAttributesNames = new LinkedList<>();
private String eaiClassName;
private List<String> aliasedClassNames;
private String whereFilter;
private String regionName;
private String stateProv;
private String city;
public <T extends BasicNode> T mapMain(FieldValueList dlRow, T node) {
FieldValue id = dlRow.get(ID_FIELD_NAME);
node.setEaiId(id.getLongValue());
node.setNodeType(typeName);
node.setName(dlRow.get(nameFieldName).getStringValue());
if (physicalNode > -1) {
node.setPhysical(physicalNode == 1);
}
node.setCloudNode(false);
node.setOriginalEquipmentManufacturer("Other");
if (defaultSubtype != null) {
node.setSubType(defaultSubtype);
} else {
node.setSubType(typeName);
}
if (subtypeFieldName != null) {
FieldValue value = dlRow.get(subtypeFieldName);
if (!value.isNull()) {
node.setSubType(sanitizeSubType(value));
}
}
try {
if (!StringUtils.isEmpty(vendorFieldName)) {
FieldValue value = dlRow.get(vendorFieldName);
if (!value.isNull()) {
node.setVendor(value.getStringValue());
}
}
} catch (IllegalArgumentException e) {
// nop
}
try {
if (!StringUtils.isEmpty(statusFieldName)) {
FieldValue value = dlRow.get(statusFieldName);
if (!value.isNull()) {
node.setStatus(value.getStringValue());
}
}
} catch (IllegalArgumentException e) {
// nop
}
for (Map<String, String> attr : attributesNames) {
FieldValue value = dlRow.get(attr.get("source"));
if (!value.isNull()) {
node.getAttributes().add(new Attribute(attr.get("target"), value.getStringValue()));
}
}
if (node instanceof SiteNode) {
try {
FieldValue value = dlRow.get("NPA_NXX");
System.out.println("================ set region if block ==============> " + value);
if (!value.isNull()) {
// ((SiteNode) node).setRegion(value.getStringValue());
((SiteNode) node).setNpaNxx(value.getStringValue());
}
} catch (Exception e) {
log.debug("Missing field?", e);
}
}
if (node instanceof SiteNode) {
try {
FieldValue value = dlRow.get("STATE_PROV");
if (!value.isNull()) {
((SiteNode) node).setStateProv(value.getStringValue());
}
} catch (Exception e) {
log.debug("Missing field?", e);
}
}
if (node instanceof SiteNode) {
try {
FieldValue value = dlRow.get("CITY");
if (!value.isNull()) {
((SiteNode) node).setCity(value.getStringValue());
}
} catch (Exception e) {
log.debug("Missing field?", e);
}
}
// System.out.println("=================== dlRow field list ================> " + dlRow);
return node;
}
private String sanitizeSubType(FieldValue value) {
return sanitizeSubType(value.getStringValue());
}
private String sanitizeSubType(String v1) {
v1 = v1.toLowerCase(Locale.US).trim();
try {
int firstSpace = v1.indexOf(" ");
if (firstSpace < 0) {
firstSpace = v1.length();
}
if (v1.startsWith("network-cloud||")) {
return v1.substring("network-cloud||".length(), firstSpace);
}
if (v1.startsWith("network||")) {
return v1.substring("network||".length(), firstSpace);
}
} catch (Exception e) {
// nop;
}
return v1;
}
public <T extends BasicNode> T mapAttr(FieldValueList dlRow, T node) {
if (dlRow.get("ATTRIBUTE_LABEL").isNull()) {
log.warn("[BUG] Attribute label missing for node {}. This should not happen.", node.getId());
return node;
}
if (setDefinedField(dlRow, vendorFieldName, s -> node.setVendor(capitalize(s))))
return node;
if (setDefinedField(dlRow, nodeAttrName, s -> node.setRole(capitalize(s))))
return node;
if (setDefinedField(dlRow, oemAttrName, s -> node.setOriginalEquipmentManufacturer(capitalize(s))))
return node;
if (setDefinedField(dlRow, cloudNodeName,
v -> node.setCloudNode("yes".equalsIgnoreCase(v) || "y".equalsIgnoreCase(v)))) {
if (physicalNode > -1) {
node.setPhysical(physicalNode == 1);
}
}
setDefinedField(dlRow, subtypeAttrName, s -> node.setSubType(sanitizeSubType(s)));
if (setDefinedField(dlRow, ipAttrName, s -> node.setIpAddress(s)))
return node;
if (node instanceof SiteNode) {
if (setDefinedField(dlRow, regionName, v -> ((SiteNode) node).setRegion(v)))
return node;
}
// all the rest
String label = dlRow.get("ATTRIBUTE_LABEL").getStringValue();
for (String attr : dynAttributesNames) {
if (attr.equals(label)) {
FieldValue value = dlRow.get(keyMap.get(dlRow.get("TYPE").getStringValue()));
if (!value.isNull()) {
node.addOrUpdateOrAttr(label, value.getStringValue());
}
}
}
return node;
}
private boolean setDefinedField(FieldValueList dlRow, List<String> expectedLabelNames, Consumer<String> fieldSetter) {
String label = dlRow.get("ATTRIBUTE_LABEL").getStringValue();
for (var expectedLabelName : expectedLabelNames) {
if (!StringUtils.isEmpty(expectedLabelName) && label.equalsIgnoreCase(expectedLabelName)) {
if (!dlRow.get("STRING_VALUE").isNull()) {
fieldSetter.accept(dlRow.get("STRING_VALUE").getStringValue());
}
return true;
}
}
return false;
}
/**
* Set the field of provided name if label match
*
* @param dlRow
* @param expectedLabelName, expected label name, can be null
* @return true if field matches.
*/
private boolean setDefinedField(FieldValueList dlRow, String expectedLabelName, Consumer<String> fieldSetter) {
return setDefinedField(dlRow, Collections.singletonList(expectedLabelName), fieldSetter);
}
private String capitalize(String string_value) {
if (string_value == null) {
return null;
}
if (string_value.length() > 4) {
return StringUtils.capitalize(string_value.toLowerCase());
} else {
return StringUtils.capitalize(string_value);
}
}
public List<String> getAllClassNames() {
if (aliasedClassNames != null) {
var list = new ArrayList<>(aliasedClassNames);
list.add(eaiClassName);
return list;
} else {
return Collections.singletonList(eaiClassName);
}
}
}
Editor is loading...
Leave a Comment