Lição 9: Criar o Código para a Classe CheckboxOptionControl

A classe CheckboxOptionControl altera o campo de texto padrão do CARMA para uma caixa de seleção no parâmetro Option Como este parâmetro é um parâmetro yes ou no, uma caixa de seleção é mais conveniente para o usuário.

Procedimento

  1. Na visualização Package Explorer , abra a classe CheckboxOptionControl que você criou navegando com.ibm.carma.plugin.howto > src > com.ibm.carma.plugin.howto.action e clicando duas vezes sobre a classe.
  2. Primeiro, você incluirá o objeto do botão de caixa de seleção como dados de instância para a classe Isso permite que o botão da caixa de seleção e todos os seus metadados estejam disponíveis para a classe CheckboxOptionControl . Inclua a seguinte linha de código: Button theButton;
  3. Em seguida, você substitui o método createControl para criar o botão de caixa de seleção e retorná-lo em vez do campo de texto padrão. O pseudocódigo a seguir demonstra o que você deseja que esse método faça:
    Create theButton with the checkbox style
    Give the theButton some text
    Return the theButton
    Use o código de amostra a seguir para substituir esse método:
    /* Create a checkbox for the yes/no option */
    public Control createControl(Composite parent, 
                                 RepositoryManager repositoryManager,
                                 Parameter param, 
                                 Action action,
                                 CustomActionAccepter custActionAccepter,
                                 Object defaultValue) 
    {
       theButton = new Button(parent, SWT.CHECK);
       theButton.setText("Check me!");
       return theButton;
    }
  4. Agora, você substitui o método getValue . Esse método retorna o valor dos parâmetros. Como você está usando uma caixa de seleção em vez de um campo de texto, o código que você escrever terá que converter o status marcado ou desmarcado da caixa de seleção no formato de sequência esperado. O pseudocódigo a seguir demonstra isso:
    if the checkbox is checked
    	return "Y" for yes
    else
    	return "N" for no
    Use o código de amostra a seguir para substituir esse método:
    public Object getValue() 	{
    		if(theButton.getSelection())
    			return "Y";
    		else
    			return "N";
    	}
  5. O último método que você precisa substituir é o método isUsingDefaultLabel . Se estiver configurado para false, esse método não exibirá o rótulo padrão que você forneceu ao incluir o parâmetro no RAM. Se configurado para true, o rótulo será exibido normalmente. Para essa amostra, o código usará o rótulo padrão.
    Use o código de amostra a seguir para substituir o método:
    public boolean isUsingDefaultLabel()
    {
       return true;
    }
  6. Finalmente, é necessário garantir que todas as importações requeridas estão listadas. Inclua qualquer uma das instruções de importação a seguir que não esteja listada em sua classe:
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.widgets.*;
    
    import com.ibm.carma.model.*;
    
    import com.ibm.carma.ui.action.custom.AbstractCustomParameterControl;
  7. Salve a origem e depure qualquer erro.

Resultados

Seu código completo para o CheckBoxOptionControl deve ser similar a:
package com.ibm.carma.plugin.howto.action;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;

import com.ibm.carma.model.*;

import com.ibm.carma.ui.action.custom.AbstractCustomParameterControl;

public class CheckboxOptionAction extends AbstractCustomParameterControl {
   //Add the button to the instance data
   Button theButton;
   
   /* Create a checkbox for the yes/no option */
   public Control createControl(Composite parent, 
                                RepositoryManager repositoryManager,
                                Parameter param, 
                                Action action, 
                                CustomActionAccepter customActionAccepter, 
                                Object defaultValue) 	{
      theButton = new Button(parent, SWT.CHECK);
      theButton.setText("Check me!");
      return theButton;
   }

   @Override
   public Object getValue() 	{
      if(theButton.getSelection())
	      return "Y";
      else
         return "N";
   }

   @Override 
   public boolean isUsingDefaultLabel() 	{
      return true;
   }
}