Package org.kie.builder.impl

Source Code of org.kie.builder.impl.KieBuilderSetImpl$DummyResource

package org.kie.builder.impl;

import org.drools.builder.impl.KnowledgeBuilderImpl;
import org.drools.compiler.PackageBuilder;
import org.drools.io.impl.BaseResource;
import org.kie.KieServices;
import org.kie.builder.CompositeKnowledgeBuilder;
import org.kie.builder.IncrementalResults;
import org.kie.builder.model.KieBaseModel;
import org.kie.builder.KieBuilderSet;
import org.kie.builder.KnowledgeBuilder;
import org.kie.builder.KnowledgeBuilderError;
import org.kie.io.Resource;
import org.kie.io.ResourceConfiguration;
import org.kie.io.ResourceType;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.net.URL;
import java.util.Collection;

import static org.kie.builder.impl.AbstractKieModule.getResourceConfiguration;
import static org.kie.builder.impl.KieBuilderImpl.filterFileInKBase;

public class KieBuilderSetImpl implements KieBuilderSet {

    private final KieBuilderImpl kieBuilder;
    private final String[] files;

    public KieBuilderSetImpl(KieBuilderImpl kieBuilder, String[] files) {
        this.kieBuilder = kieBuilder;
        this.files = files;
    }

    @Override
    public IncrementalResults build() {
        for (String file : files) {
            kieBuilder.copySourceToTarget(file);
        }
        return buildChanges();
    }

    private IncrementalResults buildChanges() {
        IncrementalResultsImpl results = new IncrementalResultsImpl();

        InternalKieModule kieModule = (InternalKieModule) kieBuilder.getKieModuleIgnoringErrors();
        for (KieBaseModel kBaseModel : kieModule.getKieModuleModel().getKieBaseModels().values()) {
            KnowledgeBuilder kBuilder = kieModule.getKnowledgeBuilderForKieBase( kBaseModel.getName() );
            for ( KnowledgeBuilderError error : kBuilder.getErrors() ) {
                results.removeMessage( error );
            }

            CompositeKnowledgeBuilder ckbuilder = kBuilder.batch();

            PackageBuilder pkgBuilder = ((KnowledgeBuilderImpl)kBuilder).getPackageBuilder();
            boolean modified = false;
            for (String file : files) {
                String resourceName = file.startsWith(KieBuilderImpl.RESOURCES_ROOT) ?
                        file.substring(KieBuilderImpl.RESOURCES_ROOT.length()) :
                        file;

                // remove the objects generated by the old Resource
                modified = pkgBuilder.removeObjectsGeneratedFromResource(new DummyResource(resourceName)) || modified;

                // add the modified Resource
                modified = addResource(ckbuilder, kBaseModel, kieModule, resourceName) || modified;
            }

            if (modified) {
                ckbuilder.build();
                if ( kBuilder.hasErrors() ) {
                    for ( KnowledgeBuilderError error : kBuilder.getErrors() ) {
                        results.addMessage( error );
                    }
                    kBuilder.undo();
                } else {
                    KieServices.Factory.get().getRepository().addKieModule( kieModule );
                }
            }
        }
        return results;
    }

    private boolean addResource( CompositeKnowledgeBuilder ckbuilder,
                                 KieBaseModel kieBaseModel,
                                 InternalKieModule kieModule,
                                 String resourceName ) {
        byte[] bytes = kieModule.getBytes(resourceName);
        if (bytes == null) {
            return false;
        }
        Resource resource = KieServices.Factory.get().getResources().newByteArrayResource(bytes).setSourcePath(resourceName);

        if ( filterFileInKBase(kieBaseModel, resourceName) ) {
            ResourceConfiguration conf = getResourceConfiguration(kieModule, resourceName);
            if ( conf == null ) {
                ckbuilder.add( resource, ResourceType.determineResourceType(resourceName) );
            } else {
                ckbuilder.add( resource, ResourceType.determineResourceType(resourceName), conf );
            }
            return true;
        }
        return false;
    }

    public static class DummyResource extends BaseResource {
        public DummyResource(String resourceName) {
            setSourcePath(resourceName);
        }

        @Override
        public URL getURL() throws IOException {
            throw new UnsupportedOperationException("org.kie.builder.impl.KieBuilderSetImpl.DummyResource.getURL -> TODO");
        }

        @Override
        public boolean hasURL() {
            throw new UnsupportedOperationException("org.kie.builder.impl.KieBuilderSetImpl.DummyResource.hasURL -> TODO");
        }

        @Override
        public boolean isDirectory() {
            throw new UnsupportedOperationException("org.kie.builder.impl.KieBuilderSetImpl.DummyResource.isDirectory -> TODO");
        }

        @Override
        public Collection<Resource> listResources() {
            throw new UnsupportedOperationException("org.kie.builder.impl.KieBuilderSetImpl.DummyResource.listResources -> TODO");
        }

        @Override
        public long getLastModified() {
            throw new UnsupportedOperationException("org.kie.builder.impl.KieBuilderSetImpl.DummyResource.getLastModified -> TODO");
        }

        @Override
        public long getLastRead() {
            throw new UnsupportedOperationException("org.kie.builder.impl.KieBuilderSetImpl.DummyResource.getLastRead -> TODO");
        }

        @Override
        public InputStream getInputStream() throws IOException {
            throw new UnsupportedOperationException("org.kie.builder.impl.KieBuilderSetImpl.DummyResource.getInputStream -> TODO");
        }

        @Override
        public Reader getReader() throws IOException {
            throw new UnsupportedOperationException("org.kie.builder.impl.KieBuilderSetImpl.DummyResource.getReader -> TODO");
        }
    }
}
TOP

Related Classes of org.kie.builder.impl.KieBuilderSetImpl$DummyResource

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.