Updates to serializiation

expadend translation
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/ProcessSectionSwitch.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/ProcessSectionSwitch.java
index 470d0f8..01e6abe 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/ProcessSectionSwitch.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/ProcessSectionSwitch.java
@@ -143,7 +143,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, true, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
@@ -167,7 +167,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, true, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
@@ -191,7 +191,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, false, false);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, false, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
@@ -240,7 +240,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, false, false);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, true, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
@@ -264,7 +264,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, true, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
@@ -311,7 +311,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, true, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
@@ -358,7 +358,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, true, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
@@ -485,7 +485,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, true, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
@@ -660,7 +660,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, this.documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, true, false, false);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), file.getName());
 		}
 
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SectionSwitch.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SectionSwitch.java
index e7af201..5d3a48d 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SectionSwitch.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SectionSwitch.java
@@ -1036,7 +1036,7 @@
 
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, sa, encounters);
 
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, sa, false, true);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, sa, false, true, true);
 
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, sa.getSection(), fileName);
 
@@ -1076,7 +1076,7 @@
 				int offset = SpreadsheetSerializer.serializePatient(row, 0, documentMetadata, patientRole);
 				offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
 				offset = SpreadsheetSerializer.serializeOrganizer(row, offset, organizer, false, true);
-				offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+				offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, false, false, true);
 				SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), fileName);
 			}
 
@@ -1091,7 +1091,7 @@
 			Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
 			int offset = SpreadsheetSerializer.serializePatient(row, 0, documentMetadata, patientRole);
 			offset = SpreadsheetSerializer.serializeEnounterID(row, offset, observation, encounters);
