DecimalFormat numFormatter = new DecimalFormat("0000000000000000000.000000000000000000", otherSymbols);
FieldAPI fAPI=APILocator.getFieldAPI();
List<Field> fields = new ArrayList<Field>(FieldsCache.getFieldsByStructureInode(con.getStructureInode()));
Structure st=con.getStructure();
for (Field f : fields) {
if (f.getFieldType().equals(Field.FieldType.BINARY.toString())
|| f.getFieldContentlet() != null && f.getFieldContentlet().startsWith("system_field")) {
continue;
}
if(!f.isIndexed()){
continue;
}
try {
if(fAPI.isElementConstant(f)){
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), (f.getValues() == null ? "":f.getValues().toString()));
continue;
}
Object valueObj = con.get(f.getVelocityVarName());
if(valueObj == null){
valueObj = "";
}
if (f.getFieldContentlet().startsWith("section_divider")) {
valueObj = "";
}
if(!UtilMethods.isSet(valueObj)) {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), "");
}
else if(f.getFieldType().equals("time")) {
String timeStr=timeFormat.format(valueObj);
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), timeStr);
}
else if (f.getFieldType().equals("date")) {
try {
String dateString = dateFormat.format(valueObj);
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), dateString);
}
catch(Exception ex) {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(),"");
}
} else if(f.getFieldType().equals("date_time")) {
try {
String datetimeString = datetimeFormat.format(valueObj);
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), datetimeString);
}
catch(Exception ex) {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(),"");
}
} else if (f.getFieldType().equals("category")) {
// moved the logic to loadCategories
} else if (f.getFieldType().equals("checkbox") || f.getFieldType().equals("multi_select")) {
if (f.getFieldContentlet().startsWith("bool")) {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), valueObj.toString());
} else {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), UtilMethods.listToString(valueObj.toString()));
}
} else if (f.getFieldType().equals("key_value")){
boolean fileMetadata=f.getVelocityVarName().equals(FileAssetAPI.META_DATA_FIELD) && st.getStructureType()==Structure.STRUCTURE_TYPE_FILEASSET;
if(!fileMetadata || LicenseUtil.getLevel()>199) {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), (String)valueObj);
Map<String,Object> keyValueMap = KeyValueFieldUtil.JSONValueToHashMap((String)valueObj);
Set<String> allowedFields=null;
if(fileMetadata) {
// http://jira.dotmarketing.net/browse/DOTCMS-7243
List<FieldVariable> fieldVariables=APILocator.getFieldAPI().getFieldVariablesForField(
f.getInode(), APILocator.getUserAPI().getSystemUser(), false);
for(FieldVariable fv : fieldVariables) {
if(fv.getKey().equals("dotIndexPattern")) {
String[] names=fv.getValue().split(",");
allowedFields=new HashSet<String>();
for(String n : names)
allowedFields.add(n.trim().toLowerCase());
}
}
// aditional fields from the configuration file
String configFields=Config.getStringProperty("INDEX_METADATA_FIELDS", "");
if(configFields.trim().length()>0) {
String[] names=configFields.split(",");
if(names.length>0 && allowedFields==null)
allowedFields=new HashSet<String>();
for(String n : names)
allowedFields.add(n.trim().toLowerCase());
}
}
if(keyValueMap!=null && !keyValueMap.isEmpty())
for(String key : keyValueMap.keySet())
if(allowedFields==null || allowedFields.contains(key.toLowerCase()))
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName() + "." + key, (String)keyValueMap.get(key));
}
} else if(f.getFieldType().equals(Field.FieldType.TAG.toString())) {
StringBuilder tagg=new StringBuilder();
for(Tag t : APILocator.getTagAPI().getTagsByInode(con.getInode()))
tagg.append(t.getTagName()).append(' ');
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), tagg.toString());
} else {
if (f.getFieldContentlet().startsWith("bool")) {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), valueObj.toString());
} else if (f.getFieldContentlet().startsWith("float") || f.getFieldContentlet().startsWith("integer")) {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), numFormatter.format(valueObj));
} else {
m.put(st.getVelocityVarName() + "." + f.getVelocityVarName(), valueObj.toString());
}
}
} catch (Exception e) {
Logger.warn(ESMappingAPIImpl.class, "Error indexing field: " + f.getFieldName()
+ " of contentlet: " + con.getInode(), e);