/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.client.util; import java.util.UUID; public class DefaultNameGenerator implements NameGenerator { @Override public String generate(String tenant, String resource, String resourceUrn, char delimiter, int maxLength) { String tenantName = tenant.replaceAll("\\s+|[^a-zA-Z0-9]", ""); String resourceName = resource.replaceAll("\\s+|[^a-zA-Z0-9]", ""); String resourceUUID = (resourceUrn == null) ? UUID.randomUUID().toString() : resourceUrn.split(":")[3]; String result = tenantName + delimiter + resourceName + delimiter + resourceUUID; // If the resulting string is longer than the maxLength, // then truncate the tenant and/or the resource names, // so the result length is at most maxLength. if (result.length() > maxLength) { int tenantNameLength = tenantName.length(); int resourceNameLength = resourceName.length(); int whatsLeft = maxLength - resourceUUID.length() - 2; int whatsExtra = (tenantNameLength + resourceNameLength) - whatsLeft; // Truncate the name that is longer if ((whatsExtra > whatsLeft) || (tenantNameLength == resourceNameLength)) { int halfOfLeft = whatsLeft / 2; String adjustedTenant = (halfOfLeft > tenantNameLength) ? tenantName : tenantName.substring(0, halfOfLeft); String adjustedResource = (halfOfLeft > resourceNameLength) ? resourceName : resourceName.substring(0, halfOfLeft); result = adjustedTenant + delimiter + adjustedResource + delimiter + resourceUUID; } else if (resourceNameLength > tenantNameLength) { result = tenantName + delimiter + resourceName.substring(0, resourceNameLength - whatsExtra) + delimiter + resourceUUID; } else if (tenantNameLength > resourceNameLength) { result = tenantName.substring(0, tenantNameLength - whatsExtra) + delimiter + resourceName + delimiter + resourceUUID; } } return result; } }