/*
/*
* Copyright (c) 2017 Dell EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.model.util;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.emc.storageos.db.client.model.BlockObject;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.client.model.ScopedLabel;
import com.emc.storageos.db.client.model.Task;
import com.google.common.collect.Maps;
/**
* Utility class to retrieve tags from data objects.
*/
public class TagUtils {
private TagUtils(){};
private static String ISA_NAMESPACE = "vipr";
private static String MOUNTPOINT = fqnName(ISA_NAMESPACE, "mountPoint");
private static String VMFS_DATASTORE = fqnName(ISA_NAMESPACE, "vmfsDatastore");
private static String BOOT_VOLUME = fqnName(ISA_NAMESPACE, "bootVolume");
private static String ORDER_ID = fqnName(ISA_NAMESPACE, "orderId");
private static String ORDER_NUMBER = fqnName(ISA_NAMESPACE, "orderNumber");
private static Pattern MACHINE_TAG_REGEX = Pattern.compile("([^W]*\\:[^W]*)=(.*)");
private static String fqnName(String namespace, String name) {
return namespace + ":" + name;
}
public static String getHostMountPointTagName(URI hostId) {
return MOUNTPOINT + "-" + hostId;
}
public static String getVMFSDatastoreTagName(URI hostId) {
return VMFS_DATASTORE + "-" + hostId;
}
public static String getBootVolumeTagName() {
return BOOT_VOLUME;
}
public static String getOrderIdTagName() {
return ORDER_ID;
}
public static String getOrderNumberTagName() {
return ORDER_NUMBER;
}
private static Map<String, String> parseTags(Collection<String> tags) {
Map<String, String> machineTags = Maps.newHashMap();
for (String tag : tags) {
Matcher matcher = MACHINE_TAG_REGEX.matcher(tag);
if (matcher.matches()) {
machineTags.put(matcher.group(1), matcher.group(2));
}
}
return machineTags;
}
private static String getTagValue(DataObject dataObject, String tagName) {
if (dataObject == null || (dataObject.getTag() == null)) {
return null;
}
List<String> tags = new ArrayList<>();
for (ScopedLabel sl : dataObject.getTag()) {
tags.add("" + sl.getLabel());
}
Map<String, String> currentMachineTags = parseTags(tags);
return currentMachineTags.get(tagName);
}
public static String getBlockVolumeMountPoint(BlockObject blockObject, URI hostId) {
return getTagValue(blockObject, getHostMountPointTagName(hostId));
}
public static String getBlockVolumeVMFSDatastore(BlockObject blockObject, URI hostId) {
return getTagValue(blockObject, getVMFSDatastoreTagName(hostId));
}
public static String getBlockVolumeBootVolume(BlockObject blockObject) {
return getTagValue(blockObject, getBootVolumeTagName());
}
public static String getTaskOrderId(Task task) {
return getTagValue(task, getOrderIdTagName());
}
public static String getTaskOrderNumber(Task task) {
return getTagValue(task, getOrderNumberTagName());
}
public static String getOrderIdTagValue(DataObject dataObject) {
return getTagValue(dataObject, getOrderIdTagName());
}
public static String getOrderNumberTagValue(DataObject dataObject) {
return getTagValue(dataObject, getOrderNumberTagName());
}
}