/* Woodstox Lite ("wool") XML processor
*
* Copyright (c) 2006- Tatu Saloranta, tatu.saloranta@iki.fi
*
* Licensed under the License specified in the file LICENSE which is
* included with the source code.
* You may not use this file except in compliance with the License.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.fasterxml.aalto.sax;
import java.util.*;
import org.xml.sax.SAXNotRecognizedException;
Container for utility methods needed by the parser factory, or
parser wrapper components.
/**
* Container for utility methods needed by the parser factory, or
* parser wrapper components.
*/
public final class SAXUtil
{
final static HashMap<String, SAXFeature> sStdFeatures;
static {
SAXFeature[] feats = SAXFeature.values();
sStdFeatures = new HashMap<String, SAXFeature>(feats.length);
for (SAXFeature feat : feats) {
sStdFeatures.put(feat.getSuffix(), feat);
}
}
final static HashMap<String, SAXProperty> sStdProperties;
static {
SAXProperty[] props = SAXProperty.values();
sStdProperties = new HashMap<String, SAXProperty>(props.length);
for (SAXProperty prop : props) {
sStdProperties.put(prop.getSuffix(), prop);
}
}
private SAXUtil() { }
public static SAXFeature findStdFeature(String featURI)
{
if (featURI.startsWith(SAXFeature.STD_FEATURE_PREFIX)) {
String suffix = featURI.substring(SAXFeature.STD_FEATURE_PREFIX.length());
return sStdFeatures.get(suffix);
}
return null;
}
public static SAXProperty findStdProperty(String featURI)
{
if (featURI.startsWith(SAXProperty.STD_PROPERTY_PREFIX)) {
String suffix = featURI.substring(SAXProperty.STD_PROPERTY_PREFIX.length());
return sStdProperties.get(suffix);
}
return null;
}
Convenience method that will return value (True/False) for the
given standard feature, iff it has fixed (immutable) value for
the current implementation. If value is not immutable, returns
null
/**
* Convenience method that will return value (True/False) for the
* given standard feature, iff it has fixed (immutable) value for
* the current implementation. If value is not immutable, returns
* null
*/
public static Boolean getFixedStdFeatureValue(SAXFeature stdFeat)
{
switch (stdFeat) {
case EXTERNAL_GENERAL_ENTITIES: // not yet implemented
return Boolean.FALSE;
case EXTERNAL_PARAMETER_ENTITIES: // not yet implemented
return Boolean.FALSE;
case IS_STANDALONE: // read-only, but only during parsing
break;
case LEXICAL_HANDLER_PARAMETER_ENTITIES:
// won't be able to handle PEs, so this is n/a
return Boolean.TRUE;
case NAMESPACES: // can't disable
return Boolean.TRUE;
case NAMESPACE_PREFIXES: // can't enable:
return Boolean.FALSE;
case RESOLVE_DTD_URIS: // n/a for now
return Boolean.FALSE;
case STRING_INTERNING:
// Can not disable
return Boolean.TRUE;
case UNICODE_NORMALIZATION_CHECKING:
// not implemented as of yet, maybe never
return Boolean.FALSE;
case USE_ATTRIBUTES2: // read-only
case USE_LOCATOR2: // read-only
case USE_ENTITY_RESOLVER2: // read-only
return Boolean.TRUE;
case VALIDATION:
// validation not yet implemented
return Boolean.FALSE;
case XMLNS_URIS:
// without disabling ns-processing, irrelevant:
return Boolean.TRUE;
case XML_1_1:
// not yet implemented
return Boolean.FALSE;
}
return null;
}
public static void reportUnknownFeature(String name)
throws SAXNotRecognizedException
{
throw new SAXNotRecognizedException("Feature '"+name+"' not recognized");
}
public static void reportUnknownProperty(String name)
throws SAXNotRecognizedException
{
throw new SAXNotRecognizedException("Property '"+name+"' not recognized");
}
}