All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.odftoolkit.odfdom.pkg.OdfNamespace Maven / Gradle / Ivy

Go to download

ODFDOM is an OpenDocument Format (ODF) framework. Its purpose is to provide an easy common way to create, access and manipulate ODF files, without requiring detailed knowledge of the ODF specification. It is designed to provide the ODF developer community with an easy lightwork programming API portable to any object-oriented language. The current reference implementation is written in Java.

There is a newer version: 1.0.0-BETA1
Show newest version
/**
 * **********************************************************************
 *
 * 

DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * *

Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved. * *

Use is subject to license terms. * *

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0. You can also obtain a copy of the License at * http://odftoolkit.org/docs/license.txt * *

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 org.odftoolkit.odfdom.pkg; import java.util.HashMap; import java.util.Map; import org.odftoolkit.odfdom.dom.OdfDocumentNamespace; /** * Class wrapping the XML Namespace URI and XML Namespace prefix (used by default) as a single * entity For instance, the ODF paragraph element uses by default in the ODF specification * the prefix "text" and is bound to this prefix heres */ public class OdfNamespace implements Comparable, NamespaceName { private static Map mNamespacesByURI = new HashMap(); private String mUri; private String mPrefix; /** * In case of a default namespace no prefix is given, but we require the prefix for our class * loader */ private static Map mUrlToPrefix; private OdfNamespace() {} private OdfNamespace(String prefix, String uri) { mUri = uri; mPrefix = prefix; } /** * Returns the OdfNamespace for the given name. Creates a new one, if the name was not asked * before. * * @param name represents a W3C Namespace Name. The interface NamespaceName is often * implemented by an enum. * @return the OdfNamespace for the given name. */ public static OdfNamespace newNamespace(NamespaceName name) { OdfNamespace ns = null; if (name != null) { ns = newNamespace(name.getPrefix(), name.getUri()); } return ns; } /** * Returns the OdfNamespace for the given name. Creates a new one, if the name was not asked * before. * * @param prefix abbreviation for the URL, might be null when a default namespace was set * @param uri identifying the namespace. * @return the namespace. */ public static OdfNamespace newNamespace(String prefix, String uri) { OdfNamespace odfNamespace = null; if (prefix == null || prefix.isEmpty()) { if (mUrlToPrefix == null) { initializeUrl2DefaultPrefixMap(); } prefix = mUrlToPrefix.get(uri); } if (uri != null && uri.length() > 0) { odfNamespace = mNamespacesByURI.get(uri); if (odfNamespace == null) { odfNamespace = new OdfNamespace(prefix, uri); mNamespacesByURI.put(uri, odfNamespace); } else { if (prefix != null) { // prefix will be adapted for all OdfNamespaces (last wins) odfNamespace.mPrefix = prefix; } } } return odfNamespace; } /** * In case of a default namespace no prefix is given, but we require the prefix for our class * loader */ public static void initializeUrl2DefaultPrefixMap() { mUrlToPrefix = new HashMap(32); // add all namespaces from the ODF package specification for (OdfPackageNamespace packageNamespace : OdfPackageNamespace.values()) { mUrlToPrefix.put(packageNamespace.getUri(), packageNamespace.getPrefix()); } // add all namespaces from the ODF schema specification for (OdfDocumentNamespace schemaNamespace : OdfDocumentNamespace.values()) { mUrlToPrefix.put(schemaNamespace.getUri(), schemaNamespace.getPrefix()); } } /** * Returns the namespace for the given uri. * * @param uri identifying the namespace. * @return the namespace identified by the given uri. */ public static OdfNamespace getNamespace(String uri) { OdfNamespace ns = null; if (uri != null) { ns = mNamespacesByURI.get(uri); } return ns; } public String getPrefix() { return mPrefix; } public String getUri() { return mUri; } @Override @SuppressWarnings("EqualsWhichDoesntCheckParameterClass") public boolean equals(Object obj) { if (mUri != null) { return mUri.equals(obj.toString()); } else { return mUri == obj; } } @Override public int hashCode() { if (mUri != null) { return mUri.hashCode(); } else { return 0; } } @Override public String toString() { return mUri; } /** * Splits the XML Qname into the local name and the prefix. * * @param qname is the qualified name to be split. * @return an array of two strings containing first the prefix and the second the local part. * @throws IllegalArgumentException if no qualified name was given. */ public static String[] splitQName(String qname) throws IllegalArgumentException { String localpart = qname; String prefix = null; int colon = qname.indexOf(':'); if (colon > 0) { localpart = qname.substring(colon + 1); prefix = qname.substring(0, colon); } else { throw new IllegalArgumentException( "A qualified name was required, but '" + qname + "' was given!"); } return new String[] {prefix, localpart}; } /** * @param qname is the qualified name to be splitted. * @return the local name of the XML Qname. * @throws IllegalArgumentException if no qualified name was given. */ public static String getPrefixPart(String qname) { return splitQName(qname)[0]; } /** * @param qname is the qualified name to be splitted. * @return the prefix of the XML Qname. * @throws IllegalArgumentException if no qualified name was given. */ public static String getLocalPart(String qname) { return splitQName(qname)[1]; } public int compareTo(OdfNamespace namespace) { return toString().compareTo(namespace.toString()); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy