package org.agnitas.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.agnitas.beans.AgnDBTagError;
import org.agnitas.beans.DynamicTagContent;
import org.agnitas.beans.ProfileField;
import org.agnitas.beans.impl.AgnDBTagErrorImpl;
import org.agnitas.service.ColumnInfoService;
import org.agnitas.service.MailingContentService;
import org.agnitas.util.CaseInsensitiveMap;
/**
*
* @author ms
* @deprecated Validating tags is handled by TAGCheck now, which wraps the back-end engine
*/
public class MailingContentServiceImpl implements MailingContentService {
private ColumnInfoService columnInfoService;
public List<AgnDBTagError> getInvalidAgnDBTags(String content, int companyID) throws Exception {
List<AgnDBTagError> invalidTags = new ArrayList<AgnDBTagError>();
List<String> agnDBTags = scanForAgnDBTags(content);
List<String> columnNames = extractColumnNames(agnDBTags);
CaseInsensitiveMap<ProfileField> columnInfoMap = columnInfoService.getColumnInfoMap(companyID);
int i=0;
for(String columnName:columnNames) {
if( AGNDBTAG_WRONG_FORMAT.equals(columnName)) {
invalidTags.add(new AgnDBTagErrorImpl(agnDBTags.get(i) , AGNDBTAG_WRONG_FORMAT));
}
else {
if (!columnInfoMap.containsKey(columnName)) {
invalidTags.add(new AgnDBTagErrorImpl(agnDBTags.get(i),AGNDBTAG_UNKNOWN_COLUMN));
}
}
i++;
}
return invalidTags;
}
public List<String> scanForAgnDBTags(String content) {
String agnDBTagPattern = ".*?(\\[agnDB column=\"(.*?)\"\\])";
List<String> agnDBTags = new ArrayList<String>();
Pattern pattern = Pattern.compile(agnDBTagPattern);
Matcher matcher = pattern.matcher(content);
while(matcher.find()) {
agnDBTags.add(matcher.group(1));
}
return agnDBTags;
}
public List<String> extractColumnNames(List<String> agnDBTags ) {
List<String> agnDBTagColumnNames = new ArrayList<String>();
Pattern classNamePattern = Pattern.compile("column=\"(.*?)\"");
for(String agnDBTag:agnDBTags) {
if( !agnDBTag.matches("\\[agnDB column=\"(.*?)\"\\]")){
agnDBTagColumnNames.add(MailingContentService.AGNDBTAG_WRONG_FORMAT);
continue;
} else {
Matcher matcher = classNamePattern.matcher(agnDBTag);
if( matcher.find()) {
agnDBTagColumnNames.add(matcher.group(1));
}
}
}
return agnDBTagColumnNames;
}
public Map<String, List<AgnDBTagError>> getAgnDBTagErrors( Map<String, DynamicTagContent> contentMap, int companyID ) throws Exception {
Map<String,List<AgnDBTagError>> agnDBTagErrors = new HashMap<String, List<AgnDBTagError>>();
for(String contentKey:contentMap.keySet()) {
DynamicTagContent tagContent = contentMap.get(contentKey);
String content = tagContent.getDynContent();
List<AgnDBTagError> tagErrors = getInvalidAgnDBTags(content, companyID);
if( tagErrors.size() > 0) {
agnDBTagErrors.put(contentKey,tagErrors);
}
}
return agnDBTagErrors;
}
public void setColumnInfoService(ColumnInfoService columnInfoService) {
this.columnInfoService = columnInfoService;
}
}