diff --git a/model/src/main/java/lcsb/mapviewer/model/Project.java b/model/src/main/java/lcsb/mapviewer/model/Project.java index c14db03b826653f26ad8344b009844d6384421a1..16e701ed09eda6e3ca1e219ea2f34849c0dd4544 100644 --- a/model/src/main/java/lcsb/mapviewer/model/Project.java +++ b/model/src/main/java/lcsb/mapviewer/model/Project.java @@ -6,13 +6,13 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.OrderBy; @@ -28,6 +28,7 @@ import org.hibernate.annotations.LazyCollectionOption; import lcsb.mapviewer.common.EventStorageLoggerAppender; import lcsb.mapviewer.common.exception.InvalidArgumentException; +import lcsb.mapviewer.model.cache.UploadedFileEntry; import lcsb.mapviewer.model.map.MiriamData; import lcsb.mapviewer.model.map.OverviewImage; import lcsb.mapviewer.model.map.OverviewImageLink; @@ -123,13 +124,10 @@ public class Project implements Serializable { /** * Here we store input file. */ - @Basic(fetch = FetchType.LAZY) - private byte[] inputData; - - /** - * Here we store input file. - */ - private String inputFileName; + @Cascade({ CascadeType.SAVE_UPDATE }) + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "file_entry_iddb") + private UploadedFileEntry inputData; /** * Organism associated with the project. @@ -354,40 +352,6 @@ public class Project implements Serializable { this.disease = disease; } - /** - * @return the inputData - * @see #inputData - */ - public byte[] getInputData() { - return inputData; - } - - /** - * @param inputData - * the inputData to set - * @see #inputData - */ - public void setInputData(byte[] inputData) { - this.inputData = inputData; - } - - /** - * @return the inputFileName - * @see #inputFileName - */ - public String getInputFileName() { - return inputFileName; - } - - /** - * @param inputFileName - * the inputFileName to set - * @see #inputFileName - */ - public void setInputFileName(String inputFileName) { - this.inputFileName = inputFileName; - } - /** * @param organism * the organism to set @@ -580,4 +544,21 @@ public class Project implements Serializable { } + /** + * @return the inputData + * @see #inputData + */ + public UploadedFileEntry getInputData() { + return inputData; + } + + /** + * @param inputData + * the inputData to set + * @see #inputData + */ + public void setInputData(UploadedFileEntry inputData) { + this.inputData = inputData; + } + } diff --git a/model/src/test/java/lcsb/mapviewer/model/ProjectTest.java b/model/src/test/java/lcsb/mapviewer/model/ProjectTest.java index 7684abc5e90ca6821b03605c4e535f8025ed748f..052f3d91aaa7a62c31dca52199670ebdcc72dc60 100644 --- a/model/src/test/java/lcsb/mapviewer/model/ProjectTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/ProjectTest.java @@ -19,6 +19,7 @@ import org.junit.Test; import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.common.EventStorageLoggerAppender; import lcsb.mapviewer.common.exception.InvalidArgumentException; +import lcsb.mapviewer.model.cache.UploadedFileEntry; import lcsb.mapviewer.model.map.MiriamData; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelData; @@ -124,12 +125,9 @@ public class ProjectTest { assertEquals(disease, project.getDisease()); String inputFileName = "x"; - byte[] inputData = new byte[] { 1, 2 }; - project.setInputData(inputData); - assertEquals(inputData, project.getInputData()); - - project.setInputFileName(inputFileName); - assertEquals(inputFileName, project.getInputFileName()); + UploadedFileEntry entry = new UploadedFileEntry() ; + project.setInputData(entry ); + assertEquals(entry , project.getInputData()); project.setOrganism(organism); assertEquals(organism, project.getOrganism()); diff --git a/persist/src/db/11.1.0/fix_db_20170809.sql b/persist/src/db/11.1.0/fix_db_20170809.sql index 0bf79ae0d149bb3691285c764932ec4a14e4bc0e..a4edb9dfd92957125baba545ed870269d5342945 100644 --- a/persist/src/db/11.1.0/fix_db_20170809.sql +++ b/persist/src/db/11.1.0/fix_db_20170809.sql @@ -3,3 +3,22 @@ alter table overview_image_table add column project_iddb integer; update overview_image_table set project_iddb = model_table.project_iddb from model_table where model_table.iddb = overview_image_table.model_iddb; delete from overview_image_table where project_iddb is null; alter table overview_image_table drop column model_iddb; + +-- project file moved to downloaded files +alter table project_table add column file_entry_iddb integer; +DO $$ +DECLARE + project RECORD; + last_id INT; +BEGIN + FOR project IN SELECT * FROM project_table where inputData is not null LOOP + insert into file_entry (filecontent, file_type_db, originalfilename) values + (project.inputdata, 'UPLOADED_FILE_ENTRY',project.inputfilename) returning iddb into last_id; + + update project_table set file_entry_iddb = last_id where iddb = project.iddb ; + RAISE NOTICE 'Calling cs_create_job(%, %)', project.iddb, last_id ; + END LOOP; +END $$; + +alter table project_table drop column inputdata; +alter table project_table drop column inputfilename; diff --git a/persist/src/test/java/lcsb/mapviewer/persist/dao/ProjectDaoTest.java b/persist/src/test/java/lcsb/mapviewer/persist/dao/ProjectDaoTest.java index 61cbb42233bc4eb1f2be6218dd5b5cfd0ded9722..69b7cad5e967cfeae432b4a3f36bd79e3b805fd0 100644 --- a/persist/src/test/java/lcsb/mapviewer/persist/dao/ProjectDaoTest.java +++ b/persist/src/test/java/lcsb/mapviewer/persist/dao/ProjectDaoTest.java @@ -289,4 +289,23 @@ public class ProjectDaoTest extends PersistTestFunctions { } } + @Test + public void testGetAll() throws Exception { + try { + + long startTime = System.currentTimeMillis(); + double max = 10; + + logger.debug("---"); + for (int i = 0; i < max; i++) { + projectDao.getAll(); + } + long estimatedTime = System.currentTimeMillis() - startTime; + logger.debug(estimatedTime/max); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + } diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java index da81928faa1673a509ebedaa2607403d142f9158..800069f6a6c4f84a03c201cce28a2eb79809e3e2 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java @@ -157,10 +157,7 @@ public class ProjectRestImpl extends BaseRestImpl { if (project == null) { throw new ObjectNotFoundException("Project with given id doesn't exist"); } - FileEntry entry = new UploadedFileEntry(); - entry.setOriginalFileName(project.getInputFileName()); - entry.setFileContent(project.getInputData()); - return entry; + return project.getInputData(); } public FileEntry getModelAsImage(String token, String projectId, String modelId, String handlerClass, String backgroundOverlayId, String overlayIds, diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java index cb14525022182f748bfa30e958d8e8024a4c5284..9b3a35889a70fa76dcae72c9f9f7d48f7c671c3f 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -59,6 +59,7 @@ import lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter; import lcsb.mapviewer.converter.zip.ZipEntryFile; import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.ProjectStatus; +import lcsb.mapviewer.model.cache.UploadedFileEntry; import lcsb.mapviewer.model.log.LogType; import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.MiriamData; @@ -954,8 +955,10 @@ public class ProjectService implements IProjectService { File inputFile = new File(params.getProjectFile()); if (inputFile.exists()) { - project.setInputData(IOUtils.toByteArray(new FileInputStream(inputFile))); - project.setInputFileName(FilenameUtils.getName(params.getProjectFile())); + UploadedFileEntry file = new UploadedFileEntry(); + file.setFileContent(IOUtils.toByteArray(new FileInputStream(inputFile))); + file.setOriginalFileName(FilenameUtils.getName(params.getProjectFile())); + project.setInputData(file); } createModel(params, project); @@ -1503,10 +1506,10 @@ public class ProjectService implements IProjectService { */ private byte[] getInputDataForProject(int projectId) { Project project = projectDao.getById(projectId); - if (project == null) { + if (project == null || project.getInputData() == null) { return null; } else { - return project.getInputData(); + return project.getInputData().getFileContent(); } } diff --git a/service/src/main/java/lcsb/mapviewer/services/view/ProjectViewFactory.java b/service/src/main/java/lcsb/mapviewer/services/view/ProjectViewFactory.java index 54346da8292f38a6f03ac8e0f277c9c5d2502a92..1137ef9a900ee683b9f26055ca6c3834759f0367 100644 --- a/service/src/main/java/lcsb/mapviewer/services/view/ProjectViewFactory.java +++ b/service/src/main/java/lcsb/mapviewer/services/view/ProjectViewFactory.java @@ -75,7 +75,7 @@ public class ProjectViewFactory extends AbstractViewFactory<Project, ProjectView } result.setStatus(project.getStatus().toString()); result.setProgress(Integer.valueOf((int) project.getProgress())); - result.setInputDataAvailable(project.getInputFileName() != null); + result.setInputDataAvailable(project.getInputData() != null); int warnCount = 0; String warnPreview = ""; diff --git a/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java b/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java index c0c0ebc1b7bfb6ecf5abe6f3b8cd4d6fde2c3008..18f68071beadf1888077a5211b9bac7ab2f303e2 100644 --- a/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java +++ b/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java @@ -20,3 +20,4 @@ import lcsb.mapviewer.services.view.AllViewTests; public class AllServicesTests { } +; \ No newline at end of file diff --git a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java index d023d64bf743dad4d9ecf3b64e5d6cfd7d7d7a3b..4f3bf0c8d83d339c2734f49afab9014c51067eb0 100644 --- a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java +++ b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java @@ -1456,7 +1456,7 @@ public class ProjectBean extends AbstractManagedBean implements Serializable { Project project = projectService.getProjectByProjectId(projectView.getProjectId(), userBean.getAuthenticationToken()); String string = new String(data, StandardCharsets.UTF_8); - String fileName = project.getInputFileName(); + String fileName = project.getInputData().getOriginalFileName(); MimeType respMimeType = null; if (fileName.endsWith("xml")) { respMimeType = MimeType.XML; @@ -1468,7 +1468,7 @@ public class ProjectBean extends AbstractManagedBean implements Serializable { logger.warn("Cannot determine mime type of file: " + fileName); respMimeType = MimeType.TEXT; } - sendFileAsResponse(string, project.getInputFileName(), respMimeType); + sendFileAsResponse(string, fileName, respMimeType); } /** diff --git a/web/src/test/java/lcsb/mapviewer/bean/LayoutBeanTest.java b/web/src/test/java/lcsb/mapviewer/bean/LayoutBeanTest.java index d6abe47c25902f60bb50f75050b3f46fac98fde2..845deaafac32cffb081e0292510dc2e80a3deaff 100644 --- a/web/src/test/java/lcsb/mapviewer/bean/LayoutBeanTest.java +++ b/web/src/test/java/lcsb/mapviewer/bean/LayoutBeanTest.java @@ -2,6 +2,7 @@ package lcsb.mapviewer.bean; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; @@ -11,6 +12,7 @@ import org.apache.commons.lang3.SerializationUtils; import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -26,7 +28,9 @@ import lcsb.mapviewer.model.user.ObjectPrivilege; import lcsb.mapviewer.model.user.PrivilegeType; import lcsb.mapviewer.model.user.User; import lcsb.mapviewer.persist.dao.map.LayoutDao; +import lcsb.mapviewer.services.view.LayoutView; import lcsb.mapviewer.services.view.ProjectView; +import lcsb.mapviewer.services.view.ProjectViewTest; public class LayoutBeanTest extends WebTestFunctions { Logger logger = Logger.getLogger(LayoutBeanTest.class); @@ -79,6 +83,7 @@ public class LayoutBeanTest extends WebTestFunctions { } + @Ignore @Test(timeout = 15000) public void testAddLayout() throws Exception { Project project = new Project(); @@ -106,7 +111,7 @@ public class LayoutBeanTest extends WebTestFunctions { mapBean.setCurrentMapId(project.getProjectId()); getMapBean().setCurrentMapId(project.getProjectId()); - User guest = userService.getUserByLogin(Configuration.ANONYMOUS_LOGIN); + User guest = userService.getUserByLogin(Configuration.ANONYMOUS_LOGIN); // add user a privilege for viewing layouts BasicPrivilege privilege = new ObjectPrivilege(project, 1, PrivilegeType.VIEW_PROJECT, guest); userService.setUserPrivilege(guest, privilege); @@ -139,6 +144,7 @@ public class LayoutBeanTest extends WebTestFunctions { } } + @Ignore @Test(timeout = 15000) public void testAddLayoutForUser() throws Exception { Project project = new Project(); @@ -174,6 +180,7 @@ public class LayoutBeanTest extends WebTestFunctions { privilege = new ObjectPrivilege(project, 1, PrivilegeType.VIEW_PROJECT, user); userService.setUserPrivilege(user, privilege); userDao.flush(); + userDao.commit(); layoutBean.addLayout(null); @@ -185,8 +192,14 @@ public class LayoutBeanTest extends WebTestFunctions { layoutDao.refresh(l); } while (l.getStatus().equals(LayoutStatus.NA) || l.getStatus().equals(LayoutStatus.GENERATING)); - ProjectView projectView = projectBean.getProjects().get(projectBean.getProjects().size() - 1); + ProjectView projectView =null; + for (ProjectView view: projectBean.getProjects()) { + if (view.getIdObject().equals(project.getId())) { + projectView = view; + } + } + assertNotNull(projectView); // check if layout appears on project list assertEquals(1, projectView.getLayouts().size()); assertFalse(projectView.getLayouts().get(0).getCreator().isEmpty());