eu.cdevreeze.yaidom.queryapi

SubtypeAwareElemApi

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
Learn more about member selection
Visibility
  1. Public
  2. All

Abstract Value Members

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

    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]

    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]

    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]

    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]

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

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

    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]

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

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

    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]

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

  10. abstract def findAllChildElems: IndexedSeq[A]

    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]

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

  12. abstract def findAllElems: IndexedSeq[A]

    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]

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

  14. abstract def findAllElemsOrSelf: IndexedSeq[A]

    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]

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

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

    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]

    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]

    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]

    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]

    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]

    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]

    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]

    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]

    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]

    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

    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

    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

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

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

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

    Definition Classes
    Any
  5. def clone(): AnyRef

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

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

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

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

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

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

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

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

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

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

    Definition Classes
    AnyRef
  16. def toString(): String

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

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

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

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from ElemApi[A]

Inherited from AnyRef

Inherited from Any

Ungrouped