/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.util;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.BlockMirror;
import com.emc.storageos.db.client.model.BlockObject;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.client.model.Host;
import com.emc.storageos.db.client.model.Initiator;
import com.emc.storageos.db.client.model.StoragePool;
import com.emc.storageos.db.client.model.StoragePort;
import com.emc.storageos.db.client.model.StringMap;
import com.emc.storageos.db.client.model.VplexMirror;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
public class CommonTransformerFunctions {
public static final String EMPTY_STRING = "";
public static final int MAX_COLLECTION_SIZE_TO_DISPLAY = 20;
public static final Function<BlockMirror, URI> FCTN_MIRROR_TO_URI =
new Function<BlockMirror, URI>() {
@Override
public URI apply(BlockMirror mirror) {
return mirror.getId();
}
};
public static final Function<DataObject, String> FCTN_VOLUME_URI_TO_STR =
new Function<DataObject,
String>() {
@Override
public String apply(DataObject volume) {
String val = "";
if (volume != null) {
val = volume.getId().toString();
}
return val;
}
};
public static final Function<String, URI> FCTN_STRING_TO_URI =
new Function<String, URI>() {
@Override
public URI apply(String uri) {
return URI.create(uri);
}
};
public static final Function<String, Integer> FCTN_STRING_TO_INTEGER =
new Function<String, Integer>() {
@Override
public Integer apply(String str) {
return Integer.valueOf(str);
}
};
public static final Function<URI, String> FCTN_URI_TO_STRING =
new Function<URI, String>() {
@Override
public String apply(URI uri) {
return uri.toString();
}
};
public static Function<String, Initiator>
fctnStringToInitiator(final DbClient dbClient) {
return new Function<String, Initiator>() {
@Override
public Initiator apply(String uriStr) {
Initiator initiator = null;
if (uriStr != null && !uriStr.isEmpty()) {
initiator = dbClient.queryObject(Initiator.class,
URI.create(uriStr));
}
return initiator;
}
};
}
public static Function<String, Host>
fctnStringToHost(final DbClient dbClient) {
return new Function<String, Host>() {
@Override
public Host apply(String uriStr) {
Host host = null;
if (uriStr != null && !uriStr.isEmpty()) {
host = dbClient.queryObject(Host.class,
URI.create(uriStr));
}
return host;
}
};
}
public static Function<Initiator, String>
fctnInitiatorToPortName() {
return new Function<Initiator, String>() {
@Override
public String apply(Initiator initiator) {
if (initiator != null) {
return Initiator.normalizePort(initiator.getInitiatorPort());
}
return NullColumnValueGetter.getNullStr();
}
};
}
public static Function<DataObject, URI>
fctnDataObjectToID() {
return new Function<DataObject, URI>() {
@Override
public URI apply(DataObject dataObject) {
return dataObject.getId();
}
};
}
public static Function<BlockObject, String>
fctnBlockObjectToNativeID() {
return new Function<BlockObject, String>() {
@Override
public String apply(BlockObject blockObject) {
return blockObject.getNativeId();
}
};
}
public static Function<BlockObject, String>
fctnBlockObjectToLabel() {
return new Function<BlockObject, String>() {
@Override
public String apply(BlockObject blockObject) {
return blockObject.getLabel();
}
};
}
public static Function<BlockObject, String>
fctnBlockObjectToNativeGuid() {
return new Function<BlockObject, String>() {
@Override
public String apply(BlockObject blockObject) {
return blockObject.getNativeGuid();
}
};
}
public static Function<BlockObject, String>
fctnBlockObjectToForDisplay() {
return new Function<BlockObject, String>() {
@Override
public String apply(BlockObject blockObject) {
return blockObject.forDisplay();
}
};
}
public static Function<StoragePort, String>
fctnStoragePortToPortName() {
return new Function<StoragePort, String>() {
@Override
public String apply(StoragePort port) {
return port.getPortName();
}
};
}
public static Function<DataObject, String> fctnDataObjectToForDisplay() {
return new Function<DataObject, String>() {
@Override
public String apply(DataObject obj) {
return obj != null ? obj.forDisplay() : EMPTY_STRING;
}
};
}
public static final Function<VplexMirror, URI> FCTN_VPLEX_MIRROR_TO_URI =
new Function<VplexMirror, URI>() {
@Override
public URI apply(VplexMirror mirror) {
return mirror.getId();
}
};
public static final Function<StoragePool, URI> fctnStoragePoolToStorageSystemURI() {
return new Function<StoragePool, URI>() {
@Override
public URI apply(StoragePool pool) {
return pool.getStorageDevice();
}
};
}
public static String collectionToString(StringMap map) {
String collectionAsString = EMPTY_STRING;
if (map != null) {
collectionAsString = collectionToString(map.entrySet());
}
return collectionAsString;
}
public static String collectionToString(Collection collection) {
String collectionAsString = EMPTY_STRING;
if (collection != null) {
boolean isTruncatedList = false;
int originalSize = collection.size();
// Limit the number of items to display
if (originalSize > MAX_COLLECTION_SIZE_TO_DISPLAY) {
Collection truncatedCollection = new ArrayList<>();
Iterator it = collection.iterator();
int count = 0;
while (it.hasNext() && (count++ < MAX_COLLECTION_SIZE_TO_DISPLAY)) {
truncatedCollection.add(it.next());
}
isTruncatedList = true;
collection = truncatedCollection;
}
collectionAsString = Joiner.on(',').skipNulls().join(collection);
if (isTruncatedList) {
collectionAsString = collectionAsString.concat(String.format("... %d elements skipped",
originalSize - MAX_COLLECTION_SIZE_TO_DISPLAY));
}
}
return collectionAsString;
}
public static String collectionString(final StringMap map) {
return collectionString((map != null) ? map.entrySet() : Collections.emptyList());
}
public static String collectionString(final Collection collection) {
final int size = (collection != null) ? collection.size() : 0;
return String.format("size=%-4d [%s]", size, CommonTransformerFunctions.collectionToString(collection));
}
}