Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright 2010 JBoss 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.drools.guvnor.server.contenthandler;
 
 /*
  * Copyright 2005 JBoss 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.
  */
 
 
 import  org.drools.guvnor.client.rpc.RuleAsset;
 import  org.drools.guvnor.client.rpc.RuleFlowContentModel;
 
 
 
 public class RuleFlowHandler extends ContentHandler
     implements
     ICompilable,
     ICanHasAttachment {
 
     public void retrieveAssetContent(RuleAsset asset,
                                      PackageItem pkg,
                                      AssetItem itemthrows SerializationException {
 
         RuleFlowProcess process = readProcess( new ByteArrayInputStream( item.getContent().getBytes() ) );
 
         if ( process != null ) {
             RuleFlowContentModel content = RuleFlowContentModelBuilder.createModel( process );
             content.setXml( item.getContent() );
             asset.content = content;
         } else if ( process == null && !"".equals( item.getContent() ) ) {
             asset.content = new RuleFlowContentModel();
             //
             // 
             // Migrate v4 ruleflows to v5
             // All we can do is put the old drools 4 rfm back as the xml so 
             // that we can at least rebuild the package with it if the
             // migrate ruleflow system property is set true.
             //
             ((RuleFlowContentModel) asset.content).setXml( item.getContent() );
         }
 
     }
 
     protected RuleFlowProcess readProcess(InputStream is) {
 
         RuleFlowProcess process = null;
 
         try {
             InputStreamReader reader = new InputStreamReader( is );
             PackageBuilderConfiguration configuration = new PackageBuilderConfiguration();
             XmlProcessReader xmlReader = new XmlProcessReader( configuration.getSemanticModules() );
 
             try {
                 process = (RuleFlowProcess) xmlReader.read( reader );
 
             } catch ( Exception e ) {
                 reader.close();
                throw new Exception( "Unable to read rule flow XML." );
            }
            reader.close();
        } catch ( Exception e ) {
            return null;
        }
        return process;
    }
    public void storeAssetContent(RuleAsset asset,
                                  AssetItem repoAssetthrows SerializationException {
        RuleFlowContentModel content = (RuleFlowContentModel) asset.content;
        // 
        // Migrate v4 ruleflows to v5
        // Added guards to check for nulls in the case where the ruleflows
        // have not been migrated from drools 4 to 5.
        //
        if ( content != null ) {
            if ( content.getXml() != null ) {
                RuleFlowProcess process = readProcess( new ByteArrayInputStream( content.getXml().getBytes() ) );
                if ( process != null ) {
                    RuleFlowProcessBuilder.updateProcess( process,
                                                          content.getNodes() );
                    XmlRuleFlowProcessDumper dumper = XmlRuleFlowProcessDumper.INSTANCE;
                    String out = dumper.dump( process );
                    repoAsset.updateContent( out );
                } else {
                    //
                    // Migrate v4 ruleflows to v5
                    // Put the old contents back as there is no updating possible
                    //
                    repoAsset.updateContent( content.getXml() );
                }
            }
        }
    }

    
The rule flow can not be built if the package name is not the same as the package that it exists in. This changes the package name.

Parameters:
item
    public void onAttachmentAdded(AssetItem item) {
        String content = item.getContent();
        if ( content != null && !content.equals( "" ) ) {
            RuleFlowProcess process = readProcess( new ByteArrayInputStream( content.getBytes() ) );
            if ( process != null ) {
                String packageName = item.getPackageName();
                String originalPackageName = process.getPackageName();
                if ( !packageName.equals( originalPackageName ) ) {
                    process.setPackageName( packageName );
                    XmlRuleFlowProcessDumper dumper = XmlRuleFlowProcessDumper.INSTANCE;
                    String out = dumper.dump( process );
                    item.updateContent( out );
                    item.checkin( "Changed rule flow package from " + originalPackageName + " to " + packageName );
                }
            }
        }
    }
    public void onAttachmentRemoved(AssetItem itemthrows IOException {
        // Nothing to do when this asset type is removed.
    }
    public void compile(BRMSPackageBuilder builder,
                        AssetItem asset,
                        ErrorLogger loggerthrows DroolsParserException,
                                           IOException {
        InputStream ins = asset.getBinaryContentAttachment();
        if ( ins != null ) {
            builder.addRuleFlow( new InputStreamReader( asset.getBinaryContentAttachment() ) );
        }
    }
New to GrepCode? Check out our FAQ X