#211 - ENH: Add support for File as a bean type ... for streaming into/from db

This commit is contained in:
rbygrave
2014-11-26 22:45:33 +13:00
parent 983391af94
commit 2195d7ecbc
9 changed files with 446 additions and 7 deletions
@@ -0,0 +1,51 @@
package com.avaje.tests.model.types;
import javax.persistence.*;
import java.io.File;
@Entity
public class SomeFileBean {
@Id
Long id;
@Version
Long version;
String name;
@Lob
File file;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}
@@ -0,0 +1,111 @@
package com.avaje.tests.types;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.tests.model.types.SomeFileBean;
import org.junit.Test;
import java.io.File;
import java.net.URL;
import static org.junit.Assert.*;
public class TestFileType extends BaseTestCase {
File file = getFile("/profile-image.jpg");
File file2 = getFile("/java-64.png");
@Test
public void test_insertNullFile() {
assertTrue(file.exists());
assertTrue(file2.exists());
SomeFileBean bean0 = new SomeFileBean();
bean0.setName("afile");
Ebean.save(bean0);
SomeFileBean bean1 = Ebean.find(SomeFileBean.class)
.select("name, file")
.setId(bean0.getId())
.findUnique();
assertEquals("afile", bean1.getName());
assertNull(bean1.getFile());
bean1.setFile(file);
Ebean.save(bean1);
SomeFileBean bean2 = Ebean.find(SomeFileBean.class)
.select("name, file")
.setId(bean0.getId())
.findUnique();
assertEquals("afile", bean2.getName());
assertNotNull(bean2.getFile());
System.out.println("test_insertNullFile: bean2: "+bean2.getFile());
Ebean.delete(bean1);
}
@Test
public void test_insertUpdateDelete() {
assertTrue(file.exists());
assertTrue(file2.exists());
SomeFileBean bean0 = new SomeFileBean();
bean0.setName("afile");
bean0.setFile(file);
Ebean.save(bean0);
SomeFileBean bean1 = Ebean.find(SomeFileBean.class)
.select("name, file")
.setId(bean0.getId())
.findUnique();
assertEquals("afile", bean1.getName());
assertNotNull(bean1.getFile());
assertEquals(file.length(), bean1.getFile().length());
System.out.println("t2 bean1: " + bean1.getFile().getAbsoluteFile());
bean1.setName("mod-file");
bean1.setFile(file2);
// update to file2
Ebean.save(bean1);
SomeFileBean bean2 = Ebean.find(SomeFileBean.class)
.select("name, file")
.setId(bean0.getId())
.findUnique();
assertEquals(file2.length(), bean2.getFile().length());
System.out.println("t2 bean3: " + bean2.getFile().getAbsoluteFile());
// update to null
bean2.setFile(null);
bean2.setName("setNull");
Ebean.save(bean2);
SomeFileBean bean3 = Ebean.find(SomeFileBean.class)
.select("name, file")
.setId(bean0.getId())
.findUnique();
assertNull(bean3.getFile());
System.out.println("t2 bean3: " + bean3.getFile());
bean3.setName("changeOnlyName");
Ebean.save(bean3);
Ebean.delete(bean3);
}
private File getFile(String resource) {
URL url = getClass().getResource(resource);
return new File(url.getFile());
}
}
@@ -0,0 +1,65 @@
package com.avaje.tests.types;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.BeanState;
import com.avaje.ebean.Ebean;
import com.avaje.tests.model.types.SomeFileBean;
import org.junit.Test;
import java.io.File;
import java.net.URL;
import java.util.Set;
import static org.junit.Assert.*;
public class TestFileTypeFetching extends BaseTestCase {
File file = getFile("/profile-image.jpg");
File file2 = getFile("/java-64.png");
@Test
public void test_lazyFetch_statelessUpdate() {
assertTrue(file.exists());
SomeFileBean bean0 = new SomeFileBean();
bean0.setName("one");
bean0.setFile(file);
Ebean.save(bean0);
SomeFileBean bean1 = Ebean.find(SomeFileBean.class)
.setId(bean0.getId())
.findUnique();
BeanState beanState = Ebean.getBeanState(bean1);
Set<String> loadedProps = beanState.getLoadedProps();
assertTrue(loadedProps.contains("name"));
assertFalse(loadedProps.contains("file"));
File file1 = bean1.getFile();
assertEquals(file.length(), file1.length());
SomeFileBean statelessUpdateBean = new SomeFileBean();
statelessUpdateBean.setId(bean0.getId());
statelessUpdateBean.setFile(file2);
// perform stateless update (handy)
Ebean.update(statelessUpdateBean);
SomeFileBean bean2 = Ebean.find(SomeFileBean.class)
.select("file")
.setId(bean0.getId())
.findUnique();
assertEquals(file2.length(), bean2.getFile().length());
Ebean.delete(bean1);
}
private File getFile(String resource) {
URL url = getClass().getResource(resource);
return new File(url.getFile());
}
}