-			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation);
+			offset = SpreadsheetSerializer.serializeObservation(row, offset, observation, false, false, true);
 			SpreadsheetSerializer.serializeSectionAndFileName(row, offset, observation.getSection(), fileName);
 		}
 	}
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SheetHeaderUtil.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SheetHeaderUtil.java
index 0497537..0f4adf9 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SheetHeaderUtil.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SheetHeaderUtil.java
@@ -225,8 +225,18 @@
 		row2.createCell(offset++).setCellValue(replaceSpace("Date"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
-		offset = addCodeHeader(row2, offset, "Panel");
-		offset = addCodeHeader(row2, offset, "Specimen");
+		if (GenerateCDADataHandler.exportCDTranslations) {
+			offset = addExtendedCodeHeader(row2, offset, "Panel");
+		} else {
+			offset = addCodeHeader(row2, offset, "Panel");
+		}
+
+		if (GenerateCDADataHandler.exportCDTranslations) {
+			offset = addExtendedCodeHeader(row2, offset, "Specimen");
+		} else {
+			offset = addCodeHeader(row2, offset, "Specimen");
+		}
+
 		row2.createCell(offset++).setCellValue(replaceSpace("Organization"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Author"));
 		row2.createCell(offset++).setCellValue(replaceSpace("ID"));
@@ -236,7 +246,11 @@
 		row2.createCell(offset++).setCellValue(replaceSpace("Status"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
-		offset = addCodeHeader(row2, offset, "Test");
+		if (GenerateCDADataHandler.exportCDTranslations) {
+			offset = addExtendedCodeHeader(row2, offset, "Test");
+		} else {
+			offset = addCodeHeader(row2, offset, "Test");
+		}
 		row2.createCell(offset++).setCellValue(replaceSpace("Result"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
@@ -265,7 +279,13 @@
 		row2.createCell(offset++).setCellValue(replaceSpace("Date"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
-		offset = addCodeHeader(row2, offset, "Observation");
+
+		if (GenerateCDADataHandler.exportCDTranslations) {
+			offset = addExtendedCodeHeader(row2, offset, "Observation");
+		} else {
+			offset = addCodeHeader(row2, offset, "Observation");
+		}
+
 		row2.createCell(offset++).setCellValue(replaceSpace("Value"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
@@ -474,7 +494,11 @@
 		row2.createCell(offset++).setCellValue(replaceSpace("Date"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
-		offset = addCodeHeader(row2, offset, "Panel");
+		if (GenerateCDADataHandler.exportCDTranslations) {
+			offset = addExtendedCodeHeader(row2, offset, "Panel");
+		} else {
+			offset = addCodeHeader(row2, offset, "Panel");
+		}
 		row2.createCell(offset++).setCellValue(replaceSpace("Organization"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Author"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Vital Sign ID"));
@@ -485,7 +509,12 @@
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
 
-		offset = addCodeHeader(row2, offset, "Vital Sign");
+		if (GenerateCDADataHandler.exportCDTranslations) {
+			offset = addExtendedCodeHeader(row2, offset, "Vital Sign");
+		} else {
+			offset = addCodeHeader(row2, offset, "Vital Sign");
+		}
+
 		row2.createCell(offset++).setCellValue(replaceSpace("Result"));
 		row2.createCell(offset++).setCellValue(replaceSpace("Location"));
 		row2.getSheet().setColumnHidden(offset - 1, hideColumns);
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SpreadsheetSerializer.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SpreadsheetSerializer.java
index 372abd8..576cadd 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SpreadsheetSerializer.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/SpreadsheetSerializer.java
@@ -1031,7 +1031,7 @@
 				offset = serializePatient(row, offset, organizationAndSoftware, patientRole);
 				offset = SpreadsheetSerializer.serializeEnounterID(row, offset, sa, encounters);
 				offset = serializeOrganizer(row, offset, sa, true, false);
-				offset = serializeObservation(row, offset, resultObservation);
+				offset = serializeObservation(row, offset, resultObservation, true, false, true);
 				offset = serializeSectionAndFileName(
 					row, offset, sa.getSection(), organizationAndSoftware.completePath);
 				offset = appendValidation(row, offset, sa);
@@ -1080,7 +1080,7 @@
 				int offset = serializePatient(row, 0, organizationAndSoftware, patientRole);
 				offset = SpreadsheetSerializer.serializeEnounterID(row, offset, organizer, encounters);
 				offset = serializeOrganizer(row, offset, organizer, false, false);
-				offset = serializeObservation(row, offset, observation);
+				offset = serializeObservation(row, offset, observation, true, false, true);
 				serializeSectionAndFileName(
 					row, offset, observation.getSection(), organizationAndSoftware.completePath);
 				offset = appendValidation(row, offset, observation);
@@ -1318,9 +1318,9 @@
 		return offset++;
 	}
 
-	static int serializeObservation(Row row, int offset, Observation resultObservation) {
-		return serializeObservation(row, offset, resultObservation, true, false);
-	}
+	// static int serializeObservation(Row row, int offset, Observation resultObservation) {
+	// return serializeObservation(row, offset, resultObservation, true, false, false);
+	// }
 
 	/**
 	 * @param row
@@ -1329,7 +1329,7 @@
 	 * @return
 	 */
 	static int serializeObservation(Row row, int offset, Observation observation, boolean referenceRange,
-			boolean author) {
+			boolean author, boolean exportTranslation) {
 
 		Cell cell = row.createCell(offset++);
 
@@ -1397,8 +1397,13 @@
 			}
 		}
 
-		offset = SpreadsheetSerializer.appendCodeShowNullFlavor(
-			row, offset, observation.getSection(), observation.getCode(), observation.getText());
+		if (exportTranslation) {
+			offset = SpreadsheetSerializer.appendExtendedCode(
+				row, offset, observation.getSection(), observation.getCode(), observation.getText(), false);
+		} else {
+			offset = SpreadsheetSerializer.appendCodeShowNullFlavor(
+				row, offset, observation.getSection(), observation.getCode(), observation.getText());
+		}
 
 		String value = "";
 		String valueLocation = "";
@@ -1501,25 +1506,39 @@
 		cell.setCellValue(sb.toString());
 		row.createCell(offset++).setCellValue(CDAUtil.getDomainPath(ivlts));
 
-		offset = SpreadsheetSerializer.appendCode(
-			row, offset, resultOrganizer.getSection(), resultOrganizer.getCode(), null);
+		if (GenerateCDADataHandler.exportCDTranslations) {
+			offset = SpreadsheetSerializer.appendExtendedCode(
+				row, offset, resultOrganizer.getSection(), resultOrganizer.getCode(), null, true);
+		} else {
+			offset = SpreadsheetSerializer.appendCode(
+				row, offset, resultOrganizer.getSection(), resultOrganizer.getCode(), null);
+		}
 
 		if (serializeSubject) {
 
 			if (resultOrganizer.getSubject() != null && resultOrganizer.getSubject().getRelatedSubject() != null) {
-				offset = SpreadsheetSerializer.appendCode(
-					row, offset, resultOrganizer.getSection(),
-					resultOrganizer.getSubject().getRelatedSubject().getCode(), null);
-			} else {
-				offset = SpreadsheetSerializer.appendCode(row, offset, resultOrganizer.getSection(), null, null);
-			}
-			// resultOrganizer.getSubject().get
 
+				if (GenerateCDADataHandler.exportCDTranslations) {
+					offset = SpreadsheetSerializer.appendExtendedCode(
+						row, offset, resultOrganizer.getSection(),
+						resultOrganizer.getSubject().getRelatedSubject().getCode(), null, false);
+				} else {
+					offset = SpreadsheetSerializer.appendCode(
+						row, offset, resultOrganizer.getSection(),
+						resultOrganizer.getSubject().getRelatedSubject().getCode(), null);
+				}
+
+			} else {
+
+				if (GenerateCDADataHandler.exportCDTranslations) {
+					offset = SpreadsheetSerializer.appendExtendedCode(
+						row, offset, resultOrganizer.getSection(), null, null, false);
+				} else {
+					offset = SpreadsheetSerializer.appendCode(row, offset, resultOrganizer.getSection(), null, null);
+				}
+
+			}
 		}
-		// row.createCell(offset++).setCellValue(
-		// getValueAsString(resultOrganizer.getSection(), resultOrganizer.getCode()));
-		// place holder encounter description
-		// row.createCell(offset++).setCellValue(getValue(resultOrganizer.getSection(), ));
 
 		if (serializeSpecimen) {
 			CD specimenCode = null;
@@ -1528,13 +1547,18 @@
 				if (specimen.getSpecimenRole() != null &&
 						specimen.getSpecimenRole().getSpecimenPlayingEntity() != null) {
 					specimenCode = specimen.getSpecimenRole().getSpecimenPlayingEntity().getCode();
-
 					break;
 				}
-
 			}
 
-			offset = SpreadsheetSerializer.appendCode(row, offset, resultOrganizer.getSection(), specimenCode, null);
+			if (GenerateCDADataHandler.exportCDTranslations) {
+				offset = SpreadsheetSerializer.appendExtendedCode(
+					row, offset, resultOrganizer.getSection(), specimenCode, null, false);
+			} else {
+				offset = SpreadsheetSerializer.appendCode(
+					row, offset, resultOrganizer.getSection(), specimenCode, null);
+
+			}
 		}
 		offset = SpreadsheetSerializer.appendOrganizationAndAuthor(row, offset, resultOrganizer.getAuthors());
 		return offset;
@@ -2546,8 +2570,38 @@
 		} else {
 			offset = SpreadsheetSerializer.appendCode(row, offset, section, cd, text);
 		}
-		if (cd.getTranslations().size() >= 1) {
-			offset = SpreadsheetSerializer.appendCode(row, offset, section, cd.getTranslations().get(0), null);
+		if (cd != null) {
+
+			if (cd.getTranslations().size() >= 1) {
+				offset = SpreadsheetSerializer.appendCode(row, offset, section, cd.getTranslations().get(0), null);
+			} else {
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+			}
+			if (cd.getTranslations().size() >= 2) {
+				offset = SpreadsheetSerializer.appendCode(row, offset, section, cd.getTranslations().get(1), null);
+			} else {
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+			}
+			if (cd.getTranslations().size() >= 3) {
+				offset = SpreadsheetSerializer.appendCode(row, offset, section, cd.getTranslations().get(2), null);
+			} else {
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+				row.createCell(offset++).setCellValue("");
+			}
 		} else {
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
@@ -2555,20 +2609,12 @@
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
-		}
-		if (cd.getTranslations().size() >= 2) {
-			offset = SpreadsheetSerializer.appendCode(row, offset, section, cd.getTranslations().get(1), null);
-		} else {
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
-		}
-		if (cd.getTranslations().size() >= 3) {
-			offset = SpreadsheetSerializer.appendCode(row, offset, section, cd.getTranslations().get(2), null);
-		} else {
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");
 			row.createCell(offset++).setCellValue("");