package br.gov.frameworkdemoiselle.behave.internal.dataprovider.xml; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; import java.util.Set; import br.gov.frameworkdemoiselle.behave.config.BehaveConfig; import br.gov.frameworkdemoiselle.behave.dataprovider.XmlLoader; import br.gov.frameworkdemoiselle.behave.exception.BehaveException; import br.gov.frameworkdemoiselle.behave.message.BehaveMessage; import com.thoughtworks.xstream.XStream; /** * * @author SERPRO * */ public class XStreamXmlLoader implements XmlLoader { private static BehaveMessage bm = new BehaveMessage(BehaveConfig.MESSAGEBUNDLE); protected XStream xstream = null; public XStreamXmlLoader(){ xstream = new XStream(); } @SuppressWarnings("rawtypes") public Object importXmlResourceAsObject(String xmlResourceName, Map<String, Class> aliasesMap, Map<String, Class> attributesMap){ defineAliases(aliasesMap); defineAttributes(attributesMap); return importResourceXml(xmlResourceName); } @SuppressWarnings("rawtypes") private void defineAttributes(Map<String, Class> attributesMap) { if(attributesMap!=null){ Set<String> attributesSet = attributesMap.keySet(); for (String attribute : attributesSet) { xstream.useAttributeFor(attribute, attributesMap.get(attribute)); } } } @SuppressWarnings("rawtypes") private void defineAliases(Map<String, Class> aliasesMap) { if(aliasesMap!=null){ Set<String> aliasesSet = aliasesMap.keySet(); for (String alias : aliasesSet) { xstream.alias(alias, aliasesMap.get(alias)); } } } private Object importResourceXml(String resourceName){ String xml = loadRecource(resourceName); if(!xml.trim().equals("")){ return xstream.fromXML(xml); } return null; } private static String loadRecource(String resourceName){ StringBuilder stringBuilder = new StringBuilder(); try{ InputStream inputStream = XStreamXmlLoader.class.getResourceAsStream(resourceName); try { String line = ""; BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line).append("\n"); } } catch (Exception f){ throw new BehaveException(bm.getString("exception-resource-not-found", resourceName)); } finally { inputStream.close(); } }catch (Exception e) { throw new BehaveException(bm.getString("exception-resource-not-found", resourceName)); } return stringBuilder.toString(); } }