Beispiel: Bidirektionale Transformation von Daten des Typs DataObject

Wenn Sie Informationen in einem Script mit bidirektionaler Sprache verwenden, müssen Sie das Format der Daten unter Umständen umwandeln. Dieses Beispiel enthält eine schrittweise Anleitung zur Entwicklung von Code, der Daten des Typs DataObject umwandelt.

Gründe und Szenarios für die Ausführung dieser Task

Für das Modul ist es erforderlich, dass Informationen des Typs DataObject von einem bidirektionalen Format in ein anderes umgewandelt werden.

Anmerkung: Weitere Informationen zu diesen Formaten finden Sie im Abschnitt Werte für die bidirektionale Formatierzeichenfolge.

Schritte für diese Task

  1. Schließen Sie alle bidirektionalen Klassen ein, die die Implementierung der bidirektionalen Steuerkomponente enthalten.
    import com.ibm.bidiTools.bdlayout.*;
  2. Schließen Sie alle Klassen ein, die zum Manipulieren des DataObject erforderlich sind.
    import commonj.sdo.DataObject;
    import commonj.sdo.Type;
    import commonj.sdo.Property;
  3. Definieren Sie Zeichenfolgevariablen, die später die verschiedenen Zeichenfolgentypen des DataObject-Objekts enthalten werden. Dieser Schritt ermöglicht eine Filterung der Attribute des Typs String, während das DataObject rekursiv durchlaufen wird.
    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. Definieren Sie eine Funktion, die prüft, ob ein Merkmal den Typ "String" hat.
    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. Definieren Sie eine rekursive Funktion, die die bidirektionale Transformation auf das gesamte DataObject anwendet.
    Anmerkung: Die Codierlogik beinhaltet die im Folgenden beschriebenen grundsätzlichen Voraussetzungen.
    • Die bidirektionale Transformation wird nur auf Merkmale des Typs String (Zeichenfolge) angewendet.
    • Die Merkmale des Typs String im DataObject werden in einem einheitlichen bidirektionalen Format gespeichert.
    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. Alle Merkmale, die keine Zeichenfolgen sind, werden übersprungen.
             if (!isStringFamilyType(property)) 
                   continue; 
      
             if (property.isContainment()) { 
                  if (property.isMany()) { 
                        List childsList = boIn.getList(property);
    2. Rufen Sie die Transformation rekursiv für die untergeordneten Objekte auf.
       
                        for (int childNumber = 0; childNumber < childsList.size(); 
      		   childNumber++){                   BiDiDataObjTransformationBO(connectionContext, 
      											 ((DataObject)childsList.get(childNumber)),formatIn, formatOut); 
                    } 
                } else { 
    3. Rufen Sie die Transformation rekursiv für die untergeordneten Objekte aller enthaltenen Business-Objekte auf.
                    BiDiDataObjTransformationBO(connectionContext, 
      			            ((DataObject)boIn.get(property)),formatIn, formatOut); 
               } 
           } else {
    4. Wandeln Sie die einfachen Zeichenfolgenattribute um.
               String str = BiDiStringTransformation(
                   (boIn.getString(propertyName),formatIn, formatOut); 
               boIn.setString(propertyName, str); 
           } 
         } 
         return boIn; 
      }
Zugehörige Konzepte

(c) Copyright IBM Corporation 2005, 2006.
Dieses Information Center basiert auf Eclipse-Technologie. (http://www.eclipse.org)