com.sun.xml.xsom.impl.parser.SchemaDocumentImpl Maven / Gradle / Ivy
/*
* Copyright (c) 1997, 2021 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();
}
}