public Builder clone() { final KieFileSystem kieFileSystemClone = kieFileSystemClone(); final KieBuilderImpl kieBuilder = kieBuilderClone(kieFileSystemClone); return new Builder(project, ioService, moduleService, importsService, buildValidationHelpers, dependenciesClassLoaderCache, pomModelCache, packageNameWhiteListService, classFilter, kieBuilder, kieFileSystemClone); }
@Override public KieContainer getKieContainer( ) { return builder.getKieContainer(); }
public IncrementalBuildResults applyBatchResourceChanges(final Module module, final Map<Path, Collection<ResourceChange>> changes) { IncrementalBuildResults results = new IncrementalBuildResults(); try { if (module == null) { return results; } final Builder builder = cache.assertBuilder(module); if (!builder.isBuilt()) { throw new IllegalStateException("Incremental Build requires a full build be completed first."); } else { results = builder.applyBatchResourceChanges(changes); } return results; } catch (Exception e) { logger.error(e.getMessage(), e); throw ExceptionUtilities.handleException(e); } }
@Test public void buildDetectsFilesWithSpecialCharacters() throws Exception { LRUPomModelCache pomModelCache = getReference(LRUPomModelCache.class); URL url = this.getClass().getResource("/ModuleBuildTestFileWithSpecialCharacter"); SimpleFileSystemProvider p = new SimpleFileSystemProvider(); org.uberfire.java.nio.file.Path path = p.getPath(url.toURI()); final Module module = moduleService.resolveModule(Paths.convert(path)); final Builder builder = new Builder(module, ioService, moduleService, importsService, new ArrayList<>(), dependenciesClassLoaderCache, pomModelCache, getPackageNameWhiteListService(), alwaysTrue); BuildResults buildResults = builder.build(); List<BuildMessage> errorMessages = buildResults.getErrorMessages(); assertEquals(2, errorMessages.size()); assertTrue(errorMessages.get(0).getText().contains("mismatched input 'Build' expecting one of the following tokens:")); }
private List<ValidationMessage> doValidation(final Path resourcePath, final InputStream inputStream) throws NoModuleException { final ValidatorResultBuilder resultBuilder = new ValidatorResultBuilder(); final Module module = module(resourcePath); final org.uberfire.java.nio.file.Path nioResourcePath = Paths.convert(resourcePath); //Incremental Build does not support Java classes if (isIncrementalBuildPossible(resourcePath)) { //Build the Builder from the cache so it's "built" state can be preserved for re-use BuildInfo buildInfo = buildInfoService.getBuildInfo(module); final Builder clone = ((BuildInfoImpl) buildInfo).getBuilder().clone(); //First delete resource otherwise if the resource already had errors following builder.build() //the incremental compilation will not report any additional errors and the resource will be //considered valid. clone.deleteResource(nioResourcePath); final IncrementalBuildResults incrementalBuildResults = clone.updateResource(nioResourcePath, inputStream); resultBuilder.add(incrementalBuildResults.getAddedMessages()); } else { Builder builder = builderCache.assertBuilder(module(resourcePath)); final Builder clone = builder.clone(); resultBuilder.add(clone.build(nioResourcePath, inputStream).getMessages()); } return resultBuilder.results(); }
@Test public void testBuilderFixForBrokenKModule() throws Exception { LRUPomModelCache pomModelCache = getReference(LRUPomModelCache.class); SimpleFileSystemProvider provider = new SimpleFileSystemProvider(); org.uberfire.java.nio.file.Path path = provider.getPath(this.getClass().getResource("/BuilderExampleBrokenSyntax").toURI()); final Module module = moduleService.resolveModule(Paths.convert(path)); final Builder builder = new Builder(module, ioService, moduleService, importsService, new ArrayList<>(), dependenciesClassLoaderCache, pomModelCache, mock(PackageNameWhiteListService.class), alwaysTrue); assertNull(builder.getKieContainer()); builder.deleteResource(provider.getPath(this.getClass().getResource(File.separatorChar + "BuilderExampleBrokenSyntax" + File.separatorChar + "src" + File.separatorChar + "main" + File.separatorChar + "resources" + File.separatorChar + "rule1.drl" ).toURI())); assertNotNull(builder.getKieContainer()); }
final Builder builder = new Builder(module, ioService, moduleService, alwaysTrue); final BuildResults results = builder.build(); final KieModuleMetaData metaData = KieModuleMetaData.Factory.newKieModuleMetaData(builder.getKieModule());
private void checkAFullBuildHasBeenPerformed() { if (!isBuilt()) { throw new IllegalStateException("A full build needs to be performed before any incremental operations."); } }
@Test public void testBuilderSimpleKModule() throws Exception { LRUPomModelCache pomModelCache = getReference(LRUPomModelCache.class); URL url = this.getClass().getResource("/GuvnorM2RepoDependencyExample1"); SimpleFileSystemProvider p = new SimpleFileSystemProvider(); org.uberfire.java.nio.file.Path path = p.getPath(url.toURI()); final Module module = moduleService.resolveModule(Paths.convert(path)); final Builder builder = new Builder(module, ioService, moduleService, importsService, new ArrayList<>(), dependenciesClassLoaderCache, pomModelCache, getPackageNameWhiteListService(), alwaysTrue); assertNotNull(builder.getKieContainer()); }
private IncrementalBuildResults addResource(final Path resource, final InputStream inputStream) { checkNotNull("resource", resource); //Only files can be processed if (!Files.isRegularFile(resource)) { return new IncrementalBuildResults(projectGAV); } checkAFullBuildHasBeenPerformed(); //Resource Type might require "external" validation (i.e. it's not covered by Kie) final IncrementalBuildResults results = new IncrementalBuildResults(projectGAV); final BuildValidationHelper validator = getBuildValidationHelper(resource); if (validator != null) { final List<ValidationMessage> addedValidationMessages = validator.validate(Paths.convert(resource)); results.addAllAddedMessages(convertValidationMessages(addedValidationMessages)); results.addAllRemovedMessages(convertValidationMessages(nonKieResourceValidationHelperMessages.remove(resource))); nonKieResourceValidationHelpers.put(resource, validator); nonKieResourceValidationHelperMessages.put(resource, addedValidationMessages); } synchronized (kieFileSystem) { addNewResource(resource, inputStream); buildIncrementally(results, destinationPath(resource)); } return results; }
public IncrementalBuildResults deletePackageResource(final Path resource) { try { IncrementalBuildResults results = new IncrementalBuildResults(); final KieModule module = moduleService.resolveModule(resource); if (module == null) { return results; } final Builder builder = cache.assertBuilder(module); if (!builder.isBuilt()) { throw new IllegalStateException("Incremental Build requires a full build be completed first."); } else { results = builder.deleteResource(Paths.convert(resource)); } return results; } catch (Exception e) { logger.error(e.getMessage(), e); throw ExceptionUtilities.handleException(e); } }
public BuildResults build(final Path resource, final InputStream inputStream) { synchronized (kieFileSystem) { final String destinationPath = destinationPath(resource); final Resource inputStreamResource = KieServices.Factory.get().getResources().newInputStreamResource(new BufferedInputStream(inputStream)); kieFileSystem.write(destinationPath, inputStreamResource); } return build(); }
private void visitPaths(final DirectoryStream<Path> directoryStream) { for (final Path path : directoryStream) { if (Files.isDirectory(path)) { visitPaths(Files.newDirectoryStream(path)); } else { //Don't process dotFiles if (!dotFileFilter.accept(path)) { //Resource Type might require "external" validation (i.e. it's not covered by Kie) final BuildValidationHelper validator = getBuildValidationHelper(path); if (validator != null) { nonKieResourceValidationHelpers.put(path, validator); } addNewResource(path, ioService.newInputStream(path)); } } } }
public IncrementalBuildResults updatePackageResource(final Path resource) { try { final Module module = moduleService.resolveModule(resource); if (module == null) { return new IncrementalBuildResults(); } final Builder builder = cache.assertBuilder(module); if (!builder.isBuilt()) { throw new IllegalStateException("Incremental Build requires a full build be completed first."); } return builder.updateResource(Paths.convert(resource)); } catch (Exception e) { logger.error(e.getMessage(), e); throw ExceptionUtilities.handleException(e); } }
public IncrementalBuildResults addPackageResource(final Path resource) { try { IncrementalBuildResults results = new IncrementalBuildResults(); final KieModule module = moduleService.resolveModule(resource); if (module == null) { return results; } final Builder builder = cache.assertBuilder(module); if (!builder.isBuilt()) { throw new IllegalStateException("Incremental Build requires a full build be completed first."); } else { results = builder.addResource(Paths.convert(resource)); } return results; } catch (Exception e) { logger.error(e.getMessage(), e); throw ExceptionUtilities.handleException(e); } }
@Override public KieModule getKieModule( ) { return builder.getKieModule(); }
private void update(final List<ValidationMessage> nonKieResourceValidatorAddedMessages, final List<ValidationMessage> nonKieResourceValidatorRemovedMessages, final Path resource) { //Resource Type might require "external" validation (i.e. it's not covered by Kie) final BuildValidationHelper validator = getBuildValidationHelper(resource); if (validator != null) { final List<ValidationMessage> addedValidationMessages = validator.validate(Paths.convert(resource)); if (!(addedValidationMessages == null || addedValidationMessages.isEmpty())) { for (ValidationMessage validationMessage : addedValidationMessages) { nonKieResourceValidatorAddedMessages.add(validationMessage); } } final List<ValidationMessage> removedValidationMessages = nonKieResourceValidationHelperMessages.remove(resource); if (!(removedValidationMessages == null || removedValidationMessages.isEmpty())) { for (ValidationMessage validationMessage : removedValidationMessages) { nonKieResourceValidatorRemovedMessages.add(validationMessage); } } nonKieResourceValidationHelpers.put(resource, validator); nonKieResourceValidationHelperMessages.put(resource, addedValidationMessages); } addNewResource(resource, ioService.newInputStream(resource)); }
private void addNewResource(final Path path, final InputStream inputStream) { final String destinationPath = destinationPath(path); final Resource inputStreamResource = KieServices.Factory.get().getResources().newInputStreamResource(new BufferedInputStream(inputStream)); kieFileSystem.write(destinationPath, inputStreamResource); handles.put(getBaseFileName(destinationPath), Paths.convert(path)); addJavaClass(path); }
private Builder makeBuilder(final Module module) { Builder builder = getEntry(module); if (builder == null) { builder = new Builder(module, ioService, moduleService, importsService, buildValidationHelpers, dependenciesClassLoaderCache, pomModelCache, packageNameWhiteListService, createSingleClassFilterPredicate()); setEntry(module, builder); } return builder; }