NIHVIVO-1564 Continue work on object dump
This commit is contained in:
parent
bb118dc340
commit
75377ae10e
2 changed files with 137 additions and 66 deletions
|
@ -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.
|
// Don't return null if model == null. We still want to send the map to the template.
|
||||||
if (model != null) {
|
if (model != null) {
|
||||||
// Do TemplateHashModel cases first, because models of some Java objects are
|
// NumberModel is both TemplateNumberModel and TemplateHashModelEx. Similarly for
|
||||||
// StringModels, and so are both TemplateScalarModels and TemplateHashModelExs.
|
// BooleanModel, DateModel, etc. These are the types used for property values obtained
|
||||||
if (model instanceof TemplateHashModelEx) {
|
// via getObjectData(). So the TemplateHashModelEx case has to follow TemplateNumberModel,
|
||||||
map.putAll( getTemplateModelData( ( TemplateHashModelEx)model ) );
|
// etc.
|
||||||
|
if (model instanceof TemplateScalarModel) {
|
||||||
} else if (model instanceof TemplateHashModel) {
|
if (! (model instanceof TemplateHashModelEx)) {
|
||||||
map.putAll( getTemplateModelData( ( TemplateHashModel)model ) );
|
map.putAll( getTemplateModelData( (TemplateScalarModel)model ) );
|
||||||
|
} else {
|
||||||
} else if (model instanceof TemplateScalarModel) {
|
Object unwrappedModel = DeepUnwrap.permissiveUnwrap(model);
|
||||||
map.putAll( getTemplateModelData( (TemplateScalarModel)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) {
|
} else if (model instanceof TemplateBooleanModel) {
|
||||||
map.putAll( getTemplateModelData( (TemplateBooleanModel)model ) );
|
map.putAll( getTemplateModelData( (TemplateBooleanModel)model ) );
|
||||||
|
@ -162,16 +169,24 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel {
|
||||||
|
|
||||||
} else if (model instanceof TemplateCollectionModel) {
|
} else if (model instanceof TemplateCollectionModel) {
|
||||||
map.putAll( getTemplateModelData( ( TemplateCollectionModel)model ) );
|
map.putAll( getTemplateModelData( ( TemplateCollectionModel)model ) );
|
||||||
|
|
||||||
// Nodes and transforms not included here
|
} 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 {
|
} else {
|
||||||
map.putAll( getTemplateModelData( (TemplateModel)model ) );
|
map.putAll( getTemplateModelData( (TemplateModel)model ) );
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
map.put(Key.VALUE.toString(), "null");
|
||||||
}
|
}
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, Object> getTemplateModelData(TemplateScalarModel model) throws TemplateModelException {
|
private Map<String, Object> getTemplateModelData(TemplateScalarModel model) throws TemplateModelException {
|
||||||
Map<String, Object> map = new HashMap<String, Object>();
|
Map<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
|
@ -12,7 +12,6 @@ import java.sql.Time;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
@ -139,6 +138,25 @@ public class DumpDirectiveTest {
|
||||||
test(varName, dataModel, expectedDump);
|
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
|
@Test
|
||||||
public void dumpDateTime() {
|
public void dumpDateTime() {
|
||||||
|
|
||||||
|
@ -652,27 +670,19 @@ public class DumpDirectiveTest {
|
||||||
expectedDump.put(Key.NAME.toString(), varName);
|
expectedDump.put(Key.NAME.toString(), varName);
|
||||||
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
|
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
|
||||||
|
|
||||||
SortedMap<String, Object> properties = new TreeMap<String, Object>();
|
SortedMap<String, Object> propertiesExpectedDump = getPropertiesExpectedDump();
|
||||||
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);
|
expectedDump.put(Key.VALUE.toString(), propertiesExpectedDump);
|
||||||
|
|
||||||
//Map<String, Object> dump = getDump(varName, dataModel);
|
Map<String, Object> dump = getDump(varName, dataModel);
|
||||||
//assertEquals(expectedDump, dump);
|
assertEquals(expectedDump, dump);
|
||||||
|
|
||||||
// Test the sorting of the methods
|
// Test the sorting of the methods
|
||||||
// List<String> expectedKeys = new ArrayList<String>(properties.keySet());
|
List<String> expectedKeys = new ArrayList<String>(propertiesExpectedDump.keySet());
|
||||||
// @SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
// Map<String, Object> methodsActualDump = (Map<String, Object>) dump.get(Key.VALUE.toString());
|
Map<String, Object> methodsActualDump = (Map<String, Object>) dump.get(Key.VALUE.toString());
|
||||||
// List<String> actualKeys = new ArrayList<String>(methodsActualDump.keySet());
|
List<String> actualKeys = new ArrayList<String>(methodsActualDump.keySet());
|
||||||
//assertEquals(expectedKeys, actualKeys);
|
assertEquals(expectedKeys, actualKeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -692,17 +702,9 @@ public class DumpDirectiveTest {
|
||||||
expectedDump.put(Key.NAME.toString(), varName);
|
expectedDump.put(Key.NAME.toString(), varName);
|
||||||
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
|
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
|
||||||
|
|
||||||
SortedMap<String, Object> properties = new TreeMap<String, Object>();
|
SortedMap<String, Object> methodsExpectedDump = getPropertiesExpectedDump();
|
||||||
Calendar c = Calendar.getInstance();
|
// methodsExpectedDump.putAll(...);
|
||||||
c.set(75, Calendar.MAY, 5);
|
expectedDump.put(Key.VALUE.toString(), methodsExpectedDump);
|
||||||
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);
|
|
||||||
|
|
||||||
//Map<String, Object> dump = getDump(varName, dataModel);
|
//Map<String, Object> dump = getDump(varName, dataModel);
|
||||||
//assertEquals(expectedDump, dump);
|
//assertEquals(expectedDump, dump);
|
||||||
|
@ -732,17 +734,9 @@ public class DumpDirectiveTest {
|
||||||
expectedDump.put(Key.NAME.toString(), varName);
|
expectedDump.put(Key.NAME.toString(), varName);
|
||||||
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
|
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
|
||||||
|
|
||||||
SortedMap<String, Object> properties = new TreeMap<String, Object>();
|
SortedMap<String, Object> methodsExpectedDump = getPropertiesExpectedDump();
|
||||||
Calendar c = Calendar.getInstance();
|
// methodsExpectedDump.putAll(...);
|
||||||
c.set(75, Calendar.MAY, 5);
|
expectedDump.put(Key.VALUE.toString(), methodsExpectedDump);
|
||||||
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);
|
|
||||||
|
|
||||||
//Map<String, Object> dump = getDump(varName, dataModel);
|
//Map<String, Object> dump = getDump(varName, dataModel);
|
||||||
//assertEquals(expectedDump, dump);
|
//assertEquals(expectedDump, dump);
|
||||||
|
@ -884,7 +878,9 @@ public class DumpDirectiveTest {
|
||||||
private String lastName;
|
private String lastName;
|
||||||
private String nickname;
|
private String nickname;
|
||||||
private Date birthdate;
|
private Date birthdate;
|
||||||
|
private boolean married;
|
||||||
private int id;
|
private int id;
|
||||||
|
private String middleName;
|
||||||
private Employee supervisor;
|
private Employee supervisor;
|
||||||
private List<Employee> supervisees;
|
private List<Employee> supervisees;
|
||||||
private float salary;
|
private float salary;
|
||||||
|
@ -892,7 +888,9 @@ public class DumpDirectiveTest {
|
||||||
Employee(String firstName, String lastName, Date birthdate, int id) {
|
Employee(String firstName, String lastName, Date birthdate, int id) {
|
||||||
this.firstName = firstName;
|
this.firstName = firstName;
|
||||||
this.lastName = lastName;
|
this.lastName = lastName;
|
||||||
|
this.middleName = null; // test a null value
|
||||||
this.birthdate = birthdate;
|
this.birthdate = birthdate;
|
||||||
|
this.married = true;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.nickname = "";
|
this.nickname = "";
|
||||||
count++;
|
count++;
|
||||||
|
@ -932,18 +930,26 @@ public class DumpDirectiveTest {
|
||||||
public String getName(String which) {
|
public String getName(String which) {
|
||||||
return which == "first" ? firstName : lastName;
|
return which == "first" ? firstName : lastName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getMiddleName() {
|
||||||
|
return middleName;
|
||||||
|
}
|
||||||
|
|
||||||
public String getNickname() {
|
public String getNickname() {
|
||||||
return nickname;
|
return nickname;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getBirthdate() {
|
// public Date getBirthdate() {
|
||||||
return birthdate;
|
// return birthdate;
|
||||||
}
|
// }
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isMarried() {
|
||||||
|
return married;
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public int getFormerId() {
|
public int getFormerId() {
|
||||||
|
@ -964,22 +970,72 @@ public class DumpDirectiveTest {
|
||||||
c.set(75, Calendar.MAY, 5);
|
c.set(75, Calendar.MAY, 5);
|
||||||
Employee jdoe = new Employee("John", "Doe", c.getTime(), 34523);
|
Employee jdoe = new Employee("John", "Doe", c.getTime(), 34523);
|
||||||
|
|
||||||
c.set(65, Calendar.AUGUST, 10);
|
// c.set(65, Calendar.AUGUST, 10);
|
||||||
Employee jsmith = new Employee("Jane", "Smith", c.getTime(), 78234);
|
// Employee jsmith = new Employee("Jane", "Smith", c.getTime(), 78234);
|
||||||
|
//
|
||||||
c.set(80, Calendar.JUNE, 20);
|
// c.set(80, Calendar.JUNE, 20);
|
||||||
Employee mjones = new Employee("Michael", "Jones", c.getTime(), 65432);
|
// Employee mjones = new Employee("Michael", "Jones", c.getTime(), 65432);
|
||||||
|
//
|
||||||
c.set(81, Calendar.NOVEMBER, 30);
|
// c.set(81, Calendar.NOVEMBER, 30);
|
||||||
Employee mturner = new Employee("Mary", "Turner", c.getTime(), 89531);
|
// Employee mturner = new Employee("Mary", "Turner", c.getTime(), 89531);
|
||||||
|
|
||||||
List<Employee> supervisees = new ArrayList<Employee>();
|
List<Employee> supervisees = new ArrayList<Employee>();
|
||||||
supervisees.add(mjones);
|
// supervisees.add(mjones);
|
||||||
supervisees.add(mturner);
|
// supervisees.add(mturner);
|
||||||
//jdoe.setSupervisor(jsmith);
|
//jdoe.setSupervisor(jsmith);
|
||||||
//jdoe.setSupervisees(supervisees);
|
//jdoe.setSupervisees(supervisees);
|
||||||
jdoe.setSalary(65000);
|
jdoe.setSalary(65000);
|
||||||
|
|
||||||
return jdoe;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue