Skip to content

Commit

Permalink
[DROOLS-351] obey ResourceType when declared
Browse files Browse the repository at this point in the history
  • Loading branch information
mariofusco committed Nov 25, 2013
1 parent e51cf2c commit de4d4a6
Show file tree
Hide file tree
Showing 13 changed files with 172 additions and 65 deletions.
Expand Up @@ -438,8 +438,8 @@ public void addPackageFromDrl(final Reader reader) throws DroolsParserException,
* @throws IOException
*/
public void addPackageFromDrl(final Reader reader,
final Resource sourceResource) throws DroolsParserException,
IOException {
final Resource sourceResource) throws DroolsParserException,
IOException {
this.resource = sourceResource;
final DrlParser parser = new DrlParser(configuration.getLanguageLevel());
final PackageDescr pkg = parser.parse(sourceResource, reader);
Expand All @@ -455,17 +455,19 @@ public void addPackageFromDrl(final Reader reader,
}

public void addPackageFromDecisionTable(Resource resource,
ResourceConfiguration configuration) throws DroolsParserException,
IOException {
ResourceConfiguration configuration) throws DroolsParserException,
IOException {
this.resource = resource;
addPackage(decisionTableToPackageDescr(resource, configuration));
this.resource = null;
}

PackageDescr decisionTableToPackageDescr(Resource resource,
ResourceConfiguration configuration) throws DroolsParserException,
IOException {
DecisionTableConfiguration dtableConfiguration = (DecisionTableConfiguration) configuration;
ResourceConfiguration configuration) throws DroolsParserException,
IOException {
DecisionTableConfiguration dtableConfiguration = configuration instanceof DecisionTableConfiguration ?
(DecisionTableConfiguration) configuration :
null;
String string = DecisionTableFactory.loadFromInputStream(resource.getInputStream(), dtableConfiguration);

DrlParser parser = new DrlParser(this.configuration.getLanguageLevel());
Expand All @@ -478,17 +480,19 @@ PackageDescr decisionTableToPackageDescr(Resource resource,
}

public void addPackageFromScoreCard(Resource resource,
ResourceConfiguration configuration) throws DroolsParserException,
IOException {
ResourceConfiguration configuration) throws DroolsParserException,
IOException {
this.resource = resource;
addPackage(scoreCardToPackageDescr(resource, configuration));
this.resource = null;
}

PackageDescr scoreCardToPackageDescr(Resource resource,
ResourceConfiguration configuration) throws DroolsParserException,
IOException {
ScoreCardConfiguration scardConfiguration = (ScoreCardConfiguration) configuration;
ResourceConfiguration configuration) throws DroolsParserException,
IOException {
ScoreCardConfiguration scardConfiguration = configuration instanceof ScoreCardConfiguration ?
(ScoreCardConfiguration) configuration :
null;
String string = ScoreCardFactory.loadFromInputStream(resource.getInputStream(), scardConfiguration);

DrlParser parser = new DrlParser(this.configuration.getLanguageLevel());
Expand All @@ -501,7 +505,7 @@ PackageDescr scoreCardToPackageDescr(Resource resource,
}

public void addPackageFromDrl(Resource resource) throws DroolsParserException,
IOException {
IOException {
this.resource = resource;
addPackage(drlToPackageDescr(resource));
this.resource = null;
Expand Down Expand Up @@ -754,8 +758,8 @@ public void addKnowledgeResource(Resource resource,
}

void addPackageForExternalType(Resource resource,
ResourceType type,
ResourceConfiguration configuration) throws Exception {
ResourceType type,
ResourceConfiguration configuration) throws Exception {
ResourceTypeBuilder builder = ResourceTypeBuilderRegistry.getInstance().getResourceTypeBuilder(type);
if (builder != null) {
builder.setPackageBuilder(this);
Expand All @@ -768,8 +772,8 @@ void addPackageForExternalType(Resource resource,
}

public void addPackageFromPMML(Resource resource,
ResourceType type,
ResourceConfiguration configuration) throws Exception {
ResourceType type,
ResourceConfiguration configuration) throws Exception {
PMMLCompiler compiler = getPMMLCompiler();
if (compiler != null) {
if (compiler.getResults().isEmpty()) {
Expand All @@ -789,8 +793,8 @@ public void addPackageFromPMML(Resource resource,
}

PackageDescr pmmlModelToPackageDescr(PMMLCompiler compiler,
Resource resource) throws DroolsParserException,
IOException {
Resource resource) throws DroolsParserException,
IOException {
String theory = compiler.compile(resource.getInputStream(),
getPackageRegistry());

Expand All @@ -811,7 +815,7 @@ PackageDescr pmmlModelToPackageDescr(PMMLCompiler compiler,
}

void addPackageFromXSD(Resource resource,
JaxbConfigurationImpl configuration) throws IOException {
JaxbConfigurationImpl configuration) throws IOException {
String[] classes = DroolsJaxbHelperProviderImpl.addXsdModel(resource,
this,
configuration.getXjcOpts(),
Expand Down
Expand Up @@ -9,7 +9,6 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
Expand All @@ -22,9 +21,9 @@
import org.drools.compiler.kproject.ReleaseIdImpl;
import org.drools.compiler.kproject.models.KieBaseModelImpl;
import org.drools.compiler.kproject.models.KieModuleModelImpl;
import org.drools.compiler.kproject.xml.MinimalPomParser;
import org.drools.compiler.kproject.xml.PomModel;
import org.drools.core.builder.conf.impl.DecisionTableConfigurationImpl;
import org.drools.core.builder.conf.impl.ResourceConfigurationImpl;
import org.drools.core.rule.KieModuleMetaInfo;
import org.drools.core.rule.TypeMetaInfo;
import org.drools.core.util.StringUtils;
Expand All @@ -40,7 +39,6 @@
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderError;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.builder.ResourceChange;
import org.kie.internal.builder.ResourceChangeSet;
import org.kie.internal.definition.KnowledgePackage;
import org.kie.internal.io.ResourceFactory;
Expand Down Expand Up @@ -71,6 +69,8 @@ public abstract class AbstractKieModule

private Map<String, TypeMetaInfo> typesMetaInfo;

private Map<String, ResourceConfiguration> resourceConfigurationCache = new HashMap<String, ResourceConfiguration>();

protected PomModel pomModel;

public AbstractKieModule(ReleaseId releaseId, KieModuleModel kModuleModel) {
Expand Down Expand Up @@ -239,28 +239,31 @@ private static void getTransitiveIncludes(KieProject kieProject, KieBaseModelImp
}

private static void addFiles(Map<String, InternalKieModule> assets,
KieBaseModel kieBaseModel,
InternalKieModule kieModule) {
KieBaseModel kieBaseModel,
InternalKieModule kieModule) {
for (String fileName : kieModule.getFileNames()) {
if (filterFileInKBase(kieBaseModel, fileName) && !fileName.endsWith(".properties")) {
if (!fileName.endsWith(".properties") && filterFileInKBase(kieModule, kieBaseModel, fileName)) {
assets.put(fileName, kieModule);
}
}
}

public static boolean addFile(CompositeKnowledgeBuilder ckbuilder,
InternalKieModule kieModule,
String fileName) {
ResourceConfiguration conf = getResourceConfiguration(kieModule, fileName);
InternalKieModule kieModule,
String fileName) {
ResourceConfiguration conf = kieModule.getResourceConfiguration(fileName);
Resource resource = kieModule.getResource(fileName);
if (resource != null) {
if (conf == null) {
ckbuilder.add(resource,
ResourceType.determineResourceType(fileName));
ResourceType.determineResourceType(fileName));
} else {
ResourceType confType = conf instanceof ResourceConfigurationImpl ?
((ResourceConfigurationImpl)conf).getResourceType() :
null;
ckbuilder.add(resource,
ResourceType.determineResourceType(fileName),
conf);
confType != null ? confType : ResourceType.determineResourceType(fileName),
conf);
}
return true;
}
Expand All @@ -275,13 +278,16 @@ public Resource getResource(String fileName) {
return null;
}

public static ResourceConfiguration getResourceConfiguration(InternalKieModule kieModule, String fileName) {
ResourceConfiguration conf = null;
if (kieModule.isAvailable(fileName + ".properties")) {
public ResourceConfiguration getResourceConfiguration(String fileName) {
ResourceConfiguration conf = resourceConfigurationCache.get(fileName);
if (conf != null) {
return conf;
}
if (isAvailable(fileName + ".properties")) {
// configuration file available
Properties prop = new Properties();
try {
prop.load(new ByteArrayInputStream(kieModule.getBytes(fileName + ".properties")));
prop.load(new ByteArrayInputStream(getBytes(fileName + ".properties")));
} catch (IOException e) {
log.error("Error loading resource configuration from file: " + fileName + ".properties");
}
Expand All @@ -294,6 +300,7 @@ public static ResourceConfiguration getResourceConfiguration(InternalKieModule k
conf = ResourceTypeImpl.fromProperties(prop);
}
}
resourceConfigurationCache.put(fileName, conf);
return conf;
}

Expand Down Expand Up @@ -356,10 +363,10 @@ private byte[] getPomXml() {
}

public static boolean updateResource(CompositeKnowledgeBuilder ckbuilder,
InternalKieModule kieModule,
String resourceName,
ResourceChangeSet changes) {
ResourceConfiguration conf = getResourceConfiguration(kieModule, resourceName);
InternalKieModule kieModule,
String resourceName,
ResourceChangeSet changes) {
ResourceConfiguration conf = kieModule.getResourceConfiguration(resourceName);
Resource resource = kieModule.getResource(resourceName);
if (resource != null) {
if (conf == null) {
Expand Down
Expand Up @@ -10,6 +10,7 @@
import org.kie.api.builder.Results;
import org.kie.api.builder.model.KieModuleModel;
import org.kie.api.io.Resource;
import org.kie.api.io.ResourceConfiguration;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.definition.KnowledgePackage;

Expand All @@ -30,6 +31,8 @@ public interface InternalKieModule extends KieModule {
byte[] getBytes( );

Resource getResource( String fileName );

ResourceConfiguration getResourceConfiguration( String fileName );

Map<ReleaseId, InternalKieModule> getKieDependencies();

Expand Down
Expand Up @@ -33,6 +33,7 @@
import org.drools.compiler.kproject.ReleaseIdImpl;
import org.drools.compiler.kproject.models.KieModuleModelImpl;
import org.drools.compiler.kproject.xml.PomModel;
import org.drools.core.builder.conf.impl.ResourceConfigurationImpl;
import org.drools.core.factmodel.ClassDefinition;
import org.drools.core.rule.JavaDialectRuntimeData;
import org.drools.core.rule.KieModuleMetaInfo;
Expand All @@ -54,6 +55,8 @@
import org.kie.api.definition.rule.Rule;
import org.kie.api.definition.type.FactType;
import org.kie.api.io.Resource;
import org.kie.api.io.ResourceConfiguration;
import org.kie.api.io.ResourceType;
import org.kie.internal.KnowledgeBaseFactory;
import org.kie.internal.builder.InternalKieBuilder;
import org.kie.internal.builder.KieBuilderSet;
Expand Down Expand Up @@ -98,7 +101,7 @@ public KieBuilderImpl(KieFileSystem kieFileSystem) {
}

public KieBuilder setDependencies(KieModule... dependencies) {
this.kieDependencies = Arrays.asList( dependencies );
this.kieDependencies = Arrays.asList(dependencies);
return this;
}

Expand Down Expand Up @@ -259,7 +262,7 @@ private KModuleCache.Builder createCacheBuilder() {
private CompilationData.Builder createCompilationData() {
// Create compilation data cache
CompilationData.Builder _cdata = KieModuleCache.CompilationData.newBuilder()
.setDialect( "java" );
.setDialect("java");
return _cdata;
}

Expand Down Expand Up @@ -369,9 +372,14 @@ private void addMetaInfBuilder() {
}
}

public static boolean filterFileInKBase(KieBaseModel kieBase,
String fileName) {
return FormatsManager.isKieExtension( fileName ) && isFileInKieBase( kieBase, fileName );
private static ResourceType getResourceType(InternalKieModule kieModule, String fileName) {
ResourceConfiguration conf = kieModule.getResourceConfiguration(fileName);
return conf instanceof ResourceConfigurationImpl ? ((ResourceConfigurationImpl)conf).getResourceType() : null;
}

public static boolean filterFileInKBase(InternalKieModule kieModule, KieBaseModel kieBase, String fileName) {
return isFileInKieBase( kieBase, fileName ) && (
FormatsManager.isKieExtension( fileName ) || getResourceType(kieModule, fileName) != null);
}

private static boolean isFileInKieBase(KieBaseModel kieBase,
Expand Down
Expand Up @@ -155,8 +155,8 @@ private boolean addResource( CompositeKnowledgeBuilder ckbuilder,
}
Resource resource = KieServices.Factory.get().getResources().newByteArrayResource(bytes).setSourcePath(resourceName);

if ( filterFileInKBase(kieBaseModel, resourceName) ) {
ResourceConfiguration conf = AbstractKieModule.getResourceConfiguration(kieModule, resourceName);
if ( filterFileInKBase(kieModule, kieBaseModel, resourceName) ) {
ResourceConfiguration conf = kieModule.getResourceConfiguration(resourceName);
if ( conf == null ) {
ckbuilder.add( resource, ResourceType.determineResourceType(resourceName) );
} else {
Expand Down
@@ -1,6 +1,7 @@
package org.drools.compiler.kie.builder.impl;

import static org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages;
import static org.drools.compiler.kie.builder.impl.KieBuilderImpl.filterFileInKBase;
import static org.drools.compiler.kie.util.CDIHelper.wireListnersAndWIHs;

import java.util.ArrayList;
Expand Down Expand Up @@ -114,13 +115,13 @@ public void updateToVersion(ReleaseId newReleaseId) {
int fileCount = 0;

// then update and add new resources
for( ResourceChangeSet rcs : cs.getChanges().values() ) {
if( ! rcs.getChangeType().equals( ChangeType.REMOVED ) ) {
for ( ResourceChangeSet rcs : cs.getChanges().values() ) {
if ( ! rcs.getChangeType().equals( ChangeType.REMOVED ) ) {
String resourceName = rcs.getResourceName();
if( KieBuilderImpl.filterFileInKBase( kieBaseModel, resourceName ) && ! resourceName.endsWith( ".properties" ) ) {
if ( !resourceName.endsWith( ".properties" ) && filterFileInKBase(newKM, kieBaseModel, resourceName) ) {
Resource resource = currentKM.getResource( rcs.getResourceName() );
List<ResourceChange> changes = rcs.getChanges();
if( ! changes.isEmpty() ) {
if ( ! changes.isEmpty() ) {
// we need to deal with individual parts of the resource
fileCount += AbstractKieModule.updateResource( ckbuilder,
newKM,
Expand Down Expand Up @@ -154,7 +155,7 @@ public void updateToVersion(ReleaseId newReleaseId) {
for ( ResourceChangeSet rcs : cs.getChanges().values() ) {
if ( rcs.getChangeType().equals( ChangeType.REMOVED ) ) {
String resourceName = rcs.getResourceName();
if ( KieBuilderImpl.filterFileInKBase( kieBaseModel, resourceName ) && ! resourceName.endsWith( ".properties" ) ) {
if ( !resourceName.endsWith( ".properties" ) && filterFileInKBase(newKM, kieBaseModel, resourceName) ) {
pkgbuilder.removeObjectsGeneratedFromResource( currentKM.getResource( resourceName ) );
}
}
Expand Down
Expand Up @@ -57,7 +57,6 @@ public void testXmlParser() throws SAXException,
assertEquals( 2,
changeSet.getResourcesAdded().size() );
UrlResource resource = ( UrlResource ) ((List)changeSet.getResourcesAdded()).get( 0 );
assertNull( resource.getConfiguration() );
assertEquals( "http://www.domain.com/test.drl",
resource.getURL().toString() );
assertEquals( ResourceType.DRL,
Expand Down Expand Up @@ -119,7 +118,6 @@ public void testBasicAuthentication() throws SAXException,
assertEquals( 1,
changeSet.getResourcesAdded().size() );
UrlResource resource = ( UrlResource ) ((List)changeSet.getResourcesAdded()).get( 0 );
assertNull( resource.getConfiguration() );
assertEquals( "http://localhost:8081/jboss-brms/org.kie.guvnor.Guvnor/package/defaultPackage/LATEST",
resource.getURL().toString() );
assertEquals( "enabled", resource.getBasicAuthentication() );
Expand Down

0 comments on commit de4d4a6

Please sign in to comment.