Exemplo: Utilizando a Transformação Bidirecional em Dados do Tipo DataObject

Ao utilizar informações que estejam em um script de idioma bidirecional, pode ser necessário transformar o formato dos dados. Este é um exemplo, etapa a etapa, da codificação que desempenha uma transformação em dados do tipo DataObject.

Por Que e Quando Desempenhar Esta Tarefa

O módulo requer que as informações do tipo DataObject sejam transformadas de um formato bidirecional para outro.

Nota: Se você não estiver familiarizado com os formatos, consulte Valores para a Cadeia de Formatações Bidirecional.

Etapas para Esta Tarefa

  1. Inclua todas as classes bidirecionais que contenham a implementação do mecanismo bidirecional.
    import com.ibm.bidiTools.bdlayout.*;
  2. Inclua todas as classes necessárias para manipular o objeto do tipo DataObject.
    import commonj.sdo.DataObject;
    import commonj.sdo.Type;
    import commonj.sdo.Property;
  3. Defina as variáveis de cadeia que conterão os diferentes tipos de cadeias que um objeto do tipo DataObject contém. Esta etapa facilita a filtragem dos atributos do tipo String ao atravessar recursivamente o DataObject.
    String STRING_STR_TYPE = "String";
    String NORM_STRING_STR_TYPE = "normalizedString";
    String TOKEN_STR_TYPE = "token";
    String LANG_STR_TYPE = "language";
    String NAME_STR_TYPE = "Name";
    String NMTOKEN_STR_TYPE = "NMTOKEN";
    String NCNANE_STR_TYPE = "NCName";
    String ID_STR_TYPE = "ID";
    String IDREF_STR_TYPE = "IDREF";
    String IDREFS_STR_TYPE = "IDREFS";
    String ENTITY_STR_TYPE = "ENTITY";
    String ENTITIES_STR_TYPE = "ENTITIES";
  4. Defina a função que verifica se o tipo de uma propriedade é String.
    private static boolean isStringFamilyType (Property property) {
        boolean rc = false;
        if ((property.getType().getName().equalsIgnoreCase(STRING_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(NORM_STRING_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(TOKEN_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(LANG_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(NAME_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(NMTOKEN_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(NCNANE_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(ID_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(IDREF_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(IDREFS_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(ENTITY_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(ENTITIES_STR_TYPE)))
           rc = true;
         return rc;
    }
  5. Defina a função recursiva que aplica a transformação bidirecional no DataObject inteiro.
    Nota: A seguir, são explicadas as premissas básicas seguidas pela lógica do código.
    • a transformação bidirecional é aplicada em propriedades apenas do tipo string
    • as propriedades da cadeia de tipos no DataObject são armazenadas em um formato bidirecional
    DataObject BiDiDataObjTransformationBO(DataObject boIn, String formatIn, String formatOut){
    
       Type type;
       Property property;
    
       if (boIn == null) return null;
    
       type = boIn.getType();
       List propertyList = type.getProperties();
       for (int propertyNumber = 0; propertyNumber < propertyList.size(); propertyNumber++){
             property = (Property) propertyList.get(propertyNumber);
             String propertyName = property.getName();
    1. Ignore todas as propriedades que não sejam de cadeia.
             if (!isStringFamilyType(property))
                   continue;
      
             if (property.isContainment()) {
                  if (property.isMany()) {
                        List childsList = boIn.getList(property);
    2. Chame recursivamente a transformação para manipular objetos-filho.
       
                        for (int childNumber = 0; childNumber < childsList.size();
      		   childNumber++){                   BiDiDataObjTransformationBO(connectionContext,
      											 ((DataObject)childsList.get(childNumber)),formatIn, formatOut);
                    } 
                } else { 
    3. Chame recursivamente a transformação para manipular objetos-filho de quaisquer objetos de negócios contidos.
                    BiDiDataObjTransformationBO(connectionContext,
      			            ((DataObject)boIn.get(property)),formatIn, formatOut);
               } 
           } else {
    4. Transforme os atributos de cadeia simples.
               String str = BiDiStringTransformation(
                   (boIn.getString(propertyName),formatIn, formatOut);
               boIn.setString(propertyName, str);
           } 
         } 
         return boIn;
      }
Conceitos relacionados

(c) Copyright IBM Corporation 2005, 2006.
Este centro de informações é desenvolvido em tecnologia Eclipse (http://www.eclipse.org)