001: package com.sun.xml.xsom.impl.parser;
002:
003: import com.sun.xml.xsom.impl.SchemaImpl;
004: import com.sun.xml.xsom.parser.SchemaDocument;
005:
006: import java.util.Collections;
007: import java.util.HashSet;
008: import java.util.Set;
009:
010: /**
011: * {@link SchemaDocument} implementation.
012: *
013: * @author Kohsuke Kawaguchi
014: */
015: public final class SchemaDocumentImpl implements SchemaDocument {
016: private final SchemaImpl schema;
017:
018: /**
019: * URI of the schema document to be parsed. Can be null.
020: */
021: private final String schemaDocumentURI;
022:
023: /**
024: * {@link SchemaDocumentImpl}s that are referenced from this document.
025: */
026: final Set<SchemaDocumentImpl> references = new HashSet<SchemaDocumentImpl>();
027:
028: /**
029: * {@link SchemaDocumentImpl}s that are referencing this document.
030: */
031: final Set<SchemaDocumentImpl> referers = new HashSet<SchemaDocumentImpl>();
032:
033: protected SchemaDocumentImpl(SchemaImpl schema,
034: String _schemaDocumentURI) {
035: this .schema = schema;
036: this .schemaDocumentURI = _schemaDocumentURI;
037: }
038:
039: public String getSystemId() {
040: return schemaDocumentURI;
041: }
042:
043: public String getTargetNamespace() {
044: return schema.getTargetNamespace();
045: }
046:
047: public SchemaImpl getSchema() {
048: return schema;
049: }
050:
051: public Set<SchemaDocument> getReferencedDocuments() {
052: return Collections.<SchemaDocument> unmodifiableSet(references);
053: }
054:
055: public Set<SchemaDocument> getIncludedDocuments() {
056: return getImportedDocuments(this .getTargetNamespace());
057: }
058:
059: public Set<SchemaDocument> getImportedDocuments(
060: String targetNamespace) {
061: if (targetNamespace == null)
062: throw new IllegalArgumentException();
063: Set<SchemaDocument> r = new HashSet<SchemaDocument>();
064: for (SchemaDocumentImpl doc : references) {
065: if (doc.getTargetNamespace().equals(targetNamespace))
066: r.add(doc);
067: }
068: return Collections.unmodifiableSet(r);
069: }
070:
071: public boolean includes(SchemaDocument doc) {
072: if (!references.contains(doc))
073: return false;
074: return doc.getSchema() == schema;
075: }
076:
077: public boolean imports(SchemaDocument doc) {
078: if (!references.contains(doc))
079: return false;
080: return doc.getSchema() != schema;
081: }
082:
083: public Set<SchemaDocument> getReferers() {
084: return Collections.<SchemaDocument> unmodifiableSet(referers);
085: }
086:
087: public boolean equals(Object o) {
088: SchemaDocumentImpl rhs = (SchemaDocumentImpl) o;
089:
090: if (this .schemaDocumentURI == null
091: || rhs.schemaDocumentURI == null)
092: return this == rhs;
093: if (!schemaDocumentURI.equals(rhs.schemaDocumentURI))
094: return false;
095: return this .schema == rhs.schema;
096: }
097:
098: public int hashCode() {
099: if (schemaDocumentURI == null)
100: return super.hashCode();
101: return schemaDocumentURI.hashCode() ^ this.schema.hashCode();
102: }
103: }
|