/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.model;
import java.io.IOException;
import org.jboss.tools.common.model.loaders.*;
import org.jboss.tools.common.xml.XMLEntityResolver;
import org.jboss.tools.jsf.JSFModelPlugin;
public class JSFEntityRecognizer implements EntityRecognizer, JSFConstants {
static {
try {
Class<?> c = JSFEntityRecognizer.class;
XMLEntityResolver.registerPublicEntity(DOC_PUBLICID, c, "/meta/web-facesconfig_1_0.dtd"); //$NON-NLS-1$
XMLEntityResolver.registerPublicEntity(DOC_PUBLICID_11, c, "/meta/web-facesconfig_1_1.dtd"); //$NON-NLS-1$
} catch (IOException e) {
JSFModelPlugin.getPluginLog().logError(e);
}
}
public JSFEntityRecognizer() {}
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 systemId = xml.getSystemId();
String root = xml.getRootName();
if(!"faces-config".equals(root)) return null; //$NON-NLS-1$
if(DOC_PUBLICID.equals(publicId)) return ENT_FACESCONFIG;
if(DOC_PUBLICID_11.equals(publicId)) return ENT_FACESCONFIG_11;
if(systemId != null && systemId.indexOf("web-facesconfig_1_1.dtd") >= 0) return ENT_FACESCONFIG_11; //$NON-NLS-1$
return null;
}
String versionSuffix = getVersion(body);
if(SUFF_12.equals(versionSuffix)) {
return ENT_FACESCONFIG_12;
}
if(SUFF_20.equals(versionSuffix)) {
return ENT_FACESCONFIG_20;
}
if(SUFF_22.equals(versionSuffix)) {
return ENT_FACESCONFIG_22;
}
return null;
}
private String getVersion(String body) {
int i = body.indexOf("<faces-config"); //$NON-NLS-1$
if(i < 0) return null;
int j = body.indexOf(">", i); //$NON-NLS-1$
if(j < 0) return null;
String s = body.substring(i, j);
String uriValue = "" + '"' + JAVAEE_URI + '"';
if(s.indexOf(uriValue) >= 0) {
if(s.indexOf("version=\"1.2\"") > 0) return SUFF_12; //$NON-NLS-1$
if(s.indexOf("version=\"2.0\"") > 0) return SUFF_20; //$NON-NLS-1$
if(s.indexOf("version=\"2.1\"") > 0) return SUFF_20; //$NON-NLS-1$ //TODO SUFF_21
}
uriValue = "" + '"' + JAVAEE22_URI + '"';
if(s.indexOf(uriValue) >= 0) {
if(s.indexOf("version=\"2.2\"") > 0) return SUFF_22; //$NON-NLS-1$
}
return null;
}
}