package net.ion.craken.io; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import junit.framework.TestCase; import net.ion.craken.node.ReadNode; import net.ion.craken.node.ReadSession; import net.ion.craken.node.TransactionJob; import net.ion.craken.node.WriteSession; import net.ion.craken.node.crud.Craken; import net.ion.craken.node.crud.ReadChildrenEach; import net.ion.craken.node.crud.ReadChildrenIterator; import net.ion.craken.node.crud.store.OldFileConfigBuilder; import net.ion.craken.node.crud.tree.impl.GridBlob; import net.ion.craken.node.crud.tree.impl.PropertyValue; import net.ion.framework.util.Debug; import net.ion.framework.util.IOUtil; import net.ion.framework.util.StringUtil; public class TestWriteBlob extends TestCase { private Craken r; private ReadSession session; @Override protected void setUp() throws Exception { super.setUp(); this.r = Craken.create(); r.createWorkspace("3rdparty", OldFileConfigBuilder.directory("./resource/store/3rdparty")); this.session = r.login("3rdparty"); } @Override protected void tearDown() throws Exception { r.shutdown(); super.tearDown(); } public void testFirst() throws Exception { session.tran(new TransactionJob<Void>() { @Override public Void handle(WriteSession wsession) throws Exception { wsession.pathBy("/files").property("name", "bleujin").blob("file", getClass().getResourceAsStream("TestWriteBlob.class")); return null; } }); session.root().walkChildren().debugPrint(); } public void testDebugWalk() throws Exception { session.pathBy("/inner/3rdparty").children().debugPrint(); } public void testFind() throws Exception { ReadNode find = session.pathBy("/inner/3rdparty/hello.txt"); File file = find.property("file").asBlob().toFile() ; Debug.line(file.length()); find.debugPrint(); } public void testCheckChildren() throws Exception { final AtomicInteger ai = new AtomicInteger() ; Long sumByte = session.pathBy("/inner/3rdparty").walkChildren().offset(20000).eachNode(new ReadChildrenEach<Long>() { // alert offset @Override public Long handle(ReadChildrenIterator citer) { long sumByte = 0L ; while(citer.hasNext()){ PropertyValue prop = citer.next().property("file"); if (prop.isBlob()) { ai.incrementAndGet() ; GridBlob blob = prop.asBlob(); sumByte += blob.toFile().length() ; } } return sumByte; } }) ; Debug.line(sumByte, ai.intValue()); } public void testDirWalk() throws Exception { final AtomicLong sumBytes = new AtomicLong() ; final AtomicInteger count = new AtomicInteger() ; Files.walkFileTree(new File("C:/temp/inner/3rdparty"), new FileVisitor() { public FileVisitResult visitFile(File file) throws IOException { sumBytes.addAndGet(file.length()) ; count.incrementAndGet() ; return FileVisitResult.CONTINUE ; } }); Debug.line(sumBytes, count); } public void testWalk() throws Exception { // 227947468, 12027 final AtomicLong sumBytes = new AtomicLong() ; final AtomicInteger count = new AtomicInteger() ; session.tran(new TransactionJob<Void>() { @Override public Void handle(final WriteSession wsession) throws Exception { final AtomicInteger acount = new AtomicInteger(); FileVisitor visitor = new FileVisitor() { public FileVisitResult visitFile(File file) throws IOException { String fqnPath = StringUtil.replace(file.getPath().substring(7), "\\", "/"); sumBytes.addAndGet(file.length()) ; FileInputStream fis = new FileInputStream(file); try { wsession.pathBy(fqnPath).property("filename", file.getName()).blob("file", fis); count.incrementAndGet(); } catch (Exception e) { IOUtil.close(fis); } int count = acount.incrementAndGet(); if ((count % 100) == 0) { Debug.line(count); wsession.continueUnit(); } return FileVisitResult.CONTINUE; } }; Files.walkFileTree(new File("C:/temp/inner/3rdparty"), visitor); return null; } }); Debug.line(sumBytes, count); } }