package org.openedit.generators.filters;
import org.openedit.data.SearcherManager;
import com.openedit.ModuleManager;
import com.openedit.modules.translations.TranslationSearcher;
import com.openedit.page.Page;
import com.openedit.page.manage.PageManager;
public class XmlTranslationFilter extends TextReaderFilter
{
protected Page page;
protected String locale;
protected ModuleManager fieldModuleManager;
protected PageManager fieldPageManager;
protected SearcherManager fieldSearcherManager;
public SearcherManager getSearcherManager() {
return (SearcherManager) getModuleManager().getBean("searcherManager");
}
public void setSearcherManager(SearcherManager inSearcherManager) {
fieldSearcherManager = inSearcherManager;
}
public ModuleManager getModuleManager() {
return fieldModuleManager;
}
public void setModuleManager(ModuleManager inModuleManager) {
fieldModuleManager = inModuleManager;
}
public PageManager getPageManager() {
return fieldPageManager;
}
public void setPageManager(PageManager inPageManager) {
fieldPageManager = inPageManager;
}
public XmlTranslationFilter(Page inPage, String inParams)
{
super(inPage.getReader(),inPage.getCharacterEncoding());
page = inPage;
int index = inParams.indexOf("&locale=");
locale = inParams.substring(index + "&locale=".length(), inParams.length());
}
public StringBuffer replace(String inLastLine)
{
int bracket = inLastLine.indexOf("[[");
if( bracket == -1)
{
return new StringBuffer(inLastLine);
}
//look for [[ and get the property to replace it with
StringBuffer done = new StringBuffer(inLastLine.length() + 20);
int start = 0;
char[] line = inLastLine.toCharArray();
while( bracket != -1 )
{
int end = inLastLine.indexOf("]]",bracket);
if( end != -1 )
{
String key = inLastLine.substring(bracket + 2,end);
String catalogid = page.getProperty("translationsid");
if(catalogid == null){
catalogid = "translations";
}
TranslationSearcher searcher = (TranslationSearcher) getSearcherManager().getSearcher(catalogid, "translation");
boolean translate = page.isPropertyTrue("auto_translate" + "_" + locale);
String value = (String) searcher.getEntryForLocale(locale, key, translate);
done.append(line,start,bracket - start); //everything up to this point
done.append(value);
start = end + 2;
bracket = inLastLine.indexOf("[[",start);
}
else
{
done.append(line,start,line.length);
start = line.length;
break; //no closing ]]
}
}
if( start < line.length)
{
done.append(line,start,line.length - start);
}
return done;
}
}