package org.jboss.tools.seam.xml.ds.model; import java.io.IOException; import org.jboss.tools.common.model.loaders.EntityRecognizer; import org.jboss.tools.common.model.loaders.EntityRecognizerContext; import org.jboss.tools.common.model.loaders.XMLRecognizerContext; import org.jboss.tools.common.xml.XMLEntityResolver; import org.jboss.tools.seam.xml.SeamXMLPlugin; public class DSEntityRecognizer implements EntityRecognizer, DSConstants { static { try { Class<?> c = DSEntityRecognizer.class; XMLEntityResolver.registerPublicEntity(PUBLIC_ID_1_5, c, "/meta/jboss-ds_1_5.dtd"); //$NON-NLS-1$ XMLEntityResolver.registerPublicEntity(PUBLIC_ID_5_0, c, "/meta/jboss-ds_5_0.dtd"); //$NON-NLS-1$ } catch (IOException e) { SeamXMLPlugin.log(e); } } public DSEntityRecognizer() {} public String getEntityName(EntityRecognizerContext context) { String body = context.getBody(); if(body == null) return null; XMLRecognizerContext xml = context.getXMLContext(); if(xml.isDTD()) { String publicId = xml.getPublicId(); String root = xml.getRootName(); if(PUBLIC_ID_1_5.equals(publicId)) { if("datasources".equals(root)) return ENT_DATASOURCES_FILE; if("connection-factories".equals(root)) return ENT_CONNECTION_FACTORIES_FILE; } if(PUBLIC_ID_5_0.equals(publicId)) { if("datasources".equals(root)) return ENT_DATASOURCES_FILE_50_DTD; if("connection-factories".equals(root)) return ENT_CONNECTION_FACTORIES_FILE_50_DTD; } } else { if(isDatasourcesSchema(body)) { return ENT_DATASOURCES_FILE_50_XSD; } else if(isConnectionFactoriesSchema(body)) { return ENT_CONNECTION_FACTORIES_FILE_50_XSD; } } return null; } private boolean isDatasourcesSchema(String body) { int i = body.indexOf("<datasources"); //$NON-NLS-1$ if(i < 0) return false; int j = body.indexOf(">", i); //$NON-NLS-1$ if(j < 0) return false; String s = body.substring(i, j); return s.indexOf("http://www.jboss.org/j2ee/schema/jboss-ds_5_0.xsd") > 0; //$NON-NLS-1$ } private boolean isConnectionFactoriesSchema(String body) { int i = body.indexOf("<connection-factories"); //$NON-NLS-1$ if(i < 0) return false; int j = body.indexOf(">", i); //$NON-NLS-1$ if(j < 0) return false; String s = body.substring(i, j); return s.indexOf("http://www.jboss.org/j2ee/schema/jboss-ds_5_0.xsd") > 0; //$NON-NLS-1$ } }