Package org.drools.guvnor.server.files

Source Code of org.drools.guvnor.server.files.GuvnorDroolsDocsBuilder

/**
* 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.files;

import java.text.Format;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.drools.compiler.DroolsParserException;
import org.drools.doc.DroolsDocsBuilder;
import org.drools.guvnor.client.common.AssetFormats;
import org.drools.guvnor.server.ServiceImplementation;
import org.drools.guvnor.server.builder.BRMSPackageBuilder;
import org.drools.guvnor.server.contenthandler.ContentHandler;
import org.drools.guvnor.server.contenthandler.ContentManager;
import org.drools.guvnor.server.contenthandler.IRuleAsset;
import org.drools.repository.AssetItem;
import org.drools.repository.CategoryItem;
import org.drools.repository.PackageItem;
import org.drools.repository.VersionableItem;
import org.drools.verifier.misc.DrlPackageParser;
import org.drools.verifier.misc.DrlRuleParser;

/**
*
* @author Toni Rikkola
*
*/
public class GuvnorDroolsDocsBuilder extends DroolsDocsBuilder {

    private static List<String> formats = new ArrayList<String>();

    static {
        formats.add( AssetFormats.DRL );
        formats.add( AssetFormats.BUSINESS_RULE );
    }

    private GuvnorDroolsDocsBuilder(PackageItem packageItem) throws DroolsParserException {
        super( createDrlPackageData( packageItem ) );
    }

    protected static DrlPackageParser createDrlPackageData(PackageItem packageItem) {

        List<DrlRuleParser> rules = new ArrayList<DrlRuleParser>();

        // Get And Fill Rule Data
        Iterator<AssetItem> assets = packageItem.getAssets();
        while ( assets.hasNext() ) {
            AssetItem assetItem = (AssetItem) assets.next();

            if ( formats.contains( assetItem.getFormat() ) && !assetItem.getDisabled() && !assetItem.isArchived() ) {
                String drl = getDRL( assetItem );
                if ( drl != null ) {
                    DrlRuleParser ruleData = DrlRuleParser.findRulesDataFromDrl( drl ).get( 0 );

                    // Add info about categories
                    List<String> categories = new ArrayList<String>();
                    for ( CategoryItem ci : assetItem.getCategories() ) {
                        categories.add( ci.getName() );
                    }

                    ruleData.getOtherInformation().put( "Categories",
                                                   categories );
                    ruleData.getMetadata().addAll( createMetaData( assetItem ) );

                    rules.add( ruleData );
                }
            }
        }

        String header = ServiceImplementation.getDroolsHeader( packageItem );
        List<String> globals = DrlPackageParser.findGlobals( header );

        // Get And Fill Package Data
        return new DrlPackageParser( packageItem.getName(),
                                   packageItem.getDescription(),
                                   rules,
                                   globals,
                                   createMetaData( packageItem ),
                                   new HashMap<String, List<String>>() );

    }

    private static List<String> createMetaData(VersionableItem versionableItem) {
        List<String> list = new ArrayList<String>();

        Format formatter = getFormatter();

        list.add( "Creator :" + versionableItem.getCreator() );
        list.add( "Created date :" + formatter.format( versionableItem.getCreatedDate().getTime() ) );
        list.add( "Last contributor :" + versionableItem.getLastContributor() );
        list.add( "Last modified :" + formatter.format( versionableItem.getLastModified().getTime() ) );

        return list;
    }

    public static GuvnorDroolsDocsBuilder getInstance(PackageItem packageItem) throws DroolsParserException {
        return new GuvnorDroolsDocsBuilder( packageItem );
    }

    private static String getDRL(AssetItem item) {
        ContentHandler handler = ContentManager.getHandler( item.getFormat() );
        StringBuffer buf = new StringBuffer();
        if ( handler.isRuleAsset() ) {

            BRMSPackageBuilder builder = new BRMSPackageBuilder();
            // now we load up the DSL files
            builder.setDSLFiles( BRMSPackageBuilder.getDSLMappingFiles( item.getPackage(),
                                                                        new BRMSPackageBuilder.DSLErrorEvent() {
                                                                            public void recordError(AssetItem asset,
                                                                                                    String message) {
                                                                                // ignore at this point...
                                                                            }
                                                                        } ) );
            ((IRuleAsset) handler).assembleDRL( builder,
                                                item,
                                                buf );
        } else {
            return null;
        }

        return buf.toString();
    }
}
TOP

Related Classes of org.drools.guvnor.server.files.GuvnorDroolsDocsBuilder

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.