Package lupos.gui.operatorgraph.visualeditor.visualrif.parsing

Source Code of lupos.gui.operatorgraph.visualeditor.visualrif.parsing.VisualRifGenerator

/**
* Copyright (c) 2013, Institute of Information Systems (Sven Groppe and contributors of LUPOSDATE), University of Luebeck
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
* following conditions are met:
*
*   - Redistributions of source code must retain the above copyright notice, this list of conditions and the following
*     disclaimer.
*   - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
*     following disclaimer in the documentation and/or other materials provided with the distribution.
*   - Neither the name of the University of Luebeck nor the names of its contributors may be used to endorse or promote
*     products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package lupos.gui.operatorgraph.visualeditor.visualrif.parsing;


import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JTabbedPane;

import lupos.engine.evaluators.CommonCoreQueryEvaluator;
import lupos.gui.operatorgraph.visualeditor.guielements.AbstractGuiComponent;
import lupos.gui.operatorgraph.visualeditor.operators.Operator;
import lupos.gui.operatorgraph.visualeditor.visualrif.VisualRifEditor;
import lupos.gui.operatorgraph.visualeditor.visualrif.guielements.Console;
import lupos.gui.operatorgraph.visualeditor.visualrif.guielements.DocumentEditorPane;
import lupos.gui.operatorgraph.visualeditor.visualrif.guielements.graphs.RuleGraph;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.AndContainer;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.ConstantOperator;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.ExistsContainer;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.FrameOperator;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.ListOperator;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.OrContainer;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.PrefixOperator;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.RuleOperator;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.UnitermOperator;
import lupos.gui.operatorgraph.visualeditor.visualrif.operators.VariableOperator;
import lupos.gui.operatorgraph.visualeditor.visualrif.util.GraphWrapperOperator;
import lupos.gui.operatorgraph.visualeditor.visualrif.util.Term;
import lupos.misc.util.OperatorIDTuple;
import lupos.rif.IExpression;
import lupos.rif.IRuleNode;
import lupos.rif.IRuleVisitor;
import lupos.rif.RIFException;
import lupos.rif.generated.parser.ParseException;
import lupos.rif.generated.parser.RIFParser;
import lupos.rif.generated.syntaxtree.CompilationUnit;
import lupos.rif.model.Conjunction;
import lupos.rif.model.Constant;
import lupos.rif.model.Disjunction;
import lupos.rif.model.Document;
import lupos.rif.model.Equality;
import lupos.rif.model.ExistExpression;
import lupos.rif.model.External;
import lupos.rif.model.Rule;
import lupos.rif.model.RuleList;
import lupos.rif.model.RulePredicate;
import lupos.rif.model.RuleVariable;
import lupos.rif.visitor.NormalizeRuleVisitor;
import lupos.rif.visitor.ParseSyntaxTreeVisitor;
import lupos.rif.visitor.ResolveListsRuleVisitor;
import lupos.rif.visitor.RuleDependencyGraphVisitor;
import lupos.rif.visitor.RuleFilteringVisitor;
import lupos.rif.visitor.SubstituteFunctionCallsVisitor;
import lupos.rif.visitor.ValidateRuleVisitor;
import lupos.sparql1_1.Node;

public class VisualRifGenerator implements IRuleVisitor<Object, Object>{

  String query;

  private VisualRifEditor visualRifEditor;
  protected final CommonCoreQueryEvaluator<Node> evaluator = null;
  private CompilationUnit compilationUnit;
  private Document rifDocument;
  private DocumentEditorPane documentEditorPane;
  private PrefixOperator po = null;
  private String[] comboBoxEntries;
  private final Scout scout = new Scout();


  // Constructor
  public VisualRifGenerator(final String query, final DocumentEditorPane that, final Console console, final JTabbedPane bottomPane, final VisualRifEditor visualRifEditor, final IRuleNode arg){
    this.setVisualRifEditor(visualRifEditor);
    this.setQuery(query);
    this.setDocumentEditorPane(that);

    final RIFParser parser = new RIFParser(new StringReader(query));

    try {

      this.compilationUnit = parser.CompilationUnit();

    } catch (final ParseException e) {
      console.setText(e.getLocalizedMessage());
      bottomPane.setSelectedIndex(1);
    }

    this.rifDocument = (Document) this.compilationUnit.accept(new ParseSyntaxTreeVisitor(), arg);


    final ValidateRuleVisitor valVisitor = new ValidateRuleVisitor();
    final NormalizeRuleVisitor normVisitor = new NormalizeRuleVisitor();
    final SubstituteFunctionCallsVisitor subVisitor = new SubstituteFunctionCallsVisitor();
    final ResolveListsRuleVisitor listVisitor = new ResolveListsRuleVisitor();
    final RuleDependencyGraphVisitor dependencyVisitor = new RuleDependencyGraphVisitor();
    final RuleFilteringVisitor filteringVisitor = new RuleFilteringVisitor();

    this.rifDocument = (Document) this.rifDocument.accept(subVisitor, arg);
    this.rifDocument = (Document) this.rifDocument.accept(listVisitor, arg);
    this.rifDocument = (Document) this.rifDocument.accept(normVisitor, arg);
    this.rifDocument.accept(valVisitor, arg);
    this.rifDocument.accept(dependencyVisitor, arg);
    this.rifDocument.accept(filteringVisitor, arg);
  }

  // Visit
  @Override
  public Object visit(final Document obj, final Object arg) throws RIFException {
    // Prefix + Base
    if (!obj.getPrefixMap().isEmpty() || obj.getBaseNamespace() != null) {
      this.po = new PrefixOperator();
      int prefixCnt = 0;

      // Base
      if (obj.getBaseNamespace() != null) {
        this.po.addEntry("BASE", obj.getBaseNamespace());
        prefixCnt++;
      }

      // Prefix
      for (final Entry<String, String> e : obj.getPrefixMap().entrySet()) {
        this.po.addEntry(e.getKey(), e.getValue());
        prefixCnt++;
      }

      this.comboBoxEntries = new String[prefixCnt+3];
      int cnt = prefixCnt;

      if (obj.getBaseNamespace() != null) {
        this.comboBoxEntries[prefixCnt-cnt] = "BASE";
        cnt--;
      }

      for (final Entry<String, String> e : obj.getPrefixMap().entrySet()) {
        if ( e.getKey().equals("xsd")){;}else
          if ( e.getKey().equals("xs") ){
            this.comboBoxEntries[prefixCnt-cnt] = e.getKey();cnt--;
            this.comboBoxEntries[prefixCnt-cnt] = "xs#integer"; cnt--;
            this.comboBoxEntries[prefixCnt-cnt] = "xs#string";cnt--;
            this.comboBoxEntries[prefixCnt-cnt] = "integer";
            cnt--;
          }else{
            this.comboBoxEntries[prefixCnt-cnt] = e.getKey();
            cnt--;
          }
      }

    } // end prefix

    if (!obj.getFacts().isEmpty()) {

      for (final Iterator iterator = obj.getFacts().iterator(); iterator
          .hasNext();) {
        final IExpression type = (IExpression) iterator.next();
      }

    }
    return  this.po;

  }

  @Override
  public Object visit(final Rule obj, final Object arg) throws RIFException {
    System.out.println("visit(Rule obj, Object arg)");

    final RuleOperator ro = new RuleOperator();
    ro.setVisualRifEditor(this.visualRifEditor);
    ro.initRule();

    ro.setUnVisitedObject(obj);
    return ro;
  }

  @Override
  public Object visit(final ExistExpression obj, final Object arg) throws RIFException {
    System.out.println("visit(ExistExpression obj, Object arg)");

    final ExistsContainer existsContainer = new ExistsContainer();
    existsContainer.setVisualRifEditor(this.visualRifEditor);

    existsContainer.draw(new GraphWrapperOperator(existsContainer),
        (RuleGraph) arg);

    final LinkedList<String> existsVar = new LinkedList<String>();

    final Operator op = (Operator) obj
        .getChildren()
        .get(obj.getChildren().size()-1)
        .accept(this, existsContainer.getRecursiveOperatorGraph());

    for (int i = 0 ; i < obj.getChildren().size()-1; i++){
      existsVar.add(obj.getChildren().get(i).getLabel().substring(1));
      existsContainer.addOperator(op);
    }
    return existsContainer;
  }

  @Override
  public Object visit(final Conjunction obj, final Object arg) throws RIFException {
    System.out.println("visit(Conjunction obj, Object arg)");

    final AndContainer andContainer = new AndContainer();
    andContainer.setVisualRifEditor(this.visualRifEditor);

    final AbstractGuiComponent<Operator> recrusiveOperatorGraph = andContainer.draw(new GraphWrapperOperator(andContainer),
        (RuleGraph) arg);
    for (int i = 0; i < obj.getChildren().size(); i++) {
      final Operator operator = (Operator) obj.getChildren().get(i).accept(this, andContainer.getRecursiveOperatorGraph());
      andContainer.addOperator(operator);
    }
    return andContainer;
  }

  @Override
  public Object visit(final Disjunction obj, final Object arg) throws RIFException {
    System.out.println("visit(Disjunction obj, Object arg)");

    final OrContainer orContainer = new OrContainer();
    orContainer.setVisualRifEditor(this.visualRifEditor);

    orContainer.draw(new GraphWrapperOperator(orContainer),
        (RuleGraph) arg);
    for (int i = 0; i < obj.getChildren().size(); i++) {
      orContainer.addOperator((Operator) obj.getChildren().get(i).accept(this, orContainer.getRecursiveOperatorGraph()));
    }
    return orContainer;
  }

  @Override
  public Object visit(final RulePredicate obj, final Object arg) throws RIFException {
    System.out.println("visit(RulePredicate obj, Object arg)");
    final LinkedList<Term> terms = new LinkedList<Term>();

    // FrameOperator
    if(obj.getLabel().contains("[") && obj.getLabel().contains("]")){
      final FrameOperator frameOperator = new FrameOperator();
      frameOperator.setVisualRifEditor(this.visualRifEditor);
      frameOperator.setConstantComboBoxEntries(this.comboBoxEntries);
      // create Terms

      switch((Integer) obj.termParams.get(0).accept(this.scout, arg)){
      case Scout.RULEVARIABLE :   if(((String)obj.termParams.get(0).accept(this, arg)).startsWith("ALIASVAR")){
        // TODO: check!
      }
      final Term termVar1 = frameOperator.prepareToCreateVariableTerm((String)obj.termParams.get(0).accept(this, arg));
      terms.add(termVar1);
      break;

      case Scout.CONSTANT: String[] constArray = new String[2];
      constArray = (String[]) obj.termParams.get(0).accept(this, arg);
      final Term termConst1 = frameOperator.prepareToCreateConstantTerm(constArray[0],constArray[1],this.comboBoxEntries);
      terms.add(termConst1);
      break;
      case Scout.RULELIST:
        final ListOperator listOperator = (ListOperator) obj.termParams.get(0).accept(this, arg);
        final Term listTerm = frameOperator.prepareToCreateListTerm(listOperator, this.comboBoxEntries);
        terms.add(listTerm);
        break;
      case Scout.RULEPREDICATE:
        final UnitermOperator unitermOperator = (UnitermOperator) obj.termParams.get(0).accept(this, arg);
        final Term unitermTerm = frameOperator.prepareToCreateUnitermTerm(unitermOperator, this.comboBoxEntries);
        terms.add(unitermTerm);
        break;
      case Scout.EXTERNAL:
        final UnitermOperator external = (UnitermOperator) obj.termParams.get(0).accept(this, arg);
        final Term externalTerm = frameOperator.prepareToCreateUnitermTerm(external, this.comboBoxEntries);
        terms.add(externalTerm);
        break;
      default:
        System.err.println("VisualRifGenerator.visit(RulePredicate obj, Object arg)");//TODO
        break;
      }

      switch((Integer) obj.termName.accept(this.scout, arg)){
      case Scout.RULEVARIABLE :
        final Term termNameVar = frameOperator.prepareToCreateVariableTerm((String)obj.termName.accept(this, arg));
        terms.add(termNameVar);
        break;

      case Scout.CONSTANT:
        String[] constArray = new String[2];
        constArray = (String[]) obj.termName.accept(this, arg);
        final Term termNameConst = frameOperator.prepareToCreateConstantTerm(constArray[0],constArray[1],this.comboBoxEntries);
        terms.add(termNameConst);
        break;

      case Scout.RULELIST:
        final ListOperator listOperator = (ListOperator) obj.termName.accept(this, arg);
        final Term listTerm = frameOperator.prepareToCreateListTerm(listOperator, this.comboBoxEntries);
        terms.add(listTerm);
        break;

      case Scout.RULEPREDICATE:
        final UnitermOperator unitermOperator = (UnitermOperator) obj.termName.accept(this, arg);
        final Term unitermTerm = frameOperator.prepareToCreateUnitermTerm(unitermOperator, this.comboBoxEntries);
        terms.add(unitermTerm);
        break;

      case Scout.EXTERNAL:
        final UnitermOperator external = (UnitermOperator) obj.termName.accept(this, arg);
        final Term externalTerm = frameOperator.prepareToCreateUnitermTerm(external, this.comboBoxEntries);
        terms.add(externalTerm);
        break;

      default:
        System.err.println("VisualRifGenerator.visit(RulePredicate obj, Object arg)");//TODO
        break;
      }

      switch((Integer) obj.termParams.get(1).accept(this.scout, arg)){
      case Scout.RULEVARIABLE :
        final Term termVar2 = frameOperator.prepareToCreateVariableTerm((String)obj.termParams.get(1).accept(this, arg));
        terms.add(termVar2);
        break;

      case Scout.CONSTANT: String[] constArray = new String[2];
        constArray = (String[]) obj.termParams.get(1).accept(this, arg);
        final Term termConst2 = frameOperator.prepareToCreateConstantTerm(constArray[0],constArray[1],this.comboBoxEntries);
        terms.add(termConst2);
        break;

      case Scout.RULELIST:
        final ListOperator listOperator = (ListOperator) obj.termParams.get(1).accept(this, arg);
        final Term listTerm = frameOperator.prepareToCreateListTerm(listOperator, this.comboBoxEntries);
        terms.add(listTerm);
        break;

      case Scout.RULEPREDICATE:
        final UnitermOperator unitermOperator = (UnitermOperator) obj.termParams.get(1).accept(this, arg);
        final Term unitermTerm = frameOperator.prepareToCreateUnitermTerm(unitermOperator, this.comboBoxEntries);
        terms.add(unitermTerm);
        break;

      case Scout.EXTERNAL:
        final UnitermOperator external = (UnitermOperator) obj.termParams.get(1).accept(this, arg);
        final Term externalTerm = frameOperator.prepareToCreateUnitermTerm(external, this.comboBoxEntries);
        terms.add(externalTerm);
        break;

      default:
        System.err.println("VisualRifGenerator.visit(RulePredicate obj, Object arg)");//TODO
        break;
      }
      frameOperator.setTerms(terms);
      if( (arg instanceof RuleGraph) &&((RuleGraph) arg).isRecursiveOperatorGraph()  ){
        System.out.println("!Ich wart hier");
        final RuleGraph rg = ((RuleGraph) arg);
        rg.getOperatorContainer().addOperator(frameOperator);
      }
      return frameOperator;
    } else {

      // Uniterm
      final UnitermOperator uniTerm = new UnitermOperator();
      uniTerm.setVisualRifEditor(this.visualRifEditor);
      uniTerm.setConstantComboBoxEntries(this.comboBoxEntries);

      // Prefix + Name
      final String[] termPref = (String[]) obj.termName.accept(this, arg);

      // set prefix
      uniTerm.getUniTermComboBox().setSelectedItem(termPref[0]);
      uniTerm.setSelectedPrefix(termPref[0]);

      // set name
      uniTerm.setTermName(termPref[1]);

      // create Terms
      int tmp = 0;
      for (int i = 0; i < obj.termParams.size(); i++) {
        tmp =  (Integer) obj.termParams.get(i).accept(this.scout, arg);
        switch(tmp){
        case Scout.RULEVARIABLE:
          final Term termVar = uniTerm.prepareToCreateVariableTerm((String)obj.termParams.get(i).accept(this, arg));
          terms.add(termVar);
          break;

        case Scout.CONSTANT:
          String[] constArray = new String[2];
          constArray = (String[]) obj.termParams.get(i).accept(this, arg);
          final Term termConst = uniTerm.prepareToCreateConstantTerm(constArray[0],constArray[1],this.comboBoxEntries);
          terms.add(termConst);
          break;

        case Scout.RULELIST:
          final ListOperator listOperator = (ListOperator) obj.termParams.get(i).accept(this, arg);
          final Term listTerm = uniTerm.prepareToCreateListTerm(listOperator, this.comboBoxEntries);
          terms.add(listTerm);
          break;

        case Scout.RULEPREDICATE:
          final UnitermOperator unitermOperator = (UnitermOperator) obj.termParams.get(i).accept(this, arg);
          final Term unitermTerm = uniTerm.prepareToCreateUnitermTerm(unitermOperator, this.comboBoxEntries);
          terms.add(unitermTerm);
          break;

        case Scout.EXTERNAL:
          final UnitermOperator external = (UnitermOperator) obj.termParams.get(i).accept(this, arg);
          final Term externalTerm = uniTerm.prepareToCreateUnitermTerm(external, this.comboBoxEntries);
          terms.add(externalTerm);
          break;

          default:
            System.err.println("VisualRifGenerator.visit(RulePredicate obj, Object arg)");//TODO
            break;
        }
      } // end for
      uniTerm.setTerms(terms);
      return uniTerm;
    }
  }

  @Override
  public Object visit(final Equality obj, final Object arg) throws RIFException {
    System.out.println("visit(Equality obj, Object arg)");

    final Object left = obj.leftExpr.accept(this, arg);
    final Object right = obj.rightExpr.accept(this, arg);

    // Constant
    if (left instanceof String[]){
      final String[] constArray = (String[])left;
      final ConstantOperator constOpL = new ConstantOperator();
      constOpL.setConstant(constArray[1]);
      constOpL.setComboBoxEntries(this.comboBoxEntries);
      constOpL.setVisualRifEditor(this.visualRifEditor);
      constOpL.getConstantComboBox().setSelectedItem(constArray[0]);
      constOpL.setSelectedPrefix(constArray[0]);

      switch((Integer) obj.rightExpr.accept(this.scout, arg)){
        case Scout.RULEVARIABLE:
          final VariableOperator varOpR = new VariableOperator();
          varOpR.setVariable((String)right);
          final OperatorIDTuple<Operator> oidtVar = new OperatorIDTuple<Operator> (varOpR, 0);
          constOpL.addSucceedingOperator(oidtVar);
          break;

        case Scout.CONSTANT:
          final ConstantOperator constOpR = new ConstantOperator();
          constOpR.setVisualRifEditor(this.visualRifEditor);
          constOpR.setComboBoxEntries(this.comboBoxEntries);
          final String[] prefConst = (String[]) obj.rightExpr.accept(this, arg);
          constOpR.setConstant(prefConst[1]);
          constOpR.getConstantComboBox().setSelectedItem(prefConst[0]);
          constOpR.setSelectedPrefix(prefConst[0]);
          final OperatorIDTuple<Operator> oidtConst = new OperatorIDTuple<Operator> (constOpR, 0);
          constOpL.addSucceedingOperator(oidtConst);
          break;

        case Scout.RULEPREDICATE:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;

            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            constOpL.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.EXTERNAL:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;
            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            constOpL.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.RULELIST:
          final ListOperator listOpR = (ListOperator) right;
          final OperatorIDTuple<Operator> oidt = new OperatorIDTuple<Operator> (listOpR, 0);
          constOpL.addSucceedingOperator(oidt);
          break;

        default:
          break;
      }
      return constOpL;
    } // End Constant
    // Variable
    if (left instanceof String){

      final VariableOperator varOpL = new VariableOperator();
      varOpL.setVariable((String)left);

      switch((Integer) obj.rightExpr.accept(this.scout, arg)){

        case Scout.RULEVARIABLE:
          final VariableOperator varOpR = new VariableOperator();
          varOpR.setVariable((String)right);
          final OperatorIDTuple<Operator> oidtVar = new OperatorIDTuple<Operator> (varOpR, 0);
          varOpL.addSucceedingOperator(oidtVar);
          break;

        case Scout.CONSTANT:
          final ConstantOperator constOpR = new ConstantOperator();
          constOpR.setVisualRifEditor(this.visualRifEditor);
          constOpR.setComboBoxEntries(this.comboBoxEntries);
          final String[] prefConst = (String[]) obj.rightExpr.accept(this, arg);
          constOpR.setConstant(prefConst[1]);
          constOpR.getConstantComboBox().setSelectedItem(prefConst[0]);
          constOpR.setSelectedPrefix(prefConst[0]);
          final OperatorIDTuple<Operator> oidtConst = new OperatorIDTuple<Operator> (constOpR, 0);
          varOpL.addSucceedingOperator(oidtConst);
          break;

        case Scout.RULEPREDICATE:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;

            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            varOpL.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.EXTERNAL:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;

            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            varOpL.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.RULELIST:
          final ListOperator listOpR = (ListOperator) right;
          final OperatorIDTuple<Operator> oidt = new OperatorIDTuple<Operator> (listOpR, 0);
          varOpL.addSucceedingOperator(oidt);
          break;

        default:
          break;
      }
      return varOpL;
    }// End Variable

    // Uniterm
    if (left instanceof UnitermOperator){
      final UnitermOperator unitermOperator = (UnitermOperator) left;
      switch((Integer) obj.rightExpr.accept(this.scout, arg)){
        case Scout.RULEVARIABLE:
          final VariableOperator varOpR = new VariableOperator();
          varOpR.setVariable((String)right);
          final OperatorIDTuple<Operator> oidtVar = new OperatorIDTuple<Operator> (varOpR, 0);
          unitermOperator.addSucceedingOperator(oidtVar);
          break;

        case Scout.CONSTANT:
          final ConstantOperator constOpR = new ConstantOperator();
          constOpR.setVisualRifEditor(this.visualRifEditor);
          constOpR.setComboBoxEntries(this.comboBoxEntries);
          final String[] prefConst = (String[]) obj.rightExpr.accept(this, arg);
          constOpR.setConstant(prefConst[1]);
          constOpR.getConstantComboBox().setSelectedItem(prefConst[0]);
          constOpR.setSelectedPrefix(prefConst[0]);
          final OperatorIDTuple<Operator> oidtConst = new OperatorIDTuple<Operator> (constOpR, 0);
          unitermOperator.addSucceedingOperator(oidtConst);
          break;

        case Scout.RULEPREDICATE:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;
            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            unitermOperator.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.EXTERNAL:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;
            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            unitermOperator.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.RULELIST:
          final ListOperator listOpR = (ListOperator) right;
          final OperatorIDTuple<Operator> oidt = new OperatorIDTuple<Operator> (listOpR, 0);
          unitermOperator.addSucceedingOperator(oidt);
          break;

        default:
          break;
      }
      return unitermOperator;
    }// End Uniterm

    // List
    if (left instanceof ListOperator){
      final ListOperator listOperator = (ListOperator) left;
      switch((Integer) obj.rightExpr.accept(this.scout, arg)){

        case Scout.RULEVARIABLE:
          final VariableOperator varOpR = new VariableOperator();
          varOpR.setVariable((String)right);
          final OperatorIDTuple<Operator> oidtVar = new OperatorIDTuple<Operator> (varOpR, 0);
          listOperator.addSucceedingOperator(oidtVar);
          break;

        case Scout.CONSTANT:
          final ConstantOperator constOpR = new ConstantOperator();
          constOpR.setVisualRifEditor(this.visualRifEditor);
          constOpR.setComboBoxEntries(this.comboBoxEntries);
          final String[] prefConst = (String[]) obj.rightExpr.accept(this, arg);
          constOpR.setConstant(prefConst[1]);
          constOpR.getConstantComboBox().setSelectedItem(prefConst[0]);
          constOpR.setSelectedPrefix(prefConst[0]);
          final OperatorIDTuple<Operator> oidtConst = new OperatorIDTuple<Operator> (constOpR, 0);
          listOperator.addSucceedingOperator(oidtConst);
          break;

        case Scout.RULEPREDICATE:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;
            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            listOperator.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.EXTERNAL:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;
            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            listOperator.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.RULELIST:
          final ListOperator listOpR = (ListOperator) right;
          final OperatorIDTuple<Operator> oidt = new OperatorIDTuple<Operator> (listOpR, 0);
          listOperator.addSucceedingOperator(oidt);
          break;

        default:
          break;
      }

      return listOperator;
    }// End List

    // Frame
    if (left instanceof FrameOperator){
      final FrameOperator frameOperator = (FrameOperator) left;
      switch((Integer) obj.rightExpr.accept(this.scout, arg)){

        case Scout.RULEVARIABLE:
          final VariableOperator varOpR = new VariableOperator();
          varOpR.setVariable((String)right);
          final OperatorIDTuple<Operator> oidtVar = new OperatorIDTuple<Operator> (varOpR, 0);
          frameOperator.addSucceedingOperator(oidtVar);
          break;

        case Scout.CONSTANT:
          final ConstantOperator constOpR = new ConstantOperator();
          constOpR.setVisualRifEditor(this.visualRifEditor);
          constOpR.setComboBoxEntries(this.comboBoxEntries);
          final String[] prefConst = (String[]) obj.rightExpr.accept(this, arg);
          constOpR.setConstant(prefConst[1]);
          constOpR.getConstantComboBox().setSelectedItem(prefConst[0]);
          constOpR.setSelectedPrefix(prefConst[0]);
          final OperatorIDTuple<Operator> oidtConst = new OperatorIDTuple<Operator> (constOpR, 0);
          frameOperator.addSucceedingOperator(oidtConst);
          break;

        case Scout.RULEPREDICATE:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;
            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            frameOperator.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.EXTERNAL:
          if(right instanceof UnitermOperator){
            final UnitermOperator factOpR = (UnitermOperator) right;
            final OperatorIDTuple<Operator> oidtRulePred = new OperatorIDTuple<Operator> (factOpR, 0);
            frameOperator.addSucceedingOperator(oidtRulePred);
          }
          break;

        case Scout.RULELIST:
          final ListOperator listOpR = (ListOperator) right;
          final OperatorIDTuple<Operator> oidt = new OperatorIDTuple<Operator> (listOpR, 0);
          frameOperator.addSucceedingOperator(oidt);
          break;

        default:
          break;
      }
      return frameOperator;
    }// End Frame
    return null;
  }

  @Override
  public Object visit(final External obj, final Object arg) throws RIFException {
    System.out.println("visit(External obj, Object arg)");

    final LinkedList<Term> terms = new LinkedList<Term>();
    final UnitermOperator uniTerm = new UnitermOperator();
    uniTerm.setVisualRifEditor(this.visualRifEditor);
    uniTerm.setConstantComboBoxEntries(this.comboBoxEntries);
    uniTerm.setExternal(true);

    // Prefix + Name
    final String[] termPref = (String[]) obj.termName.accept(this, arg);

    // set prefix
    uniTerm.getUniTermComboBox().setSelectedItem(termPref[0]);
    uniTerm.setSelectedPrefix(termPref[0]);

    // set name
    uniTerm.setTermName(termPref[1]);

    // create Terms
    int tmp = 0;

    for (int i = 0; i < obj.termParams.size(); i++) {

      tmp =  (Integer) obj.termParams.get(i).accept(this.scout, arg);

      switch(tmp){

        case Scout.RULEVARIABLE:
          final Term termVar = uniTerm.prepareToCreateVariableTerm((String)obj.termParams.get(i).accept(this, arg));
          terms.add(termVar);
          break;

        case Scout.CONSTANT:
          String[] constArray = new String[2];
          constArray = (String[]) obj.termParams.get(i).accept(this, arg);
          final Term termConst = uniTerm.prepareToCreateConstantTerm(constArray[0],constArray[1],this.comboBoxEntries);
          terms.add(termConst);
          break;

        case Scout.RULELIST:
          final ListOperator listOperator = (ListOperator) obj.termParams.get(i).accept(this, arg);
          final Term listTerm = uniTerm.prepareToCreateListTerm(listOperator, this.comboBoxEntries);
          terms.add(listTerm);
          break;

        case Scout.RULEPREDICATE:
          final UnitermOperator unitermOperator = (UnitermOperator) obj.termParams.get(i).accept(this, arg);
          final Term unitermTerm = uniTerm.prepareToCreateUnitermTerm(unitermOperator, this.comboBoxEntries);
          terms.add(unitermTerm);
          break;

        case Scout.EXTERNAL:
          final UnitermOperator external = (UnitermOperator) obj.termParams.get(i).accept(this, arg);
          final Term externalTerm = uniTerm.prepareToCreateUnitermTerm(external, this.comboBoxEntries);
          terms.add(externalTerm);
          break;

        default:
          System.err.println("VisualRifGenerator.visit(RulePredicate obj, Object arg)");//TODO
          break;
      }
    } // end for
    uniTerm.setTerms(terms);
    return uniTerm;
  }

  @Override
  public Object visit(final RuleList obj, final Object arg) throws RIFException {
    System.out.println("visit(RuleList obj, Object arg)");

    final LinkedList<Term> terms = new LinkedList<Term>();
    final ListOperator listOperator = new ListOperator();
    listOperator.setVisualRifEditor(this.visualRifEditor);
    listOperator.setConstantComboBoxEntries(this.comboBoxEntries);
    listOperator.setOpen(obj.isOpen);

    // create Terms
    int tmp = 0;
    for (int i = 0; i < obj.getItems().size(); i++) {
      tmp =  (Integer) obj.getItems().get(i).accept(this.scout, arg);
      switch(tmp){

        case Scout.RULEVARIABLE:
          final Term termVar = listOperator.prepareToCreateVariableTerm((String)obj.getItems().get(i).accept(this, arg));
          terms.add(termVar);
          break;

        case Scout.CONSTANT:
          String[] constArray = new String[2];
          constArray = (String[]) obj.getItems().get(i).accept(this, arg);
          final Term termConst = listOperator.prepareToCreateConstantTerm(constArray[0],constArray[1],this.comboBoxEntries);
          terms.add(termConst);
          break;

        case Scout.RULELIST:
          final ListOperator listOperatorTerm = (ListOperator) obj.getItems().get(i).accept(this, arg);
          final Term listTerm = listOperator.prepareToCreateListTerm(listOperatorTerm, this.comboBoxEntries);
          terms.add(listTerm);
          break;

        case Scout.RULEPREDICATE:
          final UnitermOperator unitermOperator = (UnitermOperator) obj.getItems().get(i).accept(this, arg);
          final Term unitermTerm = listOperator.prepareToCreateUnitermTerm(unitermOperator, this.comboBoxEntries);
          terms.add(unitermTerm);
          break;

        case Scout.EXTERNAL:
          final UnitermOperator external = (UnitermOperator) obj.getItems().get(i).accept(this, arg);
          final Term externalTerm = listOperator.prepareToCreateUnitermTerm(external, this.comboBoxEntries);
          terms.add(externalTerm);
          break;

        default:
          System.err.println("VisualRifGenerator.visit(RulePredicate obj, Object arg)");//TODO
          break;
      }
    } // end for
    listOperator.setTerms(terms);
    return listOperator;
  }

  @Override
  public Object visit(final RuleVariable obj, final Object arg) throws RIFException {
    System.out.println("visit(RuleVariable obj, Object arg)");
    return obj.getLabel().substring(1);
  }

  @Override
  public Object visit(final Constant obj, final Object arg) throws RIFException {
    System.out.println("visit(Constant obj, Object arg)");

    String[] prefValueArray = new String[2];

    if ( Pattern.matches( ":.+", obj.getLabel() ) ){
      System.out.println("BASE:postfix");
    }

    if ( Pattern.matches( "<http://.+>", obj.getLabel() ) ){
      final String iri = obj.getLabel().substring(1, obj.getLabel().length()-1);
      for (final Entry<String, String> entry : this.po.getPrefixList().entrySet()) {
        if(iri.startsWith(entry.getKey())){
          prefValueArray[0] = entry.getValue();
          prefValueArray[1] = iri.substring(entry.getKey().length(), iri.length());
          return prefValueArray;
        }
      }
    } else  if ( Pattern.matches( "<.+>", obj.getLabel() ) ){
      final String iri = obj.getLabel().substring(1, obj.getLabel().length()-1);
      prefValueArray[0] = "BASE";
      prefValueArray[1] = iri;
      return prefValueArray;

    }

    if ( Pattern.matches( "\".*\"\\^\\^.+:.+",  obj.getLabel() ) ){
      String value, prefix, type; value = prefix = type = "";
      for ( final MatchResult r : findMatches( "\".*\"", obj.getLabel() ) ) {
        value = r.group().substring(1, r.group().length()-1);
      }
      for ( final MatchResult r : findMatches( "<.+#", obj.getLabel() ) ) {
        prefix = r.group().substring(1, r.group().length());
      }
      for ( final MatchResult r : findMatches( "#.+>", obj.getLabel() ) ) {
        type = r.group().substring(1, r.group().length()-1);
      }

      for (final Entry<String, String> entry : this.po.getPrefixList().entrySet()) {
        if((prefix).equals(entry.getKey())){
          prefValueArray[0] = entry.getValue()+"#"+type;
          prefValueArray[1] = value;
          return prefValueArray;
        }
      }
    }

    if ( Pattern.matches( "\".+\"", obj.getLabel() ) ){
      String value  = "";
      for ( final MatchResult r : findMatches( "\".*\"", obj.getLabel() ) ) {
        value = r.group().substring(1, r.group().length()-1);
      }
      prefValueArray[0] = "xs#string";
      prefValueArray[1] = value;
      return prefValueArray;
    }

    if ( Pattern.matches( "\\d*", obj.getLabel()) ){
      // TODO check!
    }

    if ( Pattern.matches( "\".*\"\\@.+" , obj.getLabel() ) ){
      System.out.println("languagetaggedLiteralXSPattern");
    }

    // TODO Append ConstantCombo for single constants
    // save prefValueArray
    final String[] tmp = prefValueArray;
    final int cnt = prefValueArray.length + this.comboBoxEntries.length;
    prefValueArray = new String[cnt];

    for (int j = 0; j < tmp.length; j++) {
      prefValueArray[j] = tmp[j];
    }

    for (int i = 0; i < this.comboBoxEntries.length; i++) {
      prefValueArray[i+tmp.length] = tmp[i];
    }
    return prefValueArray;
  }

  public static Iterable<MatchResult> findMatches( final String pattern, final CharSequence s ) {
    final List<MatchResult> results = new ArrayList<MatchResult>();
    for ( final Matcher m = Pattern.compile(pattern).matcher(s); m.find(); ) {
      results.add( m.toMatchResult() );
    }
    return results;
  }

  /* *************** **
   * Getter + Setter **
   * *************** */
  public String getQuery() {
    return this.query;
  }

  public void setQuery(final String query) {
    this.query = query;
  }

  public CompilationUnit getCompilationUnit() {
    return this.compilationUnit;
  }

  public void setCompilationUnit(final CompilationUnit compilationUnit) {
    this.compilationUnit = compilationUnit;
  }

  public Document getRifDocument() {
    return this.rifDocument;
  }

  public void setRifDocument(final Document rifDocument) {
    this.rifDocument = rifDocument;
  }

  public CommonCoreQueryEvaluator<Node> getEvaluator() {
    return this.evaluator;
  }

  public DocumentEditorPane getDocumentEditorPane() {
    return this.documentEditorPane;
  }

  public void setDocumentEditorPane(final DocumentEditorPane documentEditorPane) {
    this.documentEditorPane = documentEditorPane;
  }

  public VisualRifEditor getVisualRifEditor() {
    return this.visualRifEditor;
  }

  public void setVisualRifEditor(final VisualRifEditor visualRifEditor) {
    this.visualRifEditor = visualRifEditor;
  }
}
TOP

Related Classes of lupos.gui.operatorgraph.visualeditor.visualrif.parsing.VisualRifGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.