/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.sa.asset; import java.lang.reflect.Method; import java.util.List; import org.apache.commons.lang.StringUtils; import com.emc.sa.asset.annotation.Asset; import com.emc.sa.asset.annotation.AssetDependencies; import com.emc.sa.asset.annotation.AssetNamespace; import com.google.common.collect.Lists; /** Describes a javaMethod that can be used to retrieve the specific Asset options */ public class AssetOptionsMethodInfo { public Method javaMethod; public String assetNamespace; public String assetName; public List<String> assetDependencies; public AssetOptionsMethodInfo(AssetNamespace namespace, Asset asset, Method javaMethod) { this.assetNamespace = namespace.value(); this.assetName = formatAssetTypeName(namespace.value(), asset.value()); this.assetDependencies = Lists.newArrayList(); final AssetDependencies assetDependenciesAnnotation = javaMethod.getAnnotation(AssetDependencies.class); if (assetDependenciesAnnotation != null) { for (String dependency : assetDependenciesAnnotation.value()) { this.assetDependencies.add(formatAssetTypeName(namespace.value(), dependency)); } } this.javaMethod = javaMethod; } public Object convertParameter(int index, String value) { Class<?>[] types = javaMethod.getParameterTypes(); if ((index >= 0) && (index < types.length)) { Class<?> type = types[index]; return AssetConverter.convert(value, type); } return value; } public String formatAssetTypeName(String namespace, String asset) { if (StringUtils.contains(asset, '.')) { return asset; } else { return String.format("%s.%s", namespace, asset); } } @Override public String toString() { return "AssetOptionsMethod : " + assetNamespace + assetName + "\n\t Java Method: " + javaMethod.getName() + "\n\t Asset Dependencies: " + StringUtils.join(assetDependencies, ", "); } }