code: package it.unibz.inf.ontop.iq.transform.node;
  
  import it.unibz.inf.ontop.iq.exception.QueryNodeTransformationException;
  import it.unibz.inf.ontop.iq.node.*;
  
  /**
   * TODO: explain
   */
  public interface HomogeneousQueryNodeTransformer<T1 extends QueryNodeTransformationException,
          T2 extends QueryNodeTransformationException> {
  
      FilterNode transform(FilterNode filterNode) throws T1, T2;
  
      ExtensionalDataNode transform(ExtensionalDataNode extensionalDataNode) throws T1, T2;
  
      LeftJoinNode transform(LeftJoinNode leftJoinNode) throws T1, T2;
  
      UnionNode transform(UnionNode unionNode) throws T1, T2;
  
      IntensionalDataNode transform(IntensionalDataNode intensionalDataNode) throws T1, T2;
  
      InnerJoinNode transform(InnerJoinNode innerJoinNode) throws T1, T2;
  
      ConstructionNode transform(ConstructionNode constructionNode) throws T1, T2;
  
      AggregationNode transform(AggregationNode aggregationNode) throws T1, T2;
  
      FlattenNode transform(FlattenNode flattenNode) throws T1, T2;
  
      EmptyNode transform(EmptyNode emptyNode);
  
      TrueNode transform(TrueNode trueNode);
  
      ValuesNode transform(ValuesNode valuesNode) throws T1, T2;
  
      DistinctNode transform(DistinctNode distinctNode) throws T1, T2;
      SliceNode transform(SliceNode sliceNode) throws T1, T2;
      OrderByNode transform(OrderByNode orderByNode) throws T1, T2;
  }
  