Updates to date time processing

Added null pointer check for date processing
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/C32SectionSwitch.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/C32SectionSwitch.java
index 490b9e9..ad64993 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/C32SectionSwitch.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/C32SectionSwitch.java
@@ -633,9 +633,11 @@
 
 					d = CDAValueUtil.getDate(ivlts.getValue());
 
-					;
-
-					sb.append(CDAValueUtil.DATE_PRETTY.format(d));
+					if (d != null) {
+						sb.append(CDAValueUtil.DATE_PRETTY.format(d));
+					} else {
+						sb.append(ivlts.getValue());
+					}
 				}
 
 			}
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/EncounterUtil.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/EncounterUtil.java
index 713b8ea..74000ca 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/EncounterUtil.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/EncounterUtil.java
@@ -12,8 +12,10 @@
 package org.eclipse.mdht.cda.xml.ui.handlers;
 
 import java.util.Date;
+import java.util.HashMap;
 
 import org.apache.commons.lang.StringUtils;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.mdht.uml.cda.Act;
 import org.eclipse.mdht.uml.cda.Author;
 import org.eclipse.mdht.uml.cda.Encounter;
@@ -32,6 +34,8 @@
  */
 public class EncounterUtil {
 
+	public static HashMap<EObject, MatchEncounterBy> encounterCache = new HashMap<EObject, MatchEncounterBy>();
+
 	/**
 	 *
 	 * @TODO Fix with proper date comparison routines
@@ -101,12 +105,17 @@
 
 	public static MatchEncounterBy matchesEncounter(Encounter encounter, Act act) {
 
+		if (encounterCache.containsKey(act)) {
+			return encounterCache.get(act);
+		}
 		if (act == null) {
+			encounterCache.put(act, MatchEncounterBy.NOMATCH);
 			return MatchEncounterBy.NOMATCH;
 		}
 		for (II ii : act.getIds()) {
 			for (II iii : encounter.getIds()) {
 				if (CDAValueUtil.getKey(ii).equals(CDAValueUtil.getKey(iii))) {
+					encounterCache.put(act, MatchEncounterBy.NOMATCH);
 					return MatchEncounterBy.BYID;
 				}
 			}
@@ -132,15 +141,18 @@
 			for (Author author : act.getAuthors()) {
 				if (author.getTime() != null && !StringUtils.isEmpty(author.getTime().getValue())) {
 					observationTime = CDAValueUtil.getDate(author.getTime().getValue());
+
 					result = MatchEncounterBy.BYAUTHORID;
 				}
 			}
 		}
 
 		if (observationTime != null && isWithinEncounterDateRate(encounter, observationTime)) {
+			encounterCache.put(act, result);
 			return result;
 		}
 
+		encounterCache.put(act, MatchEncounterBy.NOMATCH);
 		return MatchEncounterBy.NOMATCH;
 
 	}
@@ -194,9 +206,14 @@
 	 */
 	public static MatchEncounterBy matchesEncounter(Encounter encounter, Organizer organizer) {
 
+		if (encounterCache.containsKey(organizer)) {
+			return encounterCache.get(organizer);
+		}
+
 		for (II ii : organizer.getIds()) {
 			for (II iii : encounter.getIds()) {
 				if (CDAValueUtil.getKey(ii).equals(CDAValueUtil.getKey(iii))) {
+					encounterCache.put(organizer, MatchEncounterBy.BYID);
 					return MatchEncounterBy.BYID;
 				}
 			}
@@ -228,9 +245,11 @@
 		}
 
 		if (observationTime != null && isWithinEncounterDateRate(encounter, observationTime)) {
+			encounterCache.put(organizer, result);
 			return result;
 		}
 
+		encounterCache.put(organizer, MatchEncounterBy.NOMATCH);
 		return MatchEncounterBy.NOMATCH;
 
 	}
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
index f384cac..916de1c 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
@@ -1560,6 +1560,7 @@
 						}
 
 					}
+					EncounterUtil.encounterCache.clear();
 					clinicalDocument.eResource().unload();
 					currentProcessingTime += stopwatch.elapsed(TimeUnit.MILLISECONDS);
 					/*
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 97f213f..dad2f91 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
@@ -593,8 +593,12 @@
 					d = CDAValueUtil.getDate(ivlts.getLow().getValue());
 
 					;
+					if (d != null) {
+						sb.append(CDAValueUtil.DATE_PRETTY.format(d));
+					} else {
+						sb.append(ivlts.getLow().getValue());
+					}
 
-					sb.append(CDAValueUtil.DATE_PRETTY.format(d));
 				}
 
 			}
@@ -602,10 +606,14 @@
 				if (!StringUtils.isEmpty(ivlts.getHigh().getValue())) {
 
 					d = CDAValueUtil.getDate(ivlts.getHigh().getValue());
-					if (sb.length() > 0) {
-						sb.append(" - ");
+					if (d != null) {
+						if (sb.length() > 0) {
+							sb.append(" - ");
+						}
+						sb.append(CDAValueUtil.DATE_PRETTY.format(d));
+					} else {
+						sb.append(ivlts.getHigh().getValue());
 					}
-					sb.append(CDAValueUtil.DATE_PRETTY.format(d));
 				}
 			}
 		}