blob: 6688fc44bfe240116bb4f052a6f9585ae5d42304 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// minorman - May 2008: helpful superclass that handles Namespaces for project-Project's
package org.eclipse.persistence.internal.sessions.factories;
//javase imports
import java.util.Iterator;
import javax.xml.namespace.QName;
import static javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI;
import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI;
// EclipseLink imports
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.sessions.Project;
public abstract class NamespaceResolvableProject extends Project {
public static final String ECLIPSELINK_PREFIX =
"eclipselink";
public static final String ECLIPSELINK_NAMESPACE =
"http://www.eclipse.org/eclipselink/xsds/persistence";
public static final String TOPLINK_PREFIX =
"toplink";
public static final String TOPLINK_NAMESPACE =
"http://xmlns.oracle.com/ias/xsds/toplink";
public static final String OPM_PREFIX =
"opm";
public static final String OPM_NAMESPACE =
"http://xmlns.oracle.com/ias/xsds/opm";
protected NamespaceResolverWithPrefixes ns;
protected QName fieldQname;
protected NamespaceResolvableProject() {
super();
fieldQname = new QName(getSecondaryNamespace(), "field");
buildNamespaceResolver();
buildDescriptors();
setNamespaceResolverOnDescriptors();
}
protected NamespaceResolvableProject(NamespaceResolverWithPrefixes ns) {
super();
fieldQname = new QName(getSecondaryNamespace(), "field");
this.ns = ns;
buildDescriptors();
setNamespaceResolverOnDescriptors();
}
public NamespaceResolverWithPrefixes getNamespaceResolver() {
return ns;
}
protected void buildNamespaceResolver() {
ns = new NamespaceResolverWithPrefixes();
ns.put("xsi", W3C_XML_SCHEMA_INSTANCE_NS_URI);
ns.put("xsd", W3C_XML_SCHEMA_NS_URI);
String ns1 = getPrimaryNamespacePrefix();
if (ns1 != null && ns1.length() > 0) {
ns.putPrimary(ns1, getPrimaryNamespace());
}
String ns2 = getSecondaryNamespacePrefix();
if (ns2 != null && ns2.length() > 0) {
ns.putSecondary(ns2, getSecondaryNamespace());
}
}
public String getPrimaryNamespacePrefix() {
return null;
}
public String getPrimaryNamespace() {
return null;
}
public String getPrimaryNamespaceXPath() {
if (ns.getPrimaryPrefix() != null) {
return ns.getPrimaryPrefix() + ":";
}
return "";
}
public String resolvePrimaryNamespace() {
return ns.resolveNamespacePrefix(ns.getPrimaryPrefix());
}
public String getSecondaryNamespacePrefix() {
return null;
}
public String getSecondaryNamespace() {
return null;
}
public String getSecondaryNamespaceXPath() {
if (ns.getSecondaryPrefix() != null) {
return ns.getSecondaryPrefix() + ":";
}
return "";
}
public String resolveSecondaryNamespace() {
return ns.resolveNamespacePrefix(ns.getSecondaryPrefix());
}
protected abstract void buildDescriptors();
protected void setNamespaceResolverOnDescriptors() {
for (Iterator descriptors = getDescriptors().values().iterator(); descriptors.hasNext();) {
XMLDescriptor descriptor = (XMLDescriptor)descriptors.next();
descriptor.setNamespaceResolver(ns);
}
}
}