NIHVIVO-1564 Continue work on object dump

This commit is contained in:
ryounes 2011-04-18 17:29:25 +00:00
parent bb118dc340
commit 75377ae10e
2 changed files with 137 additions and 66 deletions

View file

@ -137,16 +137,23 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel {
// Don't return null if model == null. We still want to send the map to the template.
if (model != null) {
// Do TemplateHashModel cases first, because models of some Java objects are
// StringModels, and so are both TemplateScalarModels and TemplateHashModelExs.
if (model instanceof TemplateHashModelEx) {
map.putAll( getTemplateModelData( ( TemplateHashModelEx)model ) );
} else if (model instanceof TemplateHashModel) {
map.putAll( getTemplateModelData( ( TemplateHashModel)model ) );
} else if (model instanceof TemplateScalarModel) {
// NumberModel is both TemplateNumberModel and TemplateHashModelEx. Similarly for
// BooleanModel, DateModel, etc. These are the types used for property values obtained
// via getObjectData(). So the TemplateHashModelEx case has to follow TemplateNumberModel,
// etc.
if (model instanceof TemplateScalarModel) {
if (! (model instanceof TemplateHashModelEx)) {
map.putAll( getTemplateModelData( (TemplateScalarModel)model ) );
} else {
Object unwrappedModel = DeepUnwrap.permissiveUnwrap(model);
// StringModel can wrap either a String or a complex Java object. We have to
// unwrap the model to find out which it is.
if (unwrappedModel instanceof String) {
map.putAll( getTemplateModelData( (TemplateScalarModel)model ) );
} else {
map.putAll( getTemplateModelData( ( TemplateHashModelEx)model ) );
}
}
} else if (model instanceof TemplateBooleanModel) {
map.putAll( getTemplateModelData( (TemplateBooleanModel)model ) );
@ -163,11 +170,19 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel {
} else if (model instanceof TemplateCollectionModel) {
map.putAll( getTemplateModelData( ( TemplateCollectionModel)model ) );
} else if (model instanceof TemplateHashModelEx) {
map.putAll( getTemplateModelData( ( TemplateHashModelEx)model ) );
} else if (model instanceof TemplateHashModel) {
map.putAll( getTemplateModelData( ( TemplateHashModel)model ) );
// Nodes and transforms not included here
} else {
map.putAll( getTemplateModelData( (TemplateModel)model ) );
}
} else {
map.put(Key.VALUE.toString(), "null");
}
return map;

View file

@ -12,7 +12,6 @@ import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@ -139,6 +138,25 @@ public class DumpDirectiveTest {
test(varName, dataModel, expectedDump);
}
@Test
public void dumpCalendarDate() {
String varName = "myDate";
Map<String, Object> dataModel = new HashMap<String, Object>();
Calendar c = Calendar.getInstance();
c.set(91, Calendar.MAY, 5);
Date myDate = c.getTime();
dataModel.put("myDate", myDate);
Map<String, Object> expectedDump = new HashMap<String, Object>();
expectedDump.put(Key.NAME.toString(), varName);
expectedDump.put(Key.TYPE.toString(), Type.DATE);
expectedDump.put(Key.DATE_TYPE.toString(), DateType.UNKNOWN);
expectedDump.put(Key.VALUE.toString(), myDate);
test(varName, dataModel, expectedDump);
}
@Test
public void dumpDateTime() {
@ -652,27 +670,19 @@ public class DumpDirectiveTest {
expectedDump.put(Key.NAME.toString(), varName);
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
SortedMap<String, Object> properties = new TreeMap<String, Object>();
Calendar c = Calendar.getInstance();
c.set(75, Calendar.MAY, 5);
properties.put("birthdate", c.getTime());
properties.put("fullName", "John Doe");
properties.put("id", 34523);
properties.put("nickname", "");
properties.put("supervisees", "");
properties.put("supervisor", "");
SortedMap<String, Object> propertiesExpectedDump = getPropertiesExpectedDump();
expectedDump.put(Key.VALUE.toString(), properties);
expectedDump.put(Key.VALUE.toString(), propertiesExpectedDump);
//Map<String, Object> dump = getDump(varName, dataModel);
//assertEquals(expectedDump, dump);
Map<String, Object> dump = getDump(varName, dataModel);
assertEquals(expectedDump, dump);
// Test the sorting of the methods
// List<String> expectedKeys = new ArrayList<String>(properties.keySet());
// @SuppressWarnings("unchecked")
// Map<String, Object> methodsActualDump = (Map<String, Object>) dump.get(Key.VALUE.toString());
// List<String> actualKeys = new ArrayList<String>(methodsActualDump.keySet());
//assertEquals(expectedKeys, actualKeys);
List<String> expectedKeys = new ArrayList<String>(propertiesExpectedDump.keySet());
@SuppressWarnings("unchecked")
Map<String, Object> methodsActualDump = (Map<String, Object>) dump.get(Key.VALUE.toString());
List<String> actualKeys = new ArrayList<String>(methodsActualDump.keySet());
assertEquals(expectedKeys, actualKeys);
}
@Test
@ -692,17 +702,9 @@ public class DumpDirectiveTest {
expectedDump.put(Key.NAME.toString(), varName);
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
SortedMap<String, Object> properties = new TreeMap<String, Object>();
Calendar c = Calendar.getInstance();
c.set(75, Calendar.MAY, 5);
properties.put("birthdate", c.getTime());
properties.put("fullName", "John Doe");
properties.put("id", 34523);
properties.put("nickname", "");
properties.put("supervisees", "");
properties.put("supervisor", "");
expectedDump.put(Key.VALUE.toString(), properties);
SortedMap<String, Object> methodsExpectedDump = getPropertiesExpectedDump();
// methodsExpectedDump.putAll(...);
expectedDump.put(Key.VALUE.toString(), methodsExpectedDump);
//Map<String, Object> dump = getDump(varName, dataModel);
//assertEquals(expectedDump, dump);
@ -732,17 +734,9 @@ public class DumpDirectiveTest {
expectedDump.put(Key.NAME.toString(), varName);
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
SortedMap<String, Object> properties = new TreeMap<String, Object>();
Calendar c = Calendar.getInstance();
c.set(75, Calendar.MAY, 5);
properties.put("birthdate", c.getTime());
properties.put("fullName", "John Doe");
properties.put("id", 34523);
properties.put("nickname", "");
properties.put("supervisees", "");
properties.put("supervisor", "");
expectedDump.put(Key.VALUE.toString(), properties);
SortedMap<String, Object> methodsExpectedDump = getPropertiesExpectedDump();
// methodsExpectedDump.putAll(...);
expectedDump.put(Key.VALUE.toString(), methodsExpectedDump);
//Map<String, Object> dump = getDump(varName, dataModel);
//assertEquals(expectedDump, dump);
@ -884,7 +878,9 @@ public class DumpDirectiveTest {
private String lastName;
private String nickname;
private Date birthdate;
private boolean married;
private int id;
private String middleName;
private Employee supervisor;
private List<Employee> supervisees;
private float salary;
@ -892,7 +888,9 @@ public class DumpDirectiveTest {
Employee(String firstName, String lastName, Date birthdate, int id) {
this.firstName = firstName;
this.lastName = lastName;
this.middleName = null; // test a null value
this.birthdate = birthdate;
this.married = true;
this.id = id;
this.nickname = "";
count++;
@ -933,18 +931,26 @@ public class DumpDirectiveTest {
return which == "first" ? firstName : lastName;
}
public String getMiddleName() {
return middleName;
}
public String getNickname() {
return nickname;
}
public Date getBirthdate() {
return birthdate;
}
// public Date getBirthdate() {
// return birthdate;
// }
public int getId() {
return id;
}
public boolean isMarried() {
return married;
}
@Deprecated
public int getFormerId() {
return id % 10000;
@ -964,22 +970,72 @@ public class DumpDirectiveTest {
c.set(75, Calendar.MAY, 5);
Employee jdoe = new Employee("John", "Doe", c.getTime(), 34523);
c.set(65, Calendar.AUGUST, 10);
Employee jsmith = new Employee("Jane", "Smith", c.getTime(), 78234);
c.set(80, Calendar.JUNE, 20);
Employee mjones = new Employee("Michael", "Jones", c.getTime(), 65432);
c.set(81, Calendar.NOVEMBER, 30);
Employee mturner = new Employee("Mary", "Turner", c.getTime(), 89531);
// c.set(65, Calendar.AUGUST, 10);
// Employee jsmith = new Employee("Jane", "Smith", c.getTime(), 78234);
//
// c.set(80, Calendar.JUNE, 20);
// Employee mjones = new Employee("Michael", "Jones", c.getTime(), 65432);
//
// c.set(81, Calendar.NOVEMBER, 30);
// Employee mturner = new Employee("Mary", "Turner", c.getTime(), 89531);
List<Employee> supervisees = new ArrayList<Employee>();
supervisees.add(mjones);
supervisees.add(mturner);
// supervisees.add(mjones);
// supervisees.add(mturner);
//jdoe.setSupervisor(jsmith);
//jdoe.setSupervisees(supervisees);
jdoe.setSalary(65000);
return jdoe;
}
private SortedMap<String, Object> getPropertiesExpectedDump() {
SortedMap<String, Object> propertiesExpectedDump = new TreeMap<String, Object>();
Map<String, Object> birthdateExpectedDump = new HashMap<String, Object>();
birthdateExpectedDump.put(Key.TYPE.toString(), Type.DATE);
birthdateExpectedDump.put(Key.DATE_TYPE.toString(), DateType.UNKNOWN);
Calendar c = Calendar.getInstance();
c.set(75, Calendar.MAY, 5);
birthdateExpectedDump.put(Key.VALUE.toString(), c.getTime());
//propertiesExpectedDump.put("birthdate", birthdateExpectedDump);
Map<String, Object> fullNameExpectedDump = new HashMap<String, Object>();
fullNameExpectedDump.put(Key.TYPE.toString(), Type.STRING);
fullNameExpectedDump.put(Key.VALUE.toString(), "John Doe");
propertiesExpectedDump.put("fullName", fullNameExpectedDump);
Map<String, Object> idExpectedDump = new HashMap<String, Object>();
idExpectedDump.put(Key.TYPE.toString(), Type.NUMBER);
idExpectedDump.put(Key.VALUE.toString(), 34523);
propertiesExpectedDump.put("id", idExpectedDump);
Map<String, Object> nicknameExpectedDump = new HashMap<String, Object>();
nicknameExpectedDump.put(Key.TYPE.toString(), Type.STRING);
nicknameExpectedDump.put(Key.VALUE.toString(), "");
propertiesExpectedDump.put("nickname", nicknameExpectedDump);
Map<String, Object> middleNameExpectedDump = new HashMap<String, Object>();
middleNameExpectedDump.put(Key.VALUE.toString(), "null");
propertiesExpectedDump.put("middleName", middleNameExpectedDump);
Map<String, Object> marriedExpectedDump = new HashMap<String, Object>();
marriedExpectedDump.put(Key.TYPE.toString(), Type.BOOLEAN);
marriedExpectedDump.put(Key.VALUE.toString(), true);
propertiesExpectedDump.put("married", marriedExpectedDump);
Map<String, Object> superviseesExpectedDump = new HashMap<String, Object>();
//superviseesExpectedDump.put(Key.TYPE.toString(), Type.SEQUENCE);
superviseesExpectedDump.put(Key.VALUE.toString(), "null");
propertiesExpectedDump.put("supervisees", superviseesExpectedDump);
Map<String, Object> supervisorExpectedDump = new HashMap<String, Object>();
//supervisorExpectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
supervisorExpectedDump.put(Key.VALUE.toString(), "null");
propertiesExpectedDump.put("supervisor", supervisorExpectedDump);
return propertiesExpectedDump;
}
}