Al utilizar información que es un script de un idioma bidireccional,
podría ser necesario transformar el formato de los datos. Este es un ejemplo paso a paso
del código que realiza una transformación en datos de tipo DataObject.
Para
IBM WebSphere Process Server,
versión 6.0.0, si utiliza JDK 1.4.1 para los sistemas operativos
Windows , AIX o Linux, no es necesario que instale estas
clases.
El módulo requiere que la información de tipo
DataObject se transforme de un formato bidireccional a otro.
- Incluya todas las clases bi-di que contienen la implementación del motor bi-di.
import com.ibm.bidiTools.bdlayout.*;
- Incluya todas las clases que necesite para manipular el objeto de tipo DataObject.
import commonj.sdo.DataObject;
import commonj.sdo.Type;
import commonj.sdo.Property;
- Defina variables de tipo serie para que contengan los distintos tipos de serie
que un objeto de tipo DataObject contiene. Este paso facilita el filtrado de los atributos
de tipo String a la vez que recorre recursivamente el
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";
- Defina la función que verifica si el tipo de una propiedad es
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;
}
- Defina la función recursiva que aplica la transformación bi-di
en todo el DataObject.
Nota: A continuación se describen las
suposiciones básicas que se siguen en la lógica del código.
- Se aplica la transformación bi-di en propiedades de tipo String únicamente
- Las propiedades de tipo serie del DataObject se almacenan en un formato bi-di
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();
- Omita todas las propiedades que no sean de tipo String.
if (!isStringFamilyType(property))
continue;
if (property.isContainment()) {
if (property.isMany()) {
List childsList = boIn.getList(property);
- Llame recursivamente a la transformación para gestionar los
objetos hijo.
for (int childNumber = 0; childNumber < childsList.size();
childNumber++){ BiDiDataObjTransformationBO(connectionContext,
((DataObject)childsList.get(childNumber)),formatIn, formatOut);
}
} else {
- Llame recursivamente a la transformación para gestionar los objetos hijo
de los objetos de empresa contenidos.
BiDiDataObjTransformationBO(connectionContext,
((DataObject)boIn.get(property)),formatIn, formatOut);
}
} else {
- Transforme los atributos de tipo string sencillos.
String str = BiDiStringTransformation(
(boIn.getString(propertyName),formatIn, formatOut);
boIn.setString(propertyName, str);
}
}
return boIn;
}