Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2014 JBoss, by Red Hat, Inc
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.kie.workbench.common.services.refactoring.backend.server.indexing;
 
 import java.util.Map;
 import java.util.Set;
 
 import  org.drools.compiler.compiler.DrlExprParser;
 import  org.drools.compiler.lang.descr.AccessorDescr;
 import  org.drools.compiler.lang.descr.AccumulateDescr;
 import  org.drools.compiler.lang.descr.ActionDescr;
 import  org.drools.compiler.lang.descr.AndDescr;
 import  org.drools.compiler.lang.descr.AnnotationDescr;
 import  org.drools.compiler.lang.descr.AtomicExprDescr;
 import  org.drools.compiler.lang.descr.AttributeDescr;
 import  org.drools.compiler.lang.descr.BaseDescr;
 import  org.drools.compiler.lang.descr.BindingDescr;
 import  org.drools.compiler.lang.descr.CollectDescr;
 import  org.drools.compiler.lang.descr.ConstraintConnectiveDescr;
 import  org.drools.compiler.lang.descr.DeclarativeInvokerDescr;
 import  org.drools.compiler.lang.descr.ExistsDescr;
 import  org.drools.compiler.lang.descr.ExprConstraintDescr;
 import  org.drools.compiler.lang.descr.FactTemplateDescr;
 import  org.drools.compiler.lang.descr.FieldConstraintDescr;
 import  org.drools.compiler.lang.descr.FieldTemplateDescr;
 import  org.drools.compiler.lang.descr.ForallDescr;
 import  org.drools.compiler.lang.descr.FromDescr;
 import  org.drools.compiler.lang.descr.FunctionDescr;
 import  org.drools.compiler.lang.descr.FunctionImportDescr;
 import  org.drools.compiler.lang.descr.GlobalDescr;
 import  org.drools.compiler.lang.descr.ImportDescr;
 import  org.drools.compiler.lang.descr.LiteralRestrictionDescr;
 import  org.drools.compiler.lang.descr.MVELExprDescr;
 import  org.drools.compiler.lang.descr.NotDescr;
 import  org.drools.compiler.lang.descr.OrDescr;
 import  org.drools.compiler.lang.descr.PackageDescr;
 import  org.drools.compiler.lang.descr.PatternDescr;
 import  org.drools.compiler.lang.descr.PredicateDescr;
 import  org.drools.compiler.lang.descr.QueryDescr;
 import  org.drools.compiler.lang.descr.RelationalExprDescr;
 import  org.drools.compiler.lang.descr.RuleDescr;
 import  org.drools.compiler.lang.descr.TypeDeclarationDescr;
 import  org.drools.compiler.lang.descr.TypeFieldDescr;
 import  org.drools.compiler.lang.descr.WindowDeclarationDescr;
 import  org.drools.workbench.models.datamodel.oracle.ModelField;
 import  org.drools.workbench.models.datamodel.oracle.ProjectDataModelOracle;
 import  org.kie.internal.builder.conf.LanguageLevelOption;
 import  org.kie.workbench.common.services.refactoring.model.index.Rule;
 import  org.kie.workbench.common.services.refactoring.model.index.RuleAttribute;
 import  org.kie.workbench.common.services.refactoring.model.index.Type;
 import  org.kie.workbench.common.services.refactoring.model.index.TypeField;
 import  org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueFieldIndexTerm;
 import  org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueRuleAttributeIndexTerm;
 import  org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueRuleAttributeValueIndexTerm;
 import  org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueRuleIndexTerm;
 import  org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueTypeIndexTerm;
 import  org.uberfire.commons.data.Pair;
 import  org.uberfire.commons.validation.PortablePreconditions;
 
 public class PackageDescrIndexVisitor {
 
     private final ProjectDataModelOracle dmo;
     private final DefaultIndexBuilder builder;
     private final PackageDescr packageDescr;
 
     private static class PackageDescrIndexVisitorContext {
 
         private Deque<PatternDescr> patterns = new ArrayDeque<PatternDescr>();
         private Map<StringStringboundTypes = new HashMap<StringString>();
 
         void startPatternfinal PatternDescr descr ) {
             .add( descr );
         }
 
         void endPattern() {
             .pop();
         }
 
         PatternDescr getCurrentPattern() {
             return .peek();
         }
 
        void addBoundTypefinal String identifier,
                           final String fullyQualifiedClassName ) {
            .putidentifier,
                            fullyQualifiedClassName );
        }
        boolean isBoundTypefinal String identifier ) {
            return .containsKeyidentifier );
        }
        String getBoundTypefinal String identifier ) {
            return .getidentifier );
        }
    }
    public PackageDescrIndexVisitorfinal ProjectDataModelOracle dmo,
                                     final DefaultIndexBuilder builder,
                                     final PackageDescr packageDescr ) {
        this. = PortablePreconditions.checkNotNull( "dmo",
                                                       dmo );
        this. = PortablePreconditions.checkNotNull( "builder",
                                                           builder );
        this. = PortablePreconditions.checkNotNull( "packageDescr",
                                                                packageDescr );
    }
    public Set<Pair<StringString>> visit() {
        visit );
        return .build();
    }
    private void visitfinal Object descr ) {
        if ( descr instanceof AccessorDescr ) {
            visit( (AccessorDescr) descr );
        } else if ( descr instanceof AccumulateDescr ) {
            visit( (AccumulateDescr) descr );
        } else if ( descr instanceof ActionDescr ) {
            visit( (ActionDescr) descr );
        } else if ( descr instanceof AndDescr ) {
            visit( (AndDescr) descr );
        } else if ( descr instanceof AnnotationDescr ) {
            visit( (AnnotationDescr) descr );
        } else if ( descr instanceof AtomicExprDescr ) {
            visit( (AtomicExprDescr) descr );
        } else if ( descr instanceof AttributeDescr ) {
            visit( (AttributeDescr) descr );
        } else if ( descr instanceof BindingDescr ) {
            visit( (BindingDescr) descr );
        } else if ( descr instanceof CollectDescr ) {
            visit( (CollectDescr) descr );
        } else if ( descr instanceof ConstraintConnectiveDescr ) {
            visit( (ConstraintConnectiveDescr) descr );
        } else if ( descr instanceof ExistsDescr ) {
            visit( (ExistsDescr) descr );
        } else if ( descr instanceof ExprConstraintDescr ) {
            visit( (ExprConstraintDescr) descr );
        } else if ( descr instanceof FactTemplateDescr ) {
            visit( (FactTemplateDescr) descr );
        } else if ( descr instanceof FieldConstraintDescr ) {
            visit( (FieldConstraintDescr) descr );
        } else if ( descr instanceof FieldTemplateDescr ) {
            visit( (FieldTemplateDescr) descr );
        } else if ( descr instanceof ForallDescr ) {
            visit( (ForallDescr) descr );
        } else if ( descr instanceof FromDescr ) {
            visit( (FromDescr) descr );
        } else if ( descr instanceof FunctionDescr ) {
            visit( (FunctionDescr) descr );
        } else if ( descr instanceof FunctionImportDescr ) {
            visit( (FunctionImportDescr) descr );
        } else if ( descr instanceof GlobalDescr ) {
            visit( (GlobalDescr) descr );
        } else if ( descr instanceof ImportDescr ) {
            visit( (ImportDescr) descr );
        } else if ( descr instanceof LiteralRestrictionDescr ) {
            visit( (LiteralRestrictionDescr) descr );
        } else if ( descr instanceof MVELExprDescr ) {
            visit( (MVELExprDescr) descr );
        } else if ( descr instanceof NotDescr ) {
            visit( (NotDescr) descr );
        } else if ( descr instanceof OrDescr ) {
            visit( (OrDescr) descr );
        } else if ( descr instanceof PackageDescr ) {
            visit( (PackageDescr) descr );
        } else if ( descr instanceof PatternDescr ) {
            visit( (PatternDescr) descr );
        } else if ( descr instanceof PredicateDescr ) {
            visit( (PredicateDescr) descr );
        } else if ( descr instanceof QueryDescr ) {
            visit( (QueryDescr) descr );
        } else if ( descr instanceof RelationalExprDescr ) {
            visit( (RelationalExprDescr) descr );
        } else if ( descr instanceof RuleDescr ) {
            visit( (RuleDescr) descr );
        } else if ( descr instanceof TypeDeclarationDescr ) {
            visit( (TypeDeclarationDescr) descr );
        } else if ( descr instanceof TypeFieldDescr ) {
            visit( (TypeFieldDescr) descr );
        } else if ( descr instanceof WindowDeclarationDescr ) {
            visit( (WindowDeclarationDescr) descr );
        }
    }
    protected void visitfinal AccessorDescr descr ) {
        for ( DeclarativeInvokerDescr d : descr.getInvokersAsArray() ) {
            visitd );
        }
    }
    protected void visitfinal AccumulateDescr descr ) {
        visitdescr.getInputPattern() );
        for ( BaseDescr d : descr.getDescrs() ) {
            visitd );
        }
    }
    protected void visitfinal ActionDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal AndDescr descr ) {
        for ( BaseDescr baseDescr : descr.getDescrs() ) {
            visitbaseDescr );
        }
    }
    protected void visitfinal AnnotationDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal AtomicExprDescr descr ) {
        String expression = descr.getExpression();
        parseExpressionexpression );
    }
    private String parseExpressionString expression ) {
        String factType = .getCurrentPattern().getObjectType();
        String fullyQualifiedClassName = getFullyQualifiedClassName,
                                                                     factType );
        while ( expression.contains"." ) ) {
            String fieldName = expression.substring( 0,
                                                     expression.indexOf"." ) );
            if ( .isBoundTypefieldName ) ) {
                fullyQualifiedClassName = .getBoundTypefieldName );
                expression = expression.substringexpression.indexOf"." ) + 1 );
                continue;
            }
            expression = expression.substringexpression.indexOf"." ) + 1 );
            factType = addFieldfieldName,
                                 fullyQualifiedClassName );
            if ( factType != null ) {
                fullyQualifiedClassName = getFullyQualifiedClassName,
                                                                      factType );
            }
        }
        return addFieldexpression,
                         fullyQualifiedClassName );
    }
    private String addFieldfinal String fieldName,
                             final String fullyQualifiedClassName ) {
        final ModelField[] mfs = .getProjectModelFields().get( fullyQualifiedClassName );
        if ( mfs != null ) {
            for ( ModelField mf : mfs ) {
                if ( mf.getName().equals( fieldName ) ) {
                    .addGeneratornew TypeField( new ValueFieldIndexTerm( fieldName ),
                                                         new ValueTypeIndexTerm( mf.getClassName() ),
                                                         new ValueTypeIndexTerm( fullyQualifiedClassName ) ) );
                    return mf.getClassName();
                }
            }
        }
        return null;
    }
    protected void visitfinal AttributeDescr descr ) {
        .addGeneratornew RuleAttribute( new ValueRuleAttributeIndexTerm( descr.getName() ),
                                                 new ValueRuleAttributeValueIndexTerm( descr.getValue() ) ) );
    }
    protected void visitfinal BindingDescr descr ) {
        final String identifier = descr.getVariable();
        final String fullyQualifiedClassName = parseExpressiondescr.getExpression() );
        .addBoundTypeidentifier,
                              fullyQualifiedClassName );
    }
    protected void visitfinal CollectDescr descr ) {
        visitdescr.getInputPattern() );
        for ( BaseDescr d : descr.getDescrs() ) {
            visitd );
        }
    }
    protected void visitfinal ConstraintConnectiveDescr descr ) {
        for ( BaseDescr d : descr.getDescrs() ) {
            visitd );
        }
    }
    protected void visitfinal ExistsDescr descr ) {
        //ExistsDescr isn't type-safe
        for ( Object o : descr.getDescrs() ) {
            visito );
        }
    }
    protected void visitfinal ExprConstraintDescr descr ) {
        DrlExprParser parser = new DrlExprParser( LanguageLevelOption.DRL6 );
        ConstraintConnectiveDescr result = parser.parse( descr.getExpression() );
        visitresult );
    }
    protected void visitfinal FactTemplateDescr descr ) {
        for ( FieldTemplateDescr d : descr.getFields() ) {
            visitd );
        }
    }
    protected void visitfinal FieldConstraintDescr descr ) {
        //FieldConstraintDescr isn't type-safe
        for ( Object o : descr.getRestrictions() ) {
            visito );
        }
    }
    protected void visitfinal FieldTemplateDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal ForallDescr descr ) {
        visitdescr.getBasePattern() );
        for ( BaseDescr o : descr.getDescrs() ) {
            visito );
        }
    }
    protected void visitfinal FromDescr descr ) {
        for ( BaseDescr d : descr.getDescrs() ) {
            visitd );
        }
    }
    protected void visitfinal FunctionDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal FunctionImportDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal GlobalDescr descr ) {
        .addGeneratornew Type( new ValueTypeIndexTerm( getFullyQualifiedClassName,
                                                                                            descr.getType() ) ) ) );
    }
    protected void visitfinal ImportDescr descr ) {
        .addGeneratornew Type( new ValueTypeIndexTerm( descr.getTarget() ) ) );
    }
    protected void visitfinal LiteralRestrictionDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal MVELExprDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal NotDescr descr ) {
        //NotDescr isn't type-safe
        for ( Object o : descr.getDescrs() ) {
            visito );
        }
    }
    protected void visitfinal OrDescr descr ) {
        for ( BaseDescr d : descr.getDescrs() ) {
            visitd );
        }
    }
    protected void visitfinal PackageDescr descr ) {
        for ( GlobalDescr globalDescr : descr.getGlobals() ) {
            visitglobalDescr );
        }
        for ( RuleDescr ruleDescr : descr.getRules() ) {
            visitruleDescr );
        }
    }
    protected void visitfinal PatternDescr descr ) {
        .startPatterndescr );
        final String fullyQualifiedClassName = getFullyQualifiedClassName,
                                                                           descr.getObjectType() );
        if ( !( descr.getIdentifier() == null || descr.getIdentifier().isEmpty() ) ) {
            .addBoundTypedescr.getIdentifier(),
                                  fullyQualifiedClassName );
        }
        .addGeneratornew Type( new ValueTypeIndexTerm( fullyQualifiedClassName ) ) );
        visitdescr.getConstraint() );
        .endPattern();
    }
    protected void visitfinal PredicateDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal QueryDescr descr ) {
        visitdescr.getLhs() );
    }
    protected void visitfinal RelationalExprDescr descr ) {
        visitdescr.getLeft() );
        visitdescr.getRight() );
    }
    protected void visitfinal RuleDescr descr ) {
        .addGeneratornew Rule( new ValueRuleIndexTerm( descr.getName() ),
                                        ( descr.getParentName() == null ? null : new ValueRuleIndexTerm( descr.getParentName() ) ) ) );
        for ( AttributeDescr d : descr.getAttributes().values() ) {
            visitd );
        }
        visitdescr.getLhs() );
        visitConsequencedescr.getConsequence() );
        for ( Object o : descr.getNamedConsequences().values() ) {
            visitConsequenceo );
        }
    }
    protected void visitConsequencefinal Object consequence ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal TypeDeclarationDescr descr ) {
        .addGeneratornew Type( new ValueTypeIndexTerm( getFullyQualifiedClassName,
                                                                                            descr.getTypeName() ) ) ) );
        if ( !( descr.getSuperTypeName() == null || descr.getSuperTypeName().isEmpty() ) ) {
            .addGeneratornew Type( new ValueTypeIndexTerm( getFullyQualifiedClassName,
                                                                                                descr.getSuperTypeName() ) ) ) );
        }
    }
    protected void visitfinal TypeFieldDescr descr ) {
        //TODO - Not yet implemented
    }
    protected void visitfinal WindowDeclarationDescr descr ) {
        visitdescr.getPattern() );
    }
    private String getFullyQualifiedClassNamefinal PackageDescr packageDescr,
                                               final String typeName ) {
        if ( typeName.contains"." ) ) {
            return typeName;
        }
        for ( ImportDescr importDescr : packageDescr.getImports() ) {
            if ( importDescr.getTarget().endsWith( typeName ) ) {
                return importDescr.getTarget();
            }
        }
        return packageDescr.getName() + "." + typeName;
    }
New to GrepCode? Check out our FAQ X