@Override public Iterable<Vfs.File> getFiles() { List<Vfs.File> vfsFileList = new ArrayList<>(); Deque<Resource> resourceDeque = new ArrayDeque<>(); Collection<? extends Resource> mainMembers = kieFolder.getMembers(); if (mainMembers != null) { resourceDeque.addAll(mainMembers); } while (!resourceDeque.isEmpty()) { Resource resource = resourceDeque.pop(); if (resource instanceof File) { File file = (File) resource; if (file.getName().endsWith(".class")) { vfsFileList.add(new ReflectionsKieVfsFile(file)); } } else if (resource instanceof Folder) { Collection<? extends Resource> members = ((Folder) resource).getMembers(); if (members != null) { resourceDeque.addAll(members); } } else { throw new IllegalStateException("Unsupported resource class (" + resource.getClass() + ") for resource (" + resource + ")."); } } return vfsFileList; }
@Test public void testMemoryFileSystemFolderUniqueness() { KieServices kieServices = KieServices.Factory.get(); String drl = "package org.drools.test\n" + "rule R1 when\n" + " $m : Object()\n" + "then\n" + "end\n"; Resource resource = kieServices.getResources().newReaderResource( new StringReader( drl), "UTF-8" ); resource.setTargetPath("org/drools/test/rules.drl"); String kmodule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<kmodule xmlns=\"http://www.drools.org/xsd/kmodule\">\n" + " <kbase name=\"testKbase\" packages=\"org.drools.test\">\n" + " <ksession name=\"testKsession\"/>\n" + " </kbase>\n" + "</kmodule>"; // Create an in-memory jar for version 1.0.0 ReleaseId releaseId = kieServices.newReleaseId("org.kie", "test-delete", "1.0.0"); createAndDeployJar(kieServices, kmodule, releaseId, resource); KieContainer kieContainer = kieServices.newKieContainer(releaseId); KieModule kieModule = ((InternalKieContainer) kieContainer).getMainKieModule(); MemoryFileSystem memoryFileSystem = ((MemoryKieModule) kieModule).getMemoryFileSystem(); Folder rootFolder = memoryFileSystem.getFolder(""); Object[] members = rootFolder.getMembers().toArray(); assertEquals(2, members.length); Folder firstFolder = (Folder) members[0]; Folder secondFolder = (Folder) members[1]; assertEquals(firstFolder.getParent(), secondFolder.getParent()); }
public void writeFs(MemoryFileSystem mfs, Folder f, java.io.File file1) { for ( Resource rs : f.getMembers() ) { if ( rs instanceof Folder ) { java.io.File file2 = new java.io.File( file1, ((Folder) rs).getName()); file2.mkdir(); writeFs( mfs, (Folder) rs, file2 ); } else { byte[] bytes = mfs.getFileContents( (MemoryFile) rs ); try { IoUtils.write(new java.io.File(file1, ((File) rs).getName()), bytes); } catch ( IOException e ) { fail( "Unable to write project to file system\n" + e.getMessage() ); } } } } }
public void copyFolder(MemoryFileSystem srcMfs, Folder srcFolder, MemoryFileSystem trgMfs, Folder trgFolder, KieModuleModel kproj) { if ( !trgFolder.exists() ) { trgMfs.getFolder( trgFolder.getPath() ).create(); } Collection<Resource> col = (Collection<Resource>) srcFolder.getMembers(); if (col == null) { return; } for ( Resource rs : col ) { if ( rs instanceof Folder ) { copyFolder( srcMfs, (Folder) rs, trgMfs, trgFolder.getFolder( ((Folder) rs).getName() ), kproj ); } else { MemoryFile trgFile = (MemoryFile) trgFolder.getFile( ((File) rs).getName() ); try { trgMfs.setFileContents( trgFile, srcMfs.getFileContents( (MemoryFile) rs ) ); } catch ( IOException e ) { throw new RuntimeException( e ); } } } }