public ReteGraph loadReteModel ( IProgressMonitor monitor , String contents ) throws Throwable { if ( relayoutRequired == false ) { return diagram ; } ReteGraph newDiagram = new ReteGraph ( ) ; try { monitor . beginTask ( "Loading RETE Tree" , 100 ) ; monitor . subTask ( "Loading Rule Base" ) ; InternalKnowledgeBase ruleBase = null ; try { IResource resource = drlEditor . getResource ( ) ; ClassLoader newLoader = DroolsBuilder . class . getClassLoader ( ) ; if ( resource . getProject ( ) . getNature ( "org.eclipse.jdt.core.javanature" ) != null ) { IJavaProject project = JavaCore . create ( resource . getProject ( ) ) ; newLoader = ProjectClassLoader . getProjectClassLoader ( project ) ; } DRLInfo drlInfo = DroolsEclipsePlugin . getDefault ( ) . parseResource ( drlEditor , true , true ) ; if ( drlInfo == null ) { throw new Exception ( "Could not find DRL info" ) ; } if ( drlInfo . getBuilderErrors ( ) . length > 0 ) { throw new Exception ( drlInfo . getBuilderErrors ( ) . length + " build errors" ) ; } if ( drlInfo . getParserErrors ( ) . size ( ) > 0 ) { throw new Exception ( drlInfo . getParserErrors ( ) . size ( ) + " parser errors" ) ; } InternalKnowledgePackage pkg = drlInfo . getPackage ( ) ; RuleBaseConfiguration config = new RuleBaseConfiguration ( ) ; config . setClassLoader ( newLoader ) ; ruleBase = KnowledgeBaseFactory . newKnowledgeBase ( config ) ; if ( pkg != null ) { ruleBase . addPackage ( pkg ) ; } } catch ( Throwable t ) { DroolsEclipsePlugin . log ( t ) ; throw new Exception ( MSG_PARSE_ERROR + " " + t . getMessage ( ) ) ; } monitor . worked ( 50 ) ; if ( monitor . isCanceled ( ) ) { throw new InterruptedException ( ) ; } monitor . subTask ( "Building RETE Tree" ) ; final ReteooVisitor visitor = new ReteooVisitor ( newDiagram ) ; visitor . visitInternalKnowledgeBase ( ruleBase ) ; monitor . worked ( 30 ) ; if ( monitor . isCanceled ( ) ) { throw new InterruptedException ( ) ; } monitor . subTask ( "Calculating RETE Tree Layout" ) ; BaseVertex rootVertex = visitor . getRootVertex ( ) ; RowList rowList = ReteooLayoutFactory . calculateReteRows ( rootVertex ) ; ReteooLayoutFactory . layoutRowList ( newDiagram , rowList ) ; zeroBaseDiagram ( newDiagram ) ; monitor . worked ( 20 ) ; if ( monitor . isCanceled ( ) ) { throw new InterruptedException ( ) ; } monitor . done ( ) ; } catch ( Throwable t ) { if ( ! ( t instanceof InterruptedException ) ) { DroolsEclipsePlugin . log ( t ) ; } throw t ; } relayoutRequired = false ; return newDiagram ; }
Loads model from rule base calculates rete view and initializes diagram model .