package gr.uoa.di.web.utils;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import eu.dnetlib.domain.data.Document;

public class DisplayValueGenerator {
	
	//private final static Logger logger = Logger.getLogger(DisplayValueGenerator.class);
	
	private final static Pattern pattern = Pattern.compile("\\$\\{(\\w*)\\}");
	
	public static String replaceFieldValueExpression(Document document, String expression, 
			String fieldName, String fieldValue) {
		
		if (expression == null) {
			return fieldValue;
		}
		
		Matcher matcher = pattern.matcher(expression);
		
		if (!matcher.find()) {
			return expression;
			
		} else {
			StringBuffer sb = new StringBuffer();
			do {
				String field = matcher.group(0).
					substring(2, matcher.group(0).length() - 1);
				String replacement = "";
				
				if (!field.equals(fieldName)){
					List<String> values = document.getMap()
						.get(field);
			
					for (String s:values) {
						replacement += s + " ";
					}
				} else {
					replacement = fieldValue;
				}
	
				matcher.appendReplacement(sb,  Matcher.quoteReplacement(replacement.trim()));
			
			} while(matcher.find());
			
			matcher.appendTail(sb);

			return sb.toString().trim();
		}
	}

}
