diff --git a/mozen/src/main/java/mozen/business/IModelManager.java b/mozen/src/main/java/mozen/business/IModelManager.java index 7607daad2fdae48c3b427d381ceb031e556c3f5c..7d6d2ffc4abc51e750750320b6ac59c2d7ec98dd 100644 --- a/mozen/src/main/java/mozen/business/IModelManager.java +++ b/mozen/src/main/java/mozen/business/IModelManager.java @@ -21,7 +21,7 @@ public interface IModelManager { void removeLayer(long id, User user) throws Exception; void addFile(MultipartFile file, long id, User user) throws Exception; - void addLayerFile(MultipartFile file, long id, User user) throws Exception; + void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception; void addTag(TagMessage message); diff --git a/mozen/src/main/java/mozen/business/ModelManager.java b/mozen/src/main/java/mozen/business/ModelManager.java index e992894fd4a998d0280f6edea45ae9ad238b8171..938034e832288dfd6bdbaefa1d67ec5f6ed5f7a3 100644 --- a/mozen/src/main/java/mozen/business/ModelManager.java +++ b/mozen/src/main/java/mozen/business/ModelManager.java @@ -33,43 +33,27 @@ public class ModelManager implements IModelManager { model.setShortDescription(message.getShortDescription()); model.setLongDescription(message.getLongDescription()); - System.err.println("[MODEL MANAGER] oui 2"); + System.err.println("[MODEL MANAGER] add model 2"); if (message.getTags() != null) { - System.err.println("[MODEL MANAGER] oui 2.1"); + System.err.println("[MODEL MANAGER] add model new tag 2.1"); Set<Tag> tags = new HashSet<Tag>(); for (String tagName : message.getTags()) { Tag tag = dao.getTagByName(tagName); tags.add(tag); } - System.err.println("[MODEL MANAGER] oui 2.2"); + System.err.println("[MODEL MANAGER] add model new tag 2.2"); model.setTags(tags); } - System.err.println("[MODEL MANAGER] oui 3"); - - if (message.getCustomLayers() != null) { - System.err.println("[MODEL MANAGER] oui 3.1"); - Set<CustomLayer> layers = new HashSet<CustomLayer>(); - for (String layerName : message.getCustomLayers()) { - System.err.println("[MODEL MANAGER] new layer 1"+layerName); - CustomLayer layer = new CustomLayer(); - layer.setName(layerName); - System.err.println("[MODEL MANAGER] new layer 2"+layerName); - layers.add(layer); - } - System.err.println("[MODEL MANAGER] oui 3.2"); - model.setCustomLayers(layers); - } - - System.err.println("[MODEL MANAGER] oui 4"); + System.err.println("[MODEL MANAGER] add model 3"); model.setVotes(0); model.setAdded(new Date()); model.setLastModified(new Date()); model.setAuthor(user); - System.err.println("[MODEL MANAGER] oui 5"); + System.err.println("[MODEL MANAGER] add model 4"); try { dao.addModel(model); @@ -77,19 +61,24 @@ public class ModelManager implements IModelManager { System.err.println("[MODEL MANAGER] Add model error "+e.getMessage()); } - System.err.println("[MODEL MANAGER] oui 6"); + System.err.println("[MODEL MANAGER] add model 5"); return model.getId(); } @Override public void addFile(MultipartFile file, long id, User user) throws Exception { + System.err.println("[MODEL MANAGER] add model file 1"); Model model = dao.findModel(id); if (model == null) throw new Exception("Unknown model"); + System.err.println("[MODEL MANAGER] add model file 2"); model.setFile(file.getBytes()); + System.err.println("[MODEL MANAGER] add model file 3"); model.setFileType(file.getContentType()); + System.err.println("[MODEL MANAGER] add model file 4"); dao.updateModel(model); + System.err.println("[MODEL MANAGER] add model file 5"); } @Override @@ -170,15 +159,21 @@ public class ModelManager implements IModelManager { } @Override - public void addLayerFile(MultipartFile file, long id, User user) throws Exception { - CustomLayer layer = dao.findLayer(id); - if (layer == null) - throw new Exception("Unknown layer"); - if (!isLayerAuthor(layer, user)) + public void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception { + Model model = dao.findModel(modelId); + if (model == null) + throw new Exception("Unknown model"); + if (!isModelAuthor(model, user)) throw new Exception("Not the author"); + + CustomLayer layer = new CustomLayer(); + layer.setName(name); layer.setFile(file.getBytes()); + layer.setModel(model); - dao.updateLayer(layer); + model.getCustomLayers().add(layer); + + dao.updateModel(model); } private boolean isLayerAuthor(CustomLayer layer, User user) { diff --git a/mozen/src/main/java/mozen/model/Model.java b/mozen/src/main/java/mozen/model/Model.java index c157c9c012e47d88279e89f9448dee7406e781c8..886e26635442de7f5ea997ca56a3390c304edfa3 100644 --- a/mozen/src/main/java/mozen/model/Model.java +++ b/mozen/src/main/java/mozen/model/Model.java @@ -73,16 +73,16 @@ public class Model implements Serializable{ private String fileType; @Basic - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) private User author; @Basic - @ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL) + @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}) @JoinTable(name = "model_tag") private Set<Tag> tags; @Basic - @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) @JoinTable(name = "model_customLayers") private Set<CustomLayer> customLayers; diff --git a/mozen/src/main/java/mozen/model/Tag.java b/mozen/src/main/java/mozen/model/Tag.java index 2ec9ef754e449a17046febb2e1cb117087b34282..d9a07807e3bc0c6684f292a5d7c36010b32a5f2c 100644 --- a/mozen/src/main/java/mozen/model/Tag.java +++ b/mozen/src/main/java/mozen/model/Tag.java @@ -27,7 +27,7 @@ public class Tag implements Serializable{ private Long id; @Basic - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST}) private TagCategory category; @Basic @@ -35,7 +35,7 @@ public class Tag implements Serializable{ private String name; @Basic - @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToMany(fetch = FetchType.LAZY) private Set<Model> models; public Tag() { diff --git a/mozen/src/main/java/mozen/model/User.java b/mozen/src/main/java/mozen/model/User.java index 14330d254b7c627e1e60136a243d7850abda06f3..eb80be64451467d2b2600d5ab96580c5928ea088 100644 --- a/mozen/src/main/java/mozen/model/User.java +++ b/mozen/src/main/java/mozen/model/User.java @@ -58,7 +58,7 @@ public class User implements Serializable{ private Role role; @Basic - @OneToMany(mappedBy = "author", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @OneToMany(mappedBy = "author", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) private Set<Model> models; diff --git a/mozen/src/main/java/mozen/utils/DatabaseFiller.java b/mozen/src/main/java/mozen/utils/DatabaseFiller.java index d62b0155c6ec119edcc8c9cb1fa6c79f8fc0688a..5d8f692baadad8b68e4147555cda6baf94c31292 100644 --- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java +++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java @@ -1,5 +1,9 @@ package mozen.utils; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -53,29 +57,34 @@ public class DatabaseFiller { Model m1 = new Model(); m1.setAuthor(u1); - m1.setName("model 1"); - m1.setShortDescription("short description 1"); - m1.setLongDescription("# README \n model 1"); + m1.setName("Model Testo"); + m1.setShortDescription("Short description for model testo"); + m1.setLongDescription("# README \n model testo"); m1.setVotes(0); m1.setAdded(new Date()); m1.setLastModified(new Date()); - Set<Tag> m1tags = new HashSet<Tag>(); - Tag t1 = new Tag(); + /*Set<Tag> m1tags = new HashSet<Tag>(); + TagCategory ca1 = new TagCategory(); ca1.setName("Layer"); + + Tag t1 = new Tag(); t1.setCategory(ca1); t1.setName("Conv2D"); - Tag t2 = new Tag(); TagCategory ca2 = new TagCategory(); ca2.setName("Architecture"); + + Tag t2 = new Tag(); t2.setCategory(ca2); t2.setName("VGG19"); m1tags.add(t1); m1tags.add(t2); m1.setTags(m1tags); + */ + m1.setTags(tagLoader("tags.txt")); Set<CustomLayer> m1layers = new HashSet<CustomLayer>(); CustomLayer l1 = new CustomLayer(); @@ -94,4 +103,37 @@ public class DatabaseFiller { daoModel.addModel(m1); } + Set<Tag> tagLoader(String filePath) { + Set<Tag> tags = new HashSet<Tag>(); + + File file = new File(filePath); + FileReader fr; + try { + fr = new FileReader(file); + BufferedReader br = new BufferedReader(fr); + String line; + while ((line = br.readLine()) != null) { + System.out.println("[DB FILLER] adding category "+line); + TagCategory category = new TagCategory(); + category.setName(line); + line = br.readLine(); + while (!line.equals("#")) { + System.out.println("[DB FILLER] adding tag "+line+" to "+category.getName()); + Tag tag = new Tag(); + tag.setCategory(category); + tag.setName(line); + + tags.add(tag); + + line = br.readLine(); + } + } + fr.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + return tags; + } + } \ No newline at end of file diff --git a/mozen/src/main/java/mozen/web/ModelController.java b/mozen/src/main/java/mozen/web/ModelController.java index fc8e8eb7cb28039a99a423000353794ee9a9078f..5506252be9153e264354295aaed45c1ff81b90d3 100644 --- a/mozen/src/main/java/mozen/web/ModelController.java +++ b/mozen/src/main/java/mozen/web/ModelController.java @@ -127,7 +127,7 @@ public class ModelController { } @PostMapping("/upload") - public ResponseEntity<ResponseMessage> uploadModelFile(@RequestParam(value = "id", required = true) Long id, @RequestParam("file") MultipartFile file) { + public ResponseEntity<ResponseMessage> uploadModelFile(@RequestParam("file") MultipartFile file, @RequestParam(value = "id", required = true) Long id) { ResponseMessage response = new ResponseMessage(false, ""); User user = getUser(); if(user == null) { @@ -137,6 +137,7 @@ public class ModelController { } try { + System.err.println("[MODEL CONTROLLER] model file upload n:"+file.getName()); modelManager.addFile(file, id, user); } catch (Exception e) { response.setError(true); @@ -164,6 +165,30 @@ public class ModelController { return ResponseEntity.ok(response); } + @PostMapping("/uploadLayer") + public ResponseEntity<ResponseMessage> uploadLayerFile( + @RequestParam("file") MultipartFile file, + @RequestParam(value = "id", required = true) Long id, + @RequestParam(value = "name", required = true) String name) { + ResponseMessage response = new ResponseMessage(false, ""); + User user = getUser(); + if(user == null) { + response.setError(true); + response.setMessage("User unknown"); + return ResponseEntity.ok(response); + } + + try { + System.err.println("[MODEL CONTROLLER] layer file upload f:"+file.getName()+" n:"+name); + modelManager.addLayerFile(file, id, name, user); + } catch (Exception e) { + response.setError(true); + response.setMessage(e.getMessage()); + } + + return ResponseEntity.ok(response); + } + private User getUser() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); diff --git a/tags.txt b/tags.txt new file mode 100644 index 0000000000000000000000000000000000000000..9a19513ec0dd2a421cd222844d6f8dbf47157eba --- /dev/null +++ b/tags.txt @@ -0,0 +1,31 @@ +Task +Classification +# +Dataset +Cifar10 +Cifar100 +SVHN +MNIST +# +Architecture +VGG19 +Lenet +Fully connected 500 +Resnet 20 +Resnet 50 +Tensor Train base +# +Layers +Dense +Conv2D +Batchnorm +MaxPooling +# +Other +(4096x4096) +(2048x2048) +seed:1 +seed:2 +seed:3 +(deprecated) +#