Trait

eu.cdevreeze.yaidom.queryapi

SubtypeAwareElemApi

Related Doc: package queryapi

Permalink

trait SubtypeAwareElemApi[A <: SubtypeAwareElemApi[A]] extends ElemApi[A]

Extension to ElemApi that makes querying for sub-types of the element type easy.

For example, XML Schema can be modeled with an object hierarchy, starting with some XsdElem super-type which mixes in trait SubtypeAwareElemApi, among other query traits. The object hierarchy could contain sub-classes of XsdElem such as XsdRootElem, GlobalElementDeclaration, etc. Then the SubtypeAwareElemApi trait makes it easy to query for all or some global element declarations, etc.

There is no magic in these traits: it is just ElemApi and ElemLike underneath. It is only the syntactic convenience that makes the difference.

The query methods of this trait take a sub-type as first value parameter. It is intentional that this is a value parameter, and not a second type parameter, since it is conceptually the most important parameter of these query methods. (If it were a second type parameter instead, the article http://hacking-scala.org/post/73854628325/advanced-type-constraints-with-type-classes would show how to make that solution robust, using some @NotNothing annotation.)

The sub-type parameter could have been a java.lang.Class object, except that type erasure would make it less attractive (when doing pattern matching against that type). Hence the use of a ClassTag parameter, which undoes type erasure for non-generic types, if available implicitly. So ClassTag is used as a better java.lang.Class, yet without polluting the public API with an implicit ClassTag parameter. (Instead, the ClassTag is made implicit inside the method implementations.)

Self Type
A
Linear Supertypes
ElemApi[A], AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. SubtypeAwareElemApi
  2. ElemApi
  3. AnyRef
  4. Any
  1. Hide All
  2. Show all
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract def \(p: (A) ⇒ Boolean): IndexedSeq[A]

    Permalink

    Shorthand for filterChildElems(p).

    Shorthand for filterChildElems(p). Use this shorthand only if the predicate is a short expression.

    Definition Classes
    ElemApi
  2. abstract def \\(p: (A) ⇒ Boolean): IndexedSeq[A]

    Permalink

    Shorthand for filterElemsOrSelf(p).

    Shorthand for filterElemsOrSelf(p). Use this shorthand only if the predicate is a short expression.

    Definition Classes
    ElemApi
  3. abstract def \\!(p: (A) ⇒ Boolean): IndexedSeq[A]

    Permalink

    Shorthand for findTopmostElemsOrSelf(p).

    Shorthand for findTopmostElemsOrSelf(p). Use this shorthand only if the predicate is a short expression.

    Definition Classes
    ElemApi
  4. abstract def filterChildElems(p: (A) ⇒ Boolean): IndexedSeq[A]

    Permalink

    Returns the child elements obeying the given predicate.

    Returns the child elements obeying the given predicate. This method could be defined as:

    def filterChildElems(p: E => Boolean): immutable.IndexedSeq[E] =
      this.findAllChildElems.filter(p)
    Definition Classes
    ElemApi
  5. abstract def filterChildElemsOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): IndexedSeq[B]

    Permalink

    Returns the child elements of the given sub-type obeying the given predicate.

  6. abstract def filterElems(p: (A) ⇒ Boolean): IndexedSeq[A]

    Permalink

    Returns the descendant elements obeying the given predicate.

    Returns the descendant elements obeying the given predicate. This method could be defined as:

    this.findAllChildElems flatMap (_.filterElemsOrSelf(p))
    Definition Classes
    ElemApi
  7. abstract def filterElemsOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): IndexedSeq[B]

    Permalink

    Returns the descendant elements of the given sub-type obeying the given predicate.

  8. abstract def filterElemsOrSelf(p: (A) ⇒ Boolean): IndexedSeq[A]

    Permalink

    Returns the descendant-or-self elements obeying the given predicate.

    Returns the descendant-or-self elements obeying the given predicate. This method could be defined as:

    def filterElemsOrSelf(p: E => Boolean): immutable.IndexedSeq[E] =
      Vector(this).filter(p) ++ (this.findAllChildElems flatMap (_.filterElemsOrSelf(p)))

    It can be proven that the result is equivalent to findAllElemsOrSelf filter p.

    Definition Classes
    ElemApi
  9. abstract def filterElemsOrSelfOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): IndexedSeq[B]

    Permalink

    Returns the descendant-or-self elements of the given sub-type obeying the given predicate.

  10. abstract def findAllChildElems: IndexedSeq[A]

    Permalink

    Core method that returns all child elements, in the correct order.

    Core method that returns all child elements, in the correct order. Other operations can be defined in terms of this one.

    Definition Classes
    ElemApi
  11. abstract def findAllChildElemsOfType[B <: A](subType: ClassTag[B]): IndexedSeq[B]

    Permalink

    Returns all child elements of the given sub-type, in the correct order.

  12. abstract def findAllElems: IndexedSeq[A]

    Permalink

    Returns all descendant elements (not including this element).

    Returns all descendant elements (not including this element). This method could be defined as filterElems { e => true }. Equivalent to findAllElemsOrSelf.drop(1).

    Definition Classes
    ElemApi
  13. abstract def findAllElemsOfType[B <: A](subType: ClassTag[B]): IndexedSeq[B]

    Permalink

    Returns all descendant elements of the given sub-type (not including this element).

  14. abstract def findAllElemsOrSelf: IndexedSeq[A]

    Permalink

    Returns this element followed by all descendant elements (that is, the descendant-or-self elements).

    Returns this element followed by all descendant elements (that is, the descendant-or-self elements). This method could be defined as filterElemsOrSelf { e => true }.

    Definition Classes
    ElemApi
  15. abstract def findAllElemsOrSelfOfType[B <: A](subType: ClassTag[B]): IndexedSeq[B]

    Permalink

    Returns all descendant-or-self elements of the given sub-type.

  16. abstract def findChildElem(p: (A) ⇒ Boolean): Option[A]

    Permalink

    Returns the first found child element obeying the given predicate, if any, wrapped in an Option.

    Returns the first found child element obeying the given predicate, if any, wrapped in an Option. This method could be defined as filterChildElems(p).headOption.

    Definition Classes
    ElemApi
  17. abstract def findChildElemOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): Option[B]

    Permalink

    Returns the first found child element of the given sub-type obeying the given predicate, if any, wrapped in an Option.

  18. abstract def findElem(p: (A) ⇒ Boolean): Option[A]

    Permalink

    Returns the first found (topmost) descendant element obeying the given predicate, if any, wrapped in an Option.

    Returns the first found (topmost) descendant element obeying the given predicate, if any, wrapped in an Option. This method could be defined as filterElems(p).headOption.

    Definition Classes
    ElemApi
  19. abstract def findElemOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): Option[B]

    Permalink

    Returns the first found (topmost) descendant element of the given sub-type obeying the given predicate, if any, wrapped in an Option.

  20. abstract def findElemOrSelf(p: (A) ⇒ Boolean): Option[A]

    Permalink

    Returns the first found (topmost) descendant-or-self element obeying the given predicate, if any, wrapped in an Option.

    Returns the first found (topmost) descendant-or-self element obeying the given predicate, if any, wrapped in an Option. This method could be defined as filterElemsOrSelf(p).headOption.

    Definition Classes
    ElemApi
  21. abstract def findElemOrSelfOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): Option[B]

    Permalink

    Returns the first found (topmost) descendant-or-self element of the given sub-type obeying the given predicate, if any, wrapped in an Option.

  22. abstract def findTopmostElems(p: (A) ⇒ Boolean): IndexedSeq[A]

    Permalink

    Returns the descendant elements obeying the given predicate that have no ancestor obeying the predicate.

    Returns the descendant elements obeying the given predicate that have no ancestor obeying the predicate. This method could be defined as:

    this.findAllChildElems flatMap (_.findTopmostElemsOrSelf(p))
    Definition Classes
    ElemApi
  23. abstract def findTopmostElemsOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): IndexedSeq[B]

    Permalink

    Returns the descendant elements of the given sub-type obeying the given predicate that have no ancestor of the given sub-type obeying the predicate.

  24. abstract def findTopmostElemsOrSelf(p: (A) ⇒ Boolean): IndexedSeq[A]

    Permalink

    Returns the descendant-or-self elements obeying the given predicate, such that no ancestor obeys the predicate.

    Returns the descendant-or-self elements obeying the given predicate, such that no ancestor obeys the predicate. This method could be defined as:

    def findTopmostElemsOrSelf(p: E => Boolean): immutable.IndexedSeq[E] =
      if (p(this)) Vector(this)
      else (this.findAllChildElems flatMap (_.findTopmostElemsOrSelf(p)))
    Definition Classes
    ElemApi
  25. abstract def findTopmostElemsOrSelfOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): IndexedSeq[B]

    Permalink

    Returns the descendant-or-self elements of the given sub-type obeying the given predicate, such that no ancestor of the given sub-type obeys the predicate.

  26. abstract def getChildElem(p: (A) ⇒ Boolean): A

    Permalink

    Returns the single child element obeying the given predicate, and throws an exception otherwise.

    Returns the single child element obeying the given predicate, and throws an exception otherwise. This method could be defined as findChildElem(p).get.

    Definition Classes
    ElemApi
  27. abstract def getChildElemOfType[B <: A](subType: ClassTag[B])(p: (B) ⇒ Boolean): B

    Permalink

    Returns the single child element of the given sub-type obeying the given predicate, and throws an exception otherwise.

Concrete Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  9. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  10. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  11. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  12. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  13. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  14. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  15. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  16. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  17. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  18. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  19. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from ElemApi[A]

Inherited from AnyRef

Inherited from Any

Ungrouped