/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2004-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.xml.handlers.xsi;
import java.net.URI;
import java.net.URISyntaxException;
import org.geotools.xml.XSIElementHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* ImportHandler purpose.
*
* <p>
* Represents an 'import' element.
* </p>
*
* @author dzwiers, Refractions Research, Inc. http://www.refractions.net
* @author $Author:$ (last modification)
*
* @source $URL$
* @version $Id$
*/
public class ImportHandler extends XSIElementHandler {
/** 'import' */
public final static String LOCALNAME = "import";
private static int offset = 0;
// private String id;
private URI namespace;
private URI schemaLocation;
private int hashCodeOffset = getOffset();
/*
* helper method for hashCode()
*/
private static int getOffset() {
return offset++;
}
/**
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
return (LOCALNAME.hashCode() * ((schemaLocation == null) ? 1
: schemaLocation
.hashCode())) + hashCodeOffset;
}
/**
* @see org.geotools.xml.XSIElementHandler#getHandler(java.lang.String,
* java.lang.String)
*/
public XSIElementHandler getHandler(String namespaceURI, String localName){
return null;
}
/**
* @see org.geotools.xml.XSIElementHandler#startElement(java.lang.String,
* java.lang.String, org.xml.sax.Attributes)
*/
public void startElement(String namespaceURI, String localName,
Attributes atts) throws SAXException {
String sl = atts.getValue("", "schemaLocation");
if (sl == null) {
sl = atts.getValue(namespaceURI, "schemaLocation");
}
try {
schemaLocation = sl!=null?new URI(sl):null;
} catch (URISyntaxException e) {
logger.warning(e.toString());
throw new SAXException(e);
}
String namespace1 = atts.getValue("", "namespace");
if (namespace1 == null) {
namespace1 = atts.getValue(namespaceURI, "namespace");
}
try {
this.namespace = new URI(namespace1);
} catch (URISyntaxException e) {
logger.warning(e.toString());
throw new SAXException(e);
}
if (namespaceURI.equalsIgnoreCase(namespace1)) {
throw new SAXException(
"You may not import a namespace with the same name as the current namespace");
}
}
/**
* @see org.geotools.xml.XSIElementHandler#getLocalName()
*/
public String getLocalName() {
return LOCALNAME;
}
/**
* <p>
* gets the namespace attribute
* </p>
*
*/
public URI getNamespace() {
return namespace;
}
/**
* <p>
* gets the schemaLocation attribute
* </p>
*
*/
public URI getSchemaLocation() {
return schemaLocation;
}
/**
* @see org.geotools.xml.XSIElementHandler#getHandlerType()
*/
public int getHandlerType() {
return DEFAULT;
}
/**
* @see org.geotools.xml.XSIElementHandler#endElement(java.lang.String,
* java.lang.String)
*/
public void endElement(String namespaceURI, String localName){
// do nothing
}
}