Os desenvolvedores do RAM possuem a capacidade de customizar as ações existentes do CARMA ou criar ações completamente novas. Essas ações podem ter parâmetros customizados ou valores de retorno, como definido pela configuração do host CARMA.
Há várias classes auxiliares para que você possa utilizar facilmente essas ações customizadas:
A forma mais simples de obter valores para um parâmetro customizado é utilizar um dos métodos no CustomActionUtil; por exemplo, getCustomParameters:
CustomActionUtil.getCustomParameters(resource, "101");
Isso recupera os parâmetros customizados para a ação com um ID de ação de 101 para o recurso determinado. Se planejar utilizar a mesma tarefa repetidamente para recursos diferentes, mas semelhantes, você pode utilizar getCustomParametersForTask da seguinte forma:
CARMAContent[] resources = getResources();
CarmaTaskMemento taskMemento = new CarmaTaskMemento();
for (int i = 0; i < resources.length; i++) {
CustomActionUtil.getCustomParametersForTask(taskMemento, resources[i], "101");
}
No exemplo acima, taskMemento é utilizado para armazenar informações digitadas pelo usuário para uso entre as chamadas de ações. Se taskMemento não foi utilizado aqui, o usuário deve ser consultado com os mesmos prompts para todos os recursos.
Se você preferir utilizar um mecanismo diferente para procurar valores de parâmetro (como uma interface com o usuário diferente), poderá interagir diretamente com a classe CustomActionParameterManager, conforme ilustrado no seguinte exemplo:
CustomActionParameterManager manager = CustomActionParameterManager.getManager();
Object[] paramsToPass = manager.getCustomParameters(resource, actionId); // parâmetros a serem transmitidos ao comando
//este método dirá se o gerenciador possui ou não todas as informações necessárias
if (manager.isPromptNeeded(resource, actionId)) {
final Action action = resource.findActionFor(actionId);
Iterator parameters = action.getParameters().iterator();
//localize o parâmetro que deseja alterar desta forma ou procure por ele como nulo em paramsToPass
int index = 0;
while (it.hasNext()) {
Parameter param = (Parameter) it.next();
if (param.getName().equals(targetName))
break;
index++;
}
paramsToPass[index] = new Boolean(false);
//armazene opcionalmente o parâmetro para posteriormente
Object[] paramsToStore = new Object[paramsToPass.length];
for (int i = 0; i < paramsToStore.length; i++) {
paramsToStore[i] = null;
if (i == index)
paramsToStore[i] = new Boolean(false);
}
manager.setUserStoredParamValues(resource.getRepository(), paramsToStore);
}
No exemplo acima, targetName é o nome do parâmetro, como definido pelo desenvolvedor RAM.