Package org.drools.guvnor.server.builder

Source Code of org.drools.guvnor.server.builder.DSLLoader

package org.drools.guvnor.server.builder;

import org.drools.guvnor.client.common.AssetFormats;
import org.drools.lang.dsl.DSLMappingParseException;
import org.drools.lang.dsl.DSLTokenizedMappingFile;
import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
import org.drools.repository.RulesRepositoryException;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class DSLLoader {

    public static List<DSLTokenizedMappingFile> loadDSLMappingFiles(PackageItem packageItem) {
        return loadDSLMappingFiles(packageItem, new BRMSPackageBuilder.DSLErrorEvent() {
            public void recordError(AssetItem asset,
                                    String message) {
                // ignore at this point...
            }
        });
    }

    public static List<DSLTokenizedMappingFile> loadDSLMappingFiles(PackageItem packageItem,
                                                                    BRMSPackageBuilder.DSLErrorEvent dslErrorEvent) {
        return loadDSLMappingFiles(packageItem.listAssetsWithVersionsSpecifiedByDependenciesByFormat(AssetFormats.DSL), dslErrorEvent);
    }

    static List<DSLTokenizedMappingFile> loadDSLMappingFiles(Iterator<AssetItem> assetItemIterator, BRMSPackageBuilder.DSLErrorEvent dslErrorEvent) {
        List<DSLTokenizedMappingFile> result = new ArrayList<DSLTokenizedMappingFile>();

        while (assetItemIterator.hasNext()) {
            addAsset(dslErrorEvent, result, assetItemIterator.next());
        }

        return result;
    }

    private static void addAsset(BRMSPackageBuilder.DSLErrorEvent dslErrorEvent,
                                 List<DSLTokenizedMappingFile> result,
                                 AssetItem assetItem) {
        if (!assetItem.getDisabled()) {
            DSLTokenizedMappingFile file = new DSLTokenizedMappingFile();
            try {
                if (file.parseAndLoad(new StringReader(assetItem.getContent()))) {
                    result.add(file);
                } else {
                    logErrors(dslErrorEvent, assetItem, file);
                }

            } catch (IOException e) {
                throw new RulesRepositoryException(e);
            }
        }
    }

    private static void logErrors(BRMSPackageBuilder.DSLErrorEvent dslErrorEvent,
                                  AssetItem assetItem,
                                  DSLTokenizedMappingFile file) {
        for ( Object o : file.getErrors() ) {

            if ( o instanceof DSLMappingParseException ) {
                DSLMappingParseException dslMappingParseException = (DSLMappingParseException) o;
                dslErrorEvent.recordError( assetItem,
                                           "Line " + dslMappingParseException.getLine() + " : " + dslMappingParseException.getMessage() );
            } else if ( o instanceof Exception ) {
                Exception excp = (Exception) o;
                dslErrorEvent.recordError( assetItem,
                                           "Exception " + excp.getClass() + " " + excp.getMessage() + " " + excp.getCause() );
            } else {
                dslErrorEvent.recordError( assetItem,
                                           "Uncategorized error " + o );
            }
        }
    }
}
TOP

Related Classes of org.drools.guvnor.server.builder.DSLLoader

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.