Module xl

Interface CompiletimeModel

All Known Implementing Classes:
Compiletime, CompiletimeModel, CompiletimeModel, CompiletimeModel, InvalidQueryModel

public interface CompiletimeModel
A CompileModel is used by an XL compiler to parametrize the access to graph-like data sources in queries. This mechanism allows XL to be used for a variety of data sources, e.g., trees, graphs or hypergraphs. Implementations have to provide a suitable mapping of the specific structure of the data source in order to define an easy-to-use model.

A CompiletimeModel defines the specificity of a data source at compile-time. This has to be accompanied by an implementation of a RuntimeModel that is used at run-time. The correct run-time model instance is obtained by invocations of RuntimeModelFactory.modelForName(java.lang.String, java.lang.ClassLoader) with the name returned by getRuntimeName() as parameter.

A comprehensive specification of the behaviour of Model is given by the specification of the XL programming language.

Author:
Ole Kniemeyer
  • Method Details

    • needsWrapperFor

      boolean needsWrapperFor(Type<?> type)
      Determines whether a value of the given type has to be wrapped before it is added as a node to a Graph.
      Parameters:
      type - a value type
      Returns:
      true iff a wrapper is needed for type
    • getWrapperTypeFor

      Type<?> getWrapperTypeFor(Type<?> type)
      Return the type of wrappers for values of the given type. This method is only invoked when needsWrapperFor(de.grogra.reflect.Type<?>) returns true.
      Parameters:
      type - a value type
      Returns:
      the corresponding wrapper type
    • getNodeType

      Type<?> getNodeType()
      Specifies the base type of nodes of this model. This type is used where no specific type is available, e.g., for the node predicate "." and for the ends of standard edges.
      Returns:
      base type of nodes
    • getEdgeTypeFor

      Type<?> getEdgeTypeFor(Type<?> type)
      Specifies the compile-time type of edges for a given type. This method returns the type to which an expression of compile-time type type should be cast before it is interpreted as an edge expression.
      Parameters:
      type - the type of the expression
      Returns:
      the type of the resulting edge expression
    • getEdgeType

      Type<?> getEdgeType()
      Specifies the type of standard edges. This method returns the type which is used for the representation of standard edges in this model. This has to be the type of the (possibly unwrapped) values returned by getStandardEdgeFor(int).
      Returns:
      the type of standard edges
    • getStandardEdgeFor

      Serializable getStandardEdgeFor(int edge)
      Returns a constant value representing a standard edge. The returned value represents the given standard edge (EdgePattern.ANY_EDGE, EdgePattern.BRANCH_EDGE, EdgePattern.SUCCESSOR_EDGE or EdgePattern.REFINEMENT_EDGE) for this model. It is used as argument to constructor invocations of EdgePattern. Primitive values have to be wrapped as usual.
      Parameters:
      edge - int-value encoding a standard edge
      Returns:
      corresponding representation for this model
    • getProducerType

      Type<? extends Producer> getProducerType()
      Returns the type of producers for right-hand sides of rules for this model.
      Returns:
      type of producers
    • getQueryStateType

      Type<? extends QueryState> getQueryStateType()
      Returns the type of query states to be used for queries for this model.
      Returns:
      type of producers
    • getWrapProperty

      CompiletimeModel.Property getWrapProperty(Type<?> wrapperType)
      Returns the unwrapping property of a wrapper type. wrapperType is the type of a wrapper. If there is a property declared in this type which can be used to obtain the wrapped argument, this property is returned, otherwise null.
      Parameters:
      wrapperType - the type of a wrapper
      Returns:
      the unwrapping property for this type
    • getRuntimeName

      String getRuntimeName()
      Defines the name of the corresponding RuntimeModel. This name is used during run-time in invocations of RuntimeModelFactory.modelForName(java.lang.String, java.lang.ClassLoader) in order to obtain the RuntimeModel suitable for the code that is compiled within this compile-time model.
      Returns:
      the name of the corresponding run-time model