com.sun.xml.xsom.impl.parser.SchemaDocumentImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xsom Show documentation
Show all versions of xsom Show documentation
XML Schema Object Model (XSOM) is a Java library that allows applications to easily parse XML Schema
documents and inspect information in them. It is expected to be useful for applications that need to take XML
Schema as an input.
/*
* Copyright (c) 1997, 2022 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package com.sun.xml.xsom.impl.parser;
import com.sun.xml.xsom.impl.SchemaImpl;
import com.sun.xml.xsom.parser.SchemaDocument;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* {@link SchemaDocument} implementation.
*
* @author Kohsuke Kawaguchi
*/
public final class SchemaDocumentImpl implements SchemaDocument
{
private final SchemaImpl schema;
/**
* URI of the schema document to be parsed. Can be null.
*/
private final String schemaDocumentURI;
/**
* {@link SchemaDocumentImpl}s that are referenced from this document.
*/
final Set references = new HashSet<>();
/**
* {@link SchemaDocumentImpl}s that are referencing this document.
*/
final Set referers = new HashSet<>();
protected SchemaDocumentImpl(SchemaImpl schema, String _schemaDocumentURI) {
this.schema = schema;
this.schemaDocumentURI = _schemaDocumentURI;
}
public String getSystemId() {
return schemaDocumentURI;
}
public String getTargetNamespace() {
return schema.getTargetNamespace();
}
public SchemaImpl getSchema() {
return schema;
}
public Set getReferencedDocuments() {
return Collections.unmodifiableSet(references);
}
public Set getIncludedDocuments() {
return getImportedDocuments(this.getTargetNamespace());
}
public Set getImportedDocuments(String targetNamespace) {
if(targetNamespace==null)
throw new IllegalArgumentException();
Set r = new HashSet<>();
for (SchemaDocumentImpl doc : references) {
if(doc.getTargetNamespace().equals(targetNamespace))
r.add(doc);
}
return Collections.unmodifiableSet(r);
}
public boolean includes(SchemaDocument doc) {
if(!references.contains(doc))
return false;
return doc.getSchema()==schema;
}
public boolean imports(SchemaDocument doc) {
if(!references.contains(doc))
return false;
return doc.getSchema()!=schema;
}
public Set getReferers() {
return Collections.unmodifiableSet(referers);
}
@Override
public boolean equals(Object o) {
SchemaDocumentImpl rhs = (SchemaDocumentImpl) o;
if( this.schemaDocumentURI==null || rhs.schemaDocumentURI==null)
return this==rhs;
if(!schemaDocumentURI.equals(rhs.schemaDocumentURI) )
return false;
return this.schema==rhs.schema;
}
@Override
public int hashCode() {
if (schemaDocumentURI==null)
return super.hashCode();
if (schema == null) {
return schemaDocumentURI.hashCode();
}
return schemaDocumentURI.hashCode()^this.schema.hashCode();
}
}