case RTF_ELEMENT_FIELD:
RTFField field = (RTFField) element;
String fieldName = field.getName();
if (fieldName != null) {
int fieldType = field.getType();
RTFContextField rtfField = (RTFContextField) contextFieldsMap
.get(fieldName);
if (rtfField != null) {
// RTF field is into the context
String newFieldName = "";
String fieldNameWithListInfo = rtfField.getListInfo();
boolean fieldIsList = isList(rtfField);
boolean fieldIsImage = isImage(rtfField);
switch (fieldType) {
case RTFField.FIELDTYPE_HYPERLINK:
/*
* HYPERLINK field code RTF example : /* {\field
* {\*\fldinst {\insrsid9655237 HYPERLINK
* "mailto:$developers.Email" } {\insrsid9655237
* {\*\datafield
* 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b320000006d00610069006c0074006f003a00240064006500760065006c006f0070006500720073002e0045006d00610069006c000000 } } }
* {\fldrslt {\cs16\
* ul\cf2\insrsid9655237\charrsid9655237
* mailto:$developers.Email } } }
*/
IRTFFieldTransform hyperlinkTransform = getRTFFieldTransform(
fieldName, fieldType, fieldIsImage);
hyperlinkTransform.transform(field, fieldIsList,
this);
break;
case RTFField.FIELDTYPE_MERGEFIELD:
/*
* MERGEFIELD code RTF example : {\field\flddirty
* {\*\fldinst
* {\b\cf17\lang1036\langfe2057\langnp1036\insrsid331776\charrsid5667574
* MERGEFIELD $personne.Name \\* MERGEFORMAT } }
* {\fldrslt
* {\b\cf17\lang1024\langfe1024\noproof\langnp1036\insrsid331776\charrsid5667574
* \'ab$personne.Name\'bb } } }
*/
IRTFFieldTransform fieldTransform = getRTFFieldTransform(
fieldName, fieldType, fieldIsImage);
fieldTransform.transform(field, fieldIsList, this);
break;
}
// Test if field is list
if (fieldIsList) {
boolean loopIsManagedWithBookmark = false;
// Mergefield is list, it must be placed :
// * between 2 Bookmark (START_LOOP and END_LOOP) or
// * inside Row
int bookmarkSize = startBookmarksList.size();
if (bookmarkSize > 0) {
// MergeField is found and Bookmark was started
// construct #foreach with name of field
RTFBookmark startBookmark = (RTFBookmark) startBookmarksList
.elementAt(bookmarkSize - 1);
startBookmark.replaceElement(getForeach(
fieldName, fieldNameWithListInfo));
startBookmark.setItemNameList(getItemListName(
fieldName, fieldNameWithListInfo));
startBookmarksList.removeElement(startBookmark);
bookmarkStartMap.put(startBookmark.getName(),
startBookmark);
startBookmarksNotEnded.put(startBookmark
.getItemNameList(), startBookmark);
loopIsManagedWithBookmark = true;
} else {
// Tet si if exist A START_LOOP_i which is not
// ended and which have the name list
// waited
String itemListName = getItemListName(
fieldName, fieldNameWithListInfo);
loopIsManagedWithBookmark = (startBookmarksNotEnded
.get(itemListName) != null);
}
if (loopIsManagedWithBookmark) {
// Test if rtfParent is row => to indicate that
// row must not generate #foreach
if (getType(parentElement) == RTF_ELEMENT_ROW) {
RTFRow row = (RTFRow) parentElement;
if (rowMustNotGenerateForeachList == null) {
rowMustNotGenerateForeachList = new ArrayList();
}
rowMustNotGenerateForeachList.add(row);
}
} else {
// Test if rtfParent is row
if (getType(parentElement) == RTF_ELEMENT_ROW) {
RTFRow row = (RTFRow) parentElement;
if (row.getFirstRTFString() == null) {
if (rowMustNotGenerateForeachList == null
|| !rowMustNotGenerateForeachList
.contains(row)) {
row.addFirstRTFString(getForeach(
fieldName,
fieldNameWithListInfo));
row
.addLastRTFString(getMacroEndForEach()); // #end
}
}
}
}
// Add item_ after $
String fieldContent = field
.getRTFContentOfSimpleElement();
if (fieldName.startsWith("$"))
fieldName = fieldName.substring(1);
newFieldName = getObjectValueList(fieldName,
fieldNameWithListInfo, true);
if (newFieldName.startsWith("$"))
newFieldName = newFieldName.substring(1);
fieldContent = StringUtils.sub(fieldContent,
fieldName, newFieldName);
field.replaceElement(fieldContent);
}
} else {
if (fieldType == RTFField.FIELDTYPE_REF) {
String condition = field.getCondition();
if (condition != null) {
// Condition is defined
// Field is REF (IF condition)
// Get Bookmark with name field
RTFBookmark ifBookmark = (RTFBookmark) bookmarkIfMap
.get(fieldName);
if (ifBookmark != null) {
// Bookmark IF exists. Replace this RTF code
// with the condition
// comming from field
condition = getMacroIf(condition);
ifBookmark.replaceElement(condition);
// Remove content of the field
field.replaceElement("");
// Replace BKMEND by ""
RTFBookmark ifBookmarkBKMEND = (RTFBookmark) bookmarkBkmIfMap
.get(fieldName);
ifBookmarkBKMEND.replaceElement("");
}
}
}
}
}
break;
case RTF_ELEMENT_ROW:
RTFRow row = (RTFRow) element;
transform(row, row.getElementList(), contextFieldsMap);
row.flush();
break;
case RTF_ELEMENT_PAGE:
lastPage = (RTFPage) element;
break;
case RTF_ELEMENT_USERPROPERTY:
RTFUserProperty userProperty = (RTFUserProperty) element;
String userPropertyName = userProperty.getName();
if (userPropertyName != null
&& userPropertyName.startsWith("$")) {
RTFContextField rtfUserProperty = (RTFContextField) contextFieldsMap
.get(userPropertyName);
boolean userPropertyIsList = isList(rtfUserProperty);
if (userPropertyIsList) {
String userPropertyNameWithListInfo = rtfUserProperty
.getListInfo();
// User property is list
// Add item_ after $
// Manage \propname
String userPropertyContent = userProperty