private Map<String, Object> getTemplateModelDump(TemplateModel model) throws TemplateModelException { // One of the more specific cases should have applied. Track whether this actually occurs. log.debug("Found template model of type " + model.getClass().getName()); Map<String, Object> map = new HashMap<String, Object>(); Object unwrappedModel = DeepUnwrap.permissiveUnwrap(model); map.put(Key.TYPE.toString(), unwrappedModel.getClass().getName()); map.put(Key.VALUE.toString(), unwrappedModel.toString()); return map; }
SortedMap<String, Object> getDataModelDump(Environment env) throws TemplateModelException { SortedMap<String, Object> dump = new TreeMap<String, Object>(); TemplateHashModel dataModel = env.getDataModel(); // Need to unwrap in order to iterate through the variables @SuppressWarnings("unchecked") Map<String, Object> unwrappedDataModel = (Map<String, Object>) DeepUnwrap.permissiveUnwrap(dataModel); List<String> varNames = new ArrayList<String>(unwrappedDataModel.keySet()); for (String varName : varNames) { dump.putAll(getTemplateVariableDump(varName, dataModel.get(varName))); } return dump; }
private Map<String, Object> getTemplateModelDump(TemplateHashModelEx model) throws TemplateModelException { Object unwrappedModel = DeepUnwrap.permissiveUnwrap(model); // This seems to be the most reliable way of distinguishing a wrapped map from a wrapped object. // A map may be wrapped as a SimpleHash, and an object may be wrapped as a StringModel, but they could // be wrapped as other types as well. if ( unwrappedModel instanceof Map ) { return getMapDump(model); } // Java objects are wrapped as TemplateHashModelEx-s. return getObjectDump(model, unwrappedModel); }
Map<String, Object> configUrls = (Map<String, Object>) DeepUnwrap.permissiveUnwrap(urlModel); requestUrls.putAll(configUrls);
Object unwrappedModel = DeepUnwrap.permissiveUnwrap(valueToDump);
/** * Find the DataGetters for this template, and apply them to the Freemarker * environment. */ public static void retrieveAndRunDataGetters(Environment env, String templateName) { HttpServletRequest req = (HttpServletRequest) env .getCustomAttribute("request"); VitroRequest vreq = new VitroRequest(req); if (dataGettersAlreadyApplied(env, templateName)) { log.debug("DataGetters for '" + templateName + "' have already been applied"); return; } try { List<DataGetter> dgList = DataGetterUtils .getDataGettersForTemplate(vreq, vreq.getDisplayModel(), templateName); log.debug("Retrieved " + dgList.size() + " data getters for template '" + templateName + "'"); @SuppressWarnings("unchecked") Map<String, Object> dataMap = (Map<String, Object>) DeepUnwrap .permissiveUnwrap(env.getDataModel()); for (DataGetter dg : dgList) { applyDataGetter(dg, env, dataMap); } } catch (Exception e) { log.warn(e, e); } }
Map<String, Object> dm = (Map<String, Object>) DeepUnwrap.permissiveUnwrap(dataModel); User user = (User) dm.get("user"); values.put("user", user);