diff --git a/mozen/src/main/java/mozen/MozenApplication.java b/mozen/src/main/java/mozen/MozenApplication.java index 68b4c2a9bfda296679a92c32ea62661444721104..fa1e6554caef703ec43288d35a9b7863af5cec2e 100644 --- a/mozen/src/main/java/mozen/MozenApplication.java +++ b/mozen/src/main/java/mozen/MozenApplication.java @@ -1,15 +1,31 @@ package mozen; +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.PropertySource; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication @EnableJpaRepositories(basePackageClasses = MozenApplication.class) -@EntityScan(basePackageClasses = MozenApplication.class) +@EntityScan(basePackages = "mozen.model") +@ComponentScan(basePackages = "mozen") +@EnableTransactionManagement +@PropertySource("classpath:application.properties") public class MozenApplication { @Bean @@ -17,6 +33,36 @@ public class MozenApplication { return new BCryptPasswordEncoder(); } + @Bean + public DataSource dataSource() { + EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); + return builder.setType(EmbeddedDatabaseType.HSQL).build(); + } + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + vendorAdapter.setGenerateDdl(true); + + LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); + factory.setJpaVendorAdapter(vendorAdapter); + factory.setPackagesToScan("mozen.model"); + factory.setDataSource(dataSource()); + return factory; + } + + @Bean + public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { + JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(emf); + return transactionManager; + } + + @Bean + public PersistenceAnnotationBeanPostProcessor annotationProcessor() { + return new PersistenceAnnotationBeanPostProcessor(); + } + public static void main(String[] args) { SpringApplication.run(MozenApplication.class, args); } diff --git a/mozen/src/main/java/mozen/business/ILayerManager.java b/mozen/src/main/java/mozen/business/ILayerManager.java new file mode 100644 index 0000000000000000000000000000000000000000..d6c671860ffc6e4fad412fd2a41ca2492a6a3984 --- /dev/null +++ b/mozen/src/main/java/mozen/business/ILayerManager.java @@ -0,0 +1,13 @@ +package mozen.business; + +import org.springframework.web.multipart.MultipartFile; + +import mozen.model.CustomLayer; +import mozen.model.User; + +public interface ILayerManager { + void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception; + void removeLayer(long id, User user) throws Exception; + + CustomLayer getLayer(long id); +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/IModelManager.java b/mozen/src/main/java/mozen/business/IModelManager.java index 348eeb61399c3b85f572bce62a0554b8e25dff20..57bda0d3fbedc0dcdeb67361543330207a01cea8 100644 --- a/mozen/src/main/java/mozen/business/IModelManager.java +++ b/mozen/src/main/java/mozen/business/IModelManager.java @@ -5,33 +5,18 @@ import java.util.Collection; import org.springframework.web.multipart.MultipartFile; import mozen.messages.ModelMessage; -import mozen.messages.TagMessage; -import mozen.model.CustomLayer; import mozen.model.Model; import mozen.messages.SearchResult; -import mozen.messages.TagCategoryMessage; -import mozen.model.TagCategory; import mozen.model.User; public interface IModelManager { Long addModel(ModelMessage message, User user) throws Exception; void addModelFile(MultipartFile file, long id, User user) throws Exception; void updateModel(Model model, long id, User user) throws Exception; - void removeModel(long id, User user) throws Exception; - - void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception; - void removeLayer(long id, User user) throws Exception; - - void addTag(TagMessage message); - void removeTag(long id); - - void addCategory(TagCategoryMessage message); - void removeCategory(long id); + void removeModel(long id, User user) throws Exception; Model getModel(long id); Collection<Model> getModels(); - Collection<TagCategory> getTags(); - CustomLayer getLayer(long id); SearchResult findModel(String name, int page, int size, String sort); SearchResult findModelWithTags(String name, int page, int size, String sort, Collection<String> tags); diff --git a/mozen/src/main/java/mozen/business/ITagManager.java b/mozen/src/main/java/mozen/business/ITagManager.java new file mode 100644 index 0000000000000000000000000000000000000000..23613b21e0f57c155f9550577f17c7ee327579d6 --- /dev/null +++ b/mozen/src/main/java/mozen/business/ITagManager.java @@ -0,0 +1,17 @@ +package mozen.business; + +import java.util.Collection; + +import mozen.messages.TagCategoryMessage; +import mozen.messages.TagMessage; +import mozen.model.TagCategory; + +public interface ITagManager { + void addTag(TagMessage message); + void removeTag(long id); + + void addCategory(TagCategoryMessage message); + void removeCategory(long id); + + Collection<TagCategory> getTags(); +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/LayerManager.java b/mozen/src/main/java/mozen/business/LayerManager.java new file mode 100644 index 0000000000000000000000000000000000000000..b31a66e2ee0ee211482f25eeb42c495fb7cecaf7 --- /dev/null +++ b/mozen/src/main/java/mozen/business/LayerManager.java @@ -0,0 +1,71 @@ +package mozen.business; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import mozen.model.CustomLayer; +import mozen.model.Model; +import mozen.model.Role; +import mozen.model.User; +import mozen.repos.CustomLayerRepository; +import mozen.repos.ModelRepository; + +@Service +public class LayerManager implements ILayerManager{ + @Autowired + private ModelRepository modelRepo; + + @Autowired + private CustomLayerRepository layerRepo; + + @Override + public CustomLayer getLayer(long id) { + return layerRepo.findById(id).get(); + } + + @Override + public void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception { + Model model = modelRepo.findById(modelId).get(); + + 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.setFileType(file.getContentType()); + layer.setModel(model); + + model.getCustomLayers().add(layer); + + modelRepo.save(model); + } + + @Override + public void removeLayer(long id, User user) throws Exception { + CustomLayer layer = layerRepo.findById(id).get(); + + if (layer == null) + throw new Exception("Unknown layer"); + if (!isLayerAuthor(layer, user)) + throw new Exception("Not the author"); + + layerRepo.deleteById(id); + } + + private boolean isLayerAuthor(CustomLayer layer, User user) { + if (user.getRole() == Role.ROLE_ADMIN) + return true; + return layer.getModel().getAuthor() == user; + } + + private boolean isModelAuthor(Model model, User user) { + if (user.getRole() == Role.ROLE_ADMIN) + return true; + return model.getAuthor() == user; + } + +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/ModelManager.java b/mozen/src/main/java/mozen/business/ModelManager.java index 251404cf1438157833df9d39b120addeacb928b6..dec9495a850dbb0eaad7ff8f3a75d9cdc5385336 100644 --- a/mozen/src/main/java/mozen/business/ModelManager.java +++ b/mozen/src/main/java/mozen/business/ModelManager.java @@ -14,15 +14,13 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import mozen.messages.ModelMessage; -import mozen.messages.TagMessage; -import mozen.model.CustomLayer; import mozen.model.Model; import mozen.model.Role; import mozen.messages.SearchResult; -import mozen.messages.TagCategoryMessage; import mozen.model.Tag; -import mozen.model.TagCategory; import mozen.model.User; +import mozen.repos.ModelRepository; +import mozen.repos.TagRepository; @Service public class ModelManager implements IModelManager { @@ -33,12 +31,6 @@ public class ModelManager implements IModelManager { @Autowired private TagRepository tagRepo; - @Autowired - private TagCategoryRepository tagCategoryRepo; - - @Autowired - private CustomLayerRepository layerRepo; - @Override public Long addModel(ModelMessage message, User user) throws Exception { Model model = new Model(); @@ -114,11 +106,6 @@ public class ModelManager implements IModelManager { modelRepo.deleteById(id); } - @Override - public Model getModel(long id) { - return modelRepo.findById(id).get(); - } - @Override public SearchResult findModel(String name, int page, int size, String sort) { System.err.println("[MODEL MANAGER] search n:" + name + " p:" + page + " si:" + size + " so:" + sort); @@ -141,68 +128,6 @@ public class ModelManager implements IModelManager { return result; } - @Override - public void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception { - Model model = modelRepo.findById(modelId).get(); - - 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.setFileType(file.getContentType()); - layer.setModel(model); - - model.getCustomLayers().add(layer); - - modelRepo.save(model); - } - - @Override - public void removeLayer(long id, User user) throws Exception { - CustomLayer layer = layerRepo.findById(id).get(); - - if (layer == null) - throw new Exception("Unknown layer"); - if (!isLayerAuthor(layer, user)) - throw new Exception("Not the author"); - - layerRepo.deleteById(id); - } - - @Override - public void addTag(TagMessage message) { - System.err.println("[MODEL MANAGER] add tag n:" + message.getName() + " c:" + message.getCategoryId()); - Long categoryId = message.getCategoryId(); - TagCategory category = tagCategoryRepo.findById(categoryId).get(); - - Tag tag = new Tag(); - tag.setName(message.getName()); - tag.setCategory(category); - - tagRepo.save(tag); - } - - @Override - public Collection<TagCategory> getTags() { - return tagCategoryRepo.findAll(); - } - - private boolean isLayerAuthor(CustomLayer layer, User user) { - if (user.getRole() == Role.ROLE_ADMIN) - return true; - return layer.getModel().getAuthor() == user; - } - - private boolean isModelAuthor(Model model, User user) { - if (user.getRole() == Role.ROLE_ADMIN) - return true; - return model.getAuthor() == user; - } - @Override public SearchResult findModelWithTags(String name, int page, int size, String sort, Collection<String> tagsName) { System.err.println( @@ -228,30 +153,18 @@ public class ModelManager implements IModelManager { } @Override - public Collection<Model> getModels() { - return modelRepo.findAll(); - } - - @Override - public CustomLayer getLayer(long id) { - return layerRepo.findById(id).get(); - } - - @Override - public void removeTag(long id) { - tagRepo.deleteById(id); + public Model getModel(long id) { + return modelRepo.findById(id).get(); } @Override - public void removeCategory(long id) { - tagCategoryRepo.deleteById(id); + public Collection<Model> getModels() { + return modelRepo.findAll(); } - @Override - public void addCategory(TagCategoryMessage message) { - TagCategory category = new TagCategory(); - category.setName(message.getName()); - tagCategoryRepo.save(category); + private boolean isModelAuthor(Model model, User user) { + if (user.getRole() == Role.ROLE_ADMIN) + return true; + return model.getAuthor() == user; } - } \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/SpringBusinessConfig.java b/mozen/src/main/java/mozen/business/SpringBusinessConfig.java deleted file mode 100644 index c2f13821e09212923627d8de0e89c6d5c9af7837..0000000000000000000000000000000000000000 --- a/mozen/src/main/java/mozen/business/SpringBusinessConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -package mozen.business; - -import javax.persistence.EntityManagerFactory; -import javax.sql.DataSource; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@Configuration -@ComponentScan(basePackageClasses = SpringBusinessConfig.class) -@EnableTransactionManagement -@PropertySource("classpath:application.properties") -public class SpringBusinessConfig { - @Bean - public DataSource dataSource() { - EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); - return builder.setType(EmbeddedDatabaseType.HSQL).build(); - } - - @Bean - public LocalContainerEntityManagerFactoryBean entityManagerFactory() { - HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); - vendorAdapter.setGenerateDdl(true); - - LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); - factory.setJpaVendorAdapter(vendorAdapter); - factory.setPackagesToScan("mozen.model"); - factory.setDataSource(dataSource()); - return factory; - } - - @Bean - public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { - JpaTransactionManager transactionManager = new JpaTransactionManager(); - transactionManager.setEntityManagerFactory(emf); - return transactionManager; - } - - @Bean - public PersistenceAnnotationBeanPostProcessor annotationProcessor() { - return new PersistenceAnnotationBeanPostProcessor(); - } -} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/TagManager.java b/mozen/src/main/java/mozen/business/TagManager.java new file mode 100644 index 0000000000000000000000000000000000000000..60ada101ae1984e41e9c72151a11ccfe6dd4e389 --- /dev/null +++ b/mozen/src/main/java/mozen/business/TagManager.java @@ -0,0 +1,57 @@ +package mozen.business; + +import java.util.Collection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import mozen.messages.TagCategoryMessage; +import mozen.messages.TagMessage; +import mozen.model.Tag; +import mozen.model.TagCategory; +import mozen.repos.TagCategoryRepository; +import mozen.repos.TagRepository; + +@Service +public class TagManager implements ITagManager { + @Autowired + private TagRepository tagRepo; + + @Autowired + private TagCategoryRepository tagCategoryRepo; + + @Override + public void addTag(TagMessage message) { + System.err.println("[MODEL MANAGER] add tag n:" + message.getName() + " c:" + message.getCategoryId()); + Long categoryId = message.getCategoryId(); + TagCategory category = tagCategoryRepo.findById(categoryId).get(); + + Tag tag = new Tag(); + tag.setName(message.getName()); + tag.setCategory(category); + + tagRepo.save(tag); + } + + @Override + public void removeTag(long id) { + tagRepo.deleteById(id); + } + + @Override + public void addCategory(TagCategoryMessage message) { + TagCategory category = new TagCategory(); + category.setName(message.getName()); + tagCategoryRepo.save(category); + } + + @Override + public void removeCategory(long id) { + tagCategoryRepo.deleteById(id); + } + + @Override + public Collection<TagCategory> getTags() { + return tagCategoryRepo.findAll(); + } +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/UserManager.java b/mozen/src/main/java/mozen/business/UserManager.java index fb71d8e5c3c96031e31f8e7fe4b9a3703169f587..84cb6c38c88e5dfc8e9e19ee68743f3691627c09 100644 --- a/mozen/src/main/java/mozen/business/UserManager.java +++ b/mozen/src/main/java/mozen/business/UserManager.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import mozen.model.Role; import mozen.messages.SignupMessage; import mozen.model.User; +import mozen.repos.UserRepository; @Service public class UserManager implements IUserManager { diff --git a/mozen/src/main/java/mozen/business/CustomLayerRepository.java b/mozen/src/main/java/mozen/repos/CustomLayerRepository.java similarity index 88% rename from mozen/src/main/java/mozen/business/CustomLayerRepository.java rename to mozen/src/main/java/mozen/repos/CustomLayerRepository.java index 039a6606a3e29ac9b2524fba741e2dee383912eb..05f39aab575d86e8ef38cc35629ed8bc6ef51dfb 100644 --- a/mozen/src/main/java/mozen/business/CustomLayerRepository.java +++ b/mozen/src/main/java/mozen/repos/CustomLayerRepository.java @@ -1,4 +1,4 @@ -package mozen.business; +package mozen.repos; import org.springframework.data.repository.CrudRepository; diff --git a/mozen/src/main/java/mozen/business/ModelRepository.java b/mozen/src/main/java/mozen/repos/ModelRepository.java similarity index 97% rename from mozen/src/main/java/mozen/business/ModelRepository.java rename to mozen/src/main/java/mozen/repos/ModelRepository.java index d8bff04ed7f471be5d9a24dc61d44cf4275687c6..f61700e2c3d489991fce36f878b7017b6030aa5c 100644 --- a/mozen/src/main/java/mozen/business/ModelRepository.java +++ b/mozen/src/main/java/mozen/repos/ModelRepository.java @@ -1,4 +1,4 @@ -package mozen.business; +package mozen.repos; import java.util.Collection; diff --git a/mozen/src/main/java/mozen/business/TagCategoryRepository.java b/mozen/src/main/java/mozen/repos/TagCategoryRepository.java similarity index 78% rename from mozen/src/main/java/mozen/business/TagCategoryRepository.java rename to mozen/src/main/java/mozen/repos/TagCategoryRepository.java index dcf49ea02dad1bd72d9573973cf53cc4703cc6af..04bee966c8f815061e8f9eefa35cae63e0b0d380 100644 --- a/mozen/src/main/java/mozen/business/TagCategoryRepository.java +++ b/mozen/src/main/java/mozen/repos/TagCategoryRepository.java @@ -1,4 +1,4 @@ -package mozen.business; +package mozen.repos; import java.util.List; @@ -8,4 +8,5 @@ import mozen.model.TagCategory; public interface TagCategoryRepository extends CrudRepository<TagCategory, Long>{ List<TagCategory> findAll(); + List<TagCategory> findByOrderByNameAsc(); } \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/TagRepository.java b/mozen/src/main/java/mozen/repos/TagRepository.java similarity index 92% rename from mozen/src/main/java/mozen/business/TagRepository.java rename to mozen/src/main/java/mozen/repos/TagRepository.java index 5e1038f2921f829c2347f735d601c0c459da0662..7ac968c2a96d48b66554e3b3319499e2a3b35056 100644 --- a/mozen/src/main/java/mozen/business/TagRepository.java +++ b/mozen/src/main/java/mozen/repos/TagRepository.java @@ -1,4 +1,4 @@ -package mozen.business; +package mozen.repos; import java.util.Collection; import java.util.List; diff --git a/mozen/src/main/java/mozen/business/UserRepository.java b/mozen/src/main/java/mozen/repos/UserRepository.java similarity index 91% rename from mozen/src/main/java/mozen/business/UserRepository.java rename to mozen/src/main/java/mozen/repos/UserRepository.java index dbbe318917a6aeff0e0546ab6fa70882e0697171..df7a28641072788533bdc0bd778d454187c141b2 100644 --- a/mozen/src/main/java/mozen/business/UserRepository.java +++ b/mozen/src/main/java/mozen/repos/UserRepository.java @@ -1,4 +1,4 @@ -package mozen.business; +package mozen.repos; import java.util.List; diff --git a/mozen/src/main/java/mozen/utils/DatabaseFiller.java b/mozen/src/main/java/mozen/utils/DatabaseFiller.java index e556a2363c19c1bbb3592bd35a2b9a5a2a78a9fa..ac405fab0001204497075072ddba20034d57776f 100644 --- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java +++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java @@ -16,14 +16,14 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import mozen.business.ModelRepository; -import mozen.business.UserRepository; import mozen.model.CustomLayer; import mozen.model.Model; import mozen.model.Role; import mozen.model.Tag; import mozen.model.TagCategory; import mozen.model.User; +import mozen.repos.ModelRepository; +import mozen.repos.UserRepository; @Service public class DatabaseFiller { diff --git a/mozen/src/main/java/mozen/web/CustomLayerController.java b/mozen/src/main/java/mozen/web/CustomLayerController.java new file mode 100644 index 0000000000000000000000000000000000000000..85678a6a7cf26e9a7ee7a459d1d9b35e7f147b46 --- /dev/null +++ b/mozen/src/main/java/mozen/web/CustomLayerController.java @@ -0,0 +1,89 @@ +package mozen.web; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AnonymousAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import mozen.business.ILayerManager; +import mozen.business.IUserManager; +import mozen.model.CustomLayer; +import mozen.messages.ResponseMessage; +import mozen.model.User; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@RestController +@RequestMapping("/layers") +@CrossOrigin +public class CustomLayerController { + @Autowired + ILayerManager layerManager; + + @Autowired + IUserManager userManager; + + @GetMapping("/download") + public ResponseEntity<?> downloadLayerFile(@RequestParam(value = "id", required = true) Long id) { + ResponseMessage response = new ResponseMessage(false, ""); + + try { + CustomLayer layer = layerManager.getLayer(id); + return ResponseEntity.ok() + .contentType(MediaType.parseMediaType(layer.getFileType())) + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + layer.getName() + "\"") + .body(new ByteArrayResource(layer.getFile())); + } catch (Exception e) { + response.setError(true); + response.setMessage(e.getMessage()); + } + + return ResponseEntity.ok(response); + } + + @PostMapping("/upload") + 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 = getCurrentUser(); + 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); + layerManager.addLayerFile(file, id, name, user); + } catch (Exception e) { + response.setError(true); + response.setMessage(e.getMessage()); + } + + return ResponseEntity.ok(response); + } + + private User getCurrentUser() { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + + if (!(auth instanceof AnonymousAuthenticationToken)) { + if (auth.getPrincipal() instanceof org.springframework.security.core.userdetails.User) return null; + String username = (String) auth.getPrincipal(); + return userManager.getUserByUsername(username); + } else { + return null; + } + } +} \ 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 a3817d1b9e2c24f9b1a3767328d8eb297cf24eec..2603aa5586b996b44b1bc547b833c88632b3bb2b 100644 --- a/mozen/src/main/java/mozen/web/ModelController.java +++ b/mozen/src/main/java/mozen/web/ModelController.java @@ -21,13 +21,9 @@ import org.springframework.web.multipart.MultipartFile; import mozen.business.IModelManager; import mozen.business.IUserManager; -import mozen.model.CustomLayer; import mozen.model.Model; import mozen.messages.ModelMessage; import mozen.messages.ResponseMessage; -import mozen.messages.TagCategoryMessage; -import mozen.messages.TagMessage; -import mozen.model.TagCategory; import mozen.model.User; import org.springframework.web.bind.annotation.PostMapping; @@ -122,35 +118,6 @@ public class ModelController { return modelManager.getModels(); } - @GetMapping("/tags") - public Collection<TagCategory> getTags() { - return modelManager.getTags(); - } - - @PostMapping("/tags") - public ResponseEntity<ResponseMessage> addTag(@RequestBody @Valid TagMessage message) { - modelManager.addTag(message); - return ResponseEntity.ok().build(); - } - - @DeleteMapping("/tags") - public ResponseEntity<ResponseMessage> deleteTag(@RequestParam(value = "id", required = true) Long id) { - modelManager.removeTag(id); - return ResponseEntity.ok().build(); - } - - @PostMapping("/category") - public ResponseEntity<ResponseMessage> addCategory(@RequestBody @Valid TagCategoryMessage message) { - modelManager.addCategory(message); - return ResponseEntity.ok().build(); - } - - @DeleteMapping("/category") - public ResponseEntity<ResponseMessage> deleteCategory(@RequestParam(value = "id", required = true) Long id) { - modelManager.removeCategory(id); - return ResponseEntity.ok().build(); - } - @PostMapping("/upload") public ResponseEntity<ResponseMessage> uploadModelFile(@RequestParam("file") MultipartFile file, @RequestParam(value = "id", required = true) Long id) { ResponseMessage response = new ResponseMessage(false, ""); @@ -190,48 +157,6 @@ public class ModelController { return ResponseEntity.ok(response); } - @GetMapping("/downloadLayer") - public ResponseEntity<?> downloadLayerFile(@RequestParam(value = "id", required = true) Long id) { - ResponseMessage response = new ResponseMessage(false, ""); - - try { - CustomLayer layer = modelManager.getLayer(id); - return ResponseEntity.ok() - .contentType(MediaType.parseMediaType(layer.getFileType())) - .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + layer.getName() + "\"") - .body(new ByteArrayResource(layer.getFile())); - } catch (Exception e) { - response.setError(true); - response.setMessage(e.getMessage()); - } - - 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 = getCurrentUser(); - 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 getCurrentUser() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); diff --git a/mozen/src/main/java/mozen/web/TagController.java b/mozen/src/main/java/mozen/web/TagController.java new file mode 100644 index 0000000000000000000000000000000000000000..66f4721e9dd2471453a5ac2c6d5b475093e10600 --- /dev/null +++ b/mozen/src/main/java/mozen/web/TagController.java @@ -0,0 +1,59 @@ +package mozen.web; + +import java.util.Collection; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import mozen.business.ITagManager; +import mozen.messages.ResponseMessage; +import mozen.messages.TagCategoryMessage; +import mozen.messages.TagMessage; +import mozen.model.TagCategory; + +@RestController +@RequestMapping("/tags") +@CrossOrigin +public class TagController { + @Autowired + ITagManager tagManager; + + @GetMapping("/") + public Collection<TagCategory> getTags() { + return tagManager.getTags(); + } + + @PostMapping("/") + public ResponseEntity<ResponseMessage> addTag(@RequestBody @Valid TagMessage message) { + tagManager.addTag(message); + return ResponseEntity.ok().build(); + } + + @DeleteMapping("/") + public ResponseEntity<ResponseMessage> deleteTag(@RequestParam(value = "id", required = true) Long id) { + tagManager.removeTag(id); + return ResponseEntity.ok().build(); + } + + @PostMapping("/category") + public ResponseEntity<ResponseMessage> addCategory(@RequestBody @Valid TagCategoryMessage message) { + tagManager.addCategory(message); + return ResponseEntity.ok().build(); + } + + @DeleteMapping("/category") + public ResponseEntity<ResponseMessage> deleteCategory(@RequestParam(value = "id", required = true) Long id) { + tagManager.removeCategory(id); + return ResponseEntity.ok().build(); + } +} \ No newline at end of file