/******************************************************************************* * Copyright (c) 2007 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.seam.pages.xml.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.pages.xml.SeamPagesXMLPlugin; public class SeamPagesEntityRecognizer implements EntityRecognizer, SeamPagesConstants { static { try { Class<?> c = SeamPagesEntityRecognizer.class; XMLEntityResolver.registerPublicEntity(PUBLIC_ID_12, c, "/meta/pages-1.2.dtd"); //$NON-NLS-1$ } catch (IOException e) { SeamPagesXMLPlugin.getDefault().logError(e); } } public SeamPagesEntityRecognizer() {} 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 name = xml.getRootName(); if(PUBLIC_ID_12.equals(publicId)) { if("page".equals(name)) return ENT_FILE_SEAM_PAGE_12; if("pages".equals(name)) return ENT_FILE_SEAM_PAGES_12; } return null; } else { Parser p = new Parser(body); if(!p.recognized) { return null; } else if(p.isOrg) { return p.isSingle ? ENT_FILE_SEAM_PAGE_23 : ENT_FILE_SEAM_PAGES_23; } else if(p.is20) { return p.isSingle ? ENT_FILE_SEAM_PAGE_20 : ENT_FILE_SEAM_PAGES_20; } else if(p.is21) { return p.isSingle ? ENT_FILE_SEAM_PAGE_21 : ENT_FILE_SEAM_PAGES_21; } else { return p.isSingle ? ENT_FILE_SEAM_PAGE_22 : ENT_FILE_SEAM_PAGES_22; } } } class Parser { boolean recognized = false; boolean isSingle = false; boolean is20 = false; boolean is21 = false; boolean isOrg = false; Parser(String body) { int i = body.indexOf("<page"); //$NON-NLS-1$ if(i < 0) return; int i2 = body.indexOf("<pages"); //$NON-NLS-1$ if(i2 < 0) { isSingle = true; } int j = body.indexOf(">", i); //$NON-NLS-1$ if(j < 0) return; String s = body.substring(i, j); if(s.indexOf("\"http://jboss.org/schema/seam/pages\"") >= 0) { //$NON-NLS-1$ isOrg = true; } else if(s.indexOf("\"http://jboss.com/products/seam/pages\"") < 0) { //$NON-NLS-1$ return; } if(s.indexOf("2.0") >= 0) is20 = true; if(s.indexOf("2.1") >= 0) is21 = true; recognized = true; } } }