diff --git a/mozen/src/main/java/mozen/business/CustomLayerRepository.java b/mozen/src/main/java/mozen/business/CustomLayerRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..039a6606a3e29ac9b2524fba741e2dee383912eb --- /dev/null +++ b/mozen/src/main/java/mozen/business/CustomLayerRepository.java @@ -0,0 +1,9 @@ +package mozen.business; + +import org.springframework.data.repository.CrudRepository; + +import mozen.model.CustomLayer; + +public interface CustomLayerRepository extends CrudRepository<CustomLayer, Long>{ + +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/IModelDao.java b/mozen/src/main/java/mozen/business/IModelDao.java deleted file mode 100644 index 96b56d5f134e71b2df74c0d5953acab43c63dfe0..0000000000000000000000000000000000000000 --- a/mozen/src/main/java/mozen/business/IModelDao.java +++ /dev/null @@ -1,28 +0,0 @@ -package mozen.business; - -import java.util.Collection; - -import mozen.model.CustomLayer; -import mozen.model.Model; -import mozen.model.Tag; -import mozen.model.TagCategory; - -public interface IModelDao { - void addModel(Model m); - void updateModel(Model m); - void removeModel(long id); - - void addLayer(CustomLayer l); - void updateLayer(CustomLayer l); - void removeLayer(long id); - - void addTag(Tag tag); - Collection<TagCategory> getTags(); - Tag getTagByName(String name); - TagCategory getTagCategory(long id); - - Model findModel(long id); - Collection<Model> findModelsByName(String name); - - CustomLayer findLayer(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 7d6d2ffc4abc51e750750320b6ac59c2d7ec98dd..738c7c320fa36f243bce05b94d48798d8641863a 100644 --- a/mozen/src/main/java/mozen/business/IModelManager.java +++ b/mozen/src/main/java/mozen/business/IModelManager.java @@ -6,22 +6,18 @@ 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.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; - Long addLayer(long modelId, CustomLayer layer, User user) throws Exception; - void updateLayer(long id, CustomLayer layer, User user) throws Exception; - void removeLayer(long id, User user) throws Exception; - - void addFile(MultipartFile file, 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); diff --git a/mozen/src/main/java/mozen/business/IUserDao.java b/mozen/src/main/java/mozen/business/IUserDao.java deleted file mode 100644 index cef4958a8291d2b9a8118e231c2c968d8656ec07..0000000000000000000000000000000000000000 --- a/mozen/src/main/java/mozen/business/IUserDao.java +++ /dev/null @@ -1,12 +0,0 @@ -package mozen.business; - -import mozen.model.User; - -public interface IUserDao { - void addUser(User u); - void updateUser(User u); - void removeUser(long id); - - User findUser(long id); - User findUserByUsername(String username); -} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/IUserManager.java b/mozen/src/main/java/mozen/business/IUserManager.java index 5129f21e326f0727e560b12fcd9af1b8de377605..66e92bfdca25165ab9bd63b3988109f4d66d1460 100644 --- a/mozen/src/main/java/mozen/business/IUserManager.java +++ b/mozen/src/main/java/mozen/business/IUserManager.java @@ -10,7 +10,6 @@ public interface IUserManager { User getUser(Long id); User getUserByUsername(String username); - boolean resetPassword(String email); boolean changePassword(String token, String password); diff --git a/mozen/src/main/java/mozen/business/ModelDao.java b/mozen/src/main/java/mozen/business/ModelDao.java deleted file mode 100644 index 2e2d8e17057f1297daa811216250f06b58c42e98..0000000000000000000000000000000000000000 --- a/mozen/src/main/java/mozen/business/ModelDao.java +++ /dev/null @@ -1,111 +0,0 @@ -package mozen.business; - -import java.util.Collection; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.TypedQuery; -import javax.transaction.Transactional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Repository; - -import mozen.model.CustomLayer; -import mozen.model.Model; -import mozen.model.Tag; -import mozen.model.TagCategory; - -@Repository -@Transactional -public class ModelDao implements IModelDao { - - @Autowired - @PersistenceContext(unitName = "defaultData") - EntityManager em; - - @Override - public void addModel(Model m) { - em.persist(m); - } - - @Override - public void updateModel(Model m) { - em.merge(m); - } - - @Override - public void removeModel(long id) { - em.remove(findModel(id)); - } - - @Override - public Model findModel(long id) { - return em.find(Model.class, id); - } - - @Override - public Collection<Model> findModelsByName(String name) { - String query = "SELECT m FROM Model m WHERE lower(m.name) LIKE :name ORDER BY votes ASC"; - TypedQuery<Model> q = em.createQuery(query, Model.class); - q.setParameter("name", "%" + name.toLowerCase() + "%"); - try { - return q.getResultList(); - } catch (Exception e) { - return null; - } - } - - @Override - public Collection<TagCategory> getTags() { - String query = "SELECT t FROM TagCategory t"; - TypedQuery<TagCategory> q = em.createQuery(query, TagCategory.class); - try { - return q.getResultList(); - } catch (Exception e) { - return null; - } - } - - @Override - public void addLayer(CustomLayer l) { - em.persist(l); - } - - @Override - public void updateLayer(CustomLayer l) { - em.merge(l); - } - - @Override - public void removeLayer(long id) { - em.remove(findLayer(id)); - } - - @Override - public CustomLayer findLayer(long id) { - return em.find(CustomLayer.class, id); - } - - @Override - public Tag getTagByName(String name) { - String query = "SELECT t FROM Tag t WHERE lower(t.name) LIKE :name"; - TypedQuery<Tag> q = em.createQuery(query, Tag.class); - q.setParameter("name", "%" + name.toLowerCase() + "%"); - try { - return q.getSingleResult(); - } catch (Exception e) { - return null; - } - } - - @Override - public void addTag(Tag tag) { - em.persist(tag); - } - - @Override - public TagCategory getTagCategory(long id) { - return em.find(TagCategory.class, id); - } - -} \ 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 938034e832288dfd6bdbaefa1d67ec5f6ed5f7a3..6d68263cf9a2915feba58f87c25466e9ad35867f 100644 --- a/mozen/src/main/java/mozen/business/ModelManager.java +++ b/mozen/src/main/java/mozen/business/ModelManager.java @@ -1,5 +1,6 @@ package mozen.business; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashSet; @@ -19,9 +20,18 @@ import mozen.model.User; @Service public class ModelManager implements IModelManager { + + @Autowired + private ModelRepository modelRepo; + + @Autowired + private TagRepository tagRepo; + + @Autowired + private TagCategoryRepository tagCategoryRepo; @Autowired - IModelDao dao; + private CustomLayerRepository layerRepo; @Override public Long addModel(ModelMessage message, User user) throws Exception { @@ -33,134 +43,103 @@ public class ModelManager implements IModelManager { model.setShortDescription(message.getShortDescription()); model.setLongDescription(message.getLongDescription()); - System.err.println("[MODEL MANAGER] add model 2"); - if (message.getTags() != null) { - 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); + Tag tag = tagRepo.findByName(tagName).get(0); tags.add(tag); } - System.err.println("[MODEL MANAGER] add model new tag 2.2"); model.setTags(tags); } - 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] add model 4"); - try { - dao.addModel(model); + modelRepo.save(model); } catch (Exception e) { System.err.println("[MODEL MANAGER] Add model error "+e.getMessage()); } - - 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); + public void addModelFile(MultipartFile file, long id, User user) throws Exception { + Model model = modelRepo.findById(id).get(); + 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"); + + modelRepo.save(model); } @Override public void updateModel(Model model, long id, User user) throws Exception { - Model modelToUpdate = dao.findModel(id); + Model modelToUpdate = modelRepo.findById(id).get(); + if (modelToUpdate == null) throw new Exception("Unknown model"); if (!isModelAuthor(modelToUpdate, user)) throw new Exception("Not the author"); model.setId(id); - dao.updateModel(model); + + modelRepo.save(model); } @Override public void removeModel(long id, User user) throws Exception { - Model model = dao.findModel(id); + Model model = modelRepo.findById(id).get(); + if (model == null) throw new Exception("Unknown model"); if (!isModelAuthor(model, user)) throw new Exception("Not the author"); - dao.removeModel(id); + modelRepo.deleteById(id); } @Override public Model getModel(long id) { - return dao.findModel(id); + return modelRepo.findById(id).get(); } @Override public Collection<Model> findModel(String name) { - Collection<Model> result = dao.findModelsByName(name); + Collection<Model> result = modelRepo.findByName(name); return result; } @Override public Collection<TagCategory> getTags() { - return dao.getTags(); - } - - @Override - public Long addLayer(long modelId, CustomLayer layer, 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"); - - layer.setModel(model); - dao.addLayer(layer); - - return layer.getId(); - } - - @Override - public void updateLayer(long id, CustomLayer layer, User user) throws Exception { - CustomLayer layerToUpdate = dao.findLayer(id); - if (layerToUpdate == null) - throw new Exception("Unknown layer"); - if (!isLayerAuthor(layerToUpdate, user)) - throw new Exception("Not the author"); - - layer.setId(id); - dao.updateLayer(layer); + Collection<TagCategory> categories = new ArrayList<TagCategory>(); + tagCategoryRepo.findAll().forEach(categories::add); + return categories; } @Override public void removeLayer(long id, User user) throws Exception { - CustomLayer layer = dao.findLayer(id); + CustomLayer layer = layerRepo.findById(id).get(); + if (layer == null) throw new Exception("Unknown layer"); if (!isLayerAuthor(layer, user)) throw new Exception("Not the author"); - dao.removeLayer(id); + layerRepo.deleteById(id); } @Override public void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception { - Model model = dao.findModel(modelId); + Model model = modelRepo.findById(modelId).get(); + if (model == null) throw new Exception("Unknown model"); if (!isModelAuthor(model, user)) @@ -173,7 +152,7 @@ public class ModelManager implements IModelManager { model.getCustomLayers().add(layer); - dao.updateModel(model); + modelRepo.save(model); } private boolean isLayerAuthor(CustomLayer layer, User user) { @@ -187,12 +166,14 @@ public class ModelManager implements IModelManager { @Override public void addTag(TagMessage message) { System.err.println("[MODEL MANAGER] add tag n:"+message.getName()+" c:"+message.getCategoryId()); - TagCategory category = dao.getTagCategory(message.getCategoryId()); + Long categoryId = message.getCategoryId(); + TagCategory category = tagCategoryRepo.findById(categoryId).get(); + Tag tag = new Tag(); tag.setName(message.getName()); tag.setCategory(category); - dao.addTag(tag); + tagRepo.save(tag); } } \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/ModelRepository.java b/mozen/src/main/java/mozen/business/ModelRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..ec6ef5295acdc9abb22b3134bb92a243784efdbe --- /dev/null +++ b/mozen/src/main/java/mozen/business/ModelRepository.java @@ -0,0 +1,11 @@ +package mozen.business; + +import java.util.List; + +import org.springframework.data.repository.PagingAndSortingRepository; + +import mozen.model.Model; + +public interface ModelRepository extends PagingAndSortingRepository<Model, Long> { + List<Model> findByName(String name); +} \ 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 index bfc00b3ea0f10ca0c21f9e05dbc120f2efbaeba9..c2f13821e09212923627d8de0e89c6d5c9af7837 100644 --- a/mozen/src/main/java/mozen/business/SpringBusinessConfig.java +++ b/mozen/src/main/java/mozen/business/SpringBusinessConfig.java @@ -1,17 +1,14 @@ package mozen.business; -import java.util.Properties; - import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; 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.DriverManagerDataSource; +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; @@ -25,34 +22,21 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @PropertySource("classpath:application.properties") public class SpringBusinessConfig { @Bean - public DataSource dataSource( - @Value("${datasource.driverName}") String driverName, - @Value("${datasource.url}") String url, - @Value("${datasource.username}") String user, - @Value("${datasource.password}") String password) { - DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName(driverName); - dataSource.setUrl(url); - dataSource.setUsername(user); - dataSource.setPassword(password); - return dataSource; + public DataSource dataSource() { + EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); + return builder.setType(EmbeddedDatabaseType.HSQL).build(); } - @Bean(name = "defaultData") - public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Autowired DataSource ds) { - LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); - em.setDataSource(ds); - em.setPackagesToScan(new String[] { "mozen.model" }); - em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); - em.setBeanName("defaultData"); - - Properties properties = new Properties(); - properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); - properties.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); - properties.setProperty("hibernate.show_sql", "true"); - properties.setProperty("hibernate.format_sql", "true"); - em.setJpaProperties(properties); - return em; + @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 diff --git a/mozen/src/main/java/mozen/business/TagCategoryRepository.java b/mozen/src/main/java/mozen/business/TagCategoryRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..9d36c4e563620cd50bac8a4ffdb0579bc7dc4c6f --- /dev/null +++ b/mozen/src/main/java/mozen/business/TagCategoryRepository.java @@ -0,0 +1,9 @@ +package mozen.business; + +import org.springframework.data.repository.CrudRepository; + +import mozen.model.TagCategory; + +public interface TagCategoryRepository extends CrudRepository<TagCategory, Long>{ + +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/TagRepository.java b/mozen/src/main/java/mozen/business/TagRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..5fa98e360f7634ebdcfcbc750dece13db5dc5ad6 --- /dev/null +++ b/mozen/src/main/java/mozen/business/TagRepository.java @@ -0,0 +1,11 @@ +package mozen.business; + +import java.util.List; + +import org.springframework.data.repository.CrudRepository; + +import mozen.model.Tag; + +public interface TagRepository extends CrudRepository<Tag, Long>{ + List<Tag> findByName(String name); +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/UserDao.java b/mozen/src/main/java/mozen/business/UserDao.java deleted file mode 100644 index dac133b97080427c86d7fe77b11531e7c5fe81a9..0000000000000000000000000000000000000000 --- a/mozen/src/main/java/mozen/business/UserDao.java +++ /dev/null @@ -1,54 +0,0 @@ -package mozen.business; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.TypedQuery; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -import mozen.model.User; - -@Repository -@Transactional -public class UserDao implements IUserDao { - - @Autowired - @PersistenceContext(unitName = "defaultData") - EntityManager em; - - @Override - public void addUser(User u) { - em.persist(u); - } - - @Override - public void updateUser(User u) { - em.merge(u); - } - - @Override - public void removeUser(long id) { - User u = findUser(id); - em.remove(u); - } - - @Override - public User findUser(long id) { - return em.find(User.class, id); - } - - @Override - public User findUserByUsername(String username) { - String query = "SELECT u FROM User u WHERE u.username = : username"; - TypedQuery<User> q = em.createQuery(query, User.class); - q.setParameter("username", username); - try { - return q.getSingleResult(); - } catch (Exception e) { - return null; - } - } - -} \ 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 87a980c630b476d39fe38524241883dadd6b583d..d42d17db4a84720b33bd5ed2fee343817cf4ea3c 100644 --- a/mozen/src/main/java/mozen/business/UserManager.java +++ b/mozen/src/main/java/mozen/business/UserManager.java @@ -12,36 +12,37 @@ import mozen.model.User; public class UserManager implements IUserManager { @Autowired - IUserDao dao; + UserRepository repo; @Autowired BCryptPasswordEncoder bCryptPasswordEncoder; @Override public Long addUser(SignupMessage message) { + System.err.println("[USER MANAGER] add new user u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword()); User u = new User(); u.setEmail(message.getEmail()); u.setUsername(message.getUsername()); u.setPassword(bCryptPasswordEncoder.encode(message.getPassword())); u.setRole(Role.Default); - dao.addUser(u); + repo.save(u); return u.getId(); } @Override public void updateUser(User u) { - dao.updateUser(u); + repo.save(u); } @Override public void removeUser(Long id) { - dao.removeUser(id); + repo.deleteById(id); } @Override public User getUser(Long id) { - return dao.findUser(id); + return repo.findById(id).get(); } @Override @@ -58,7 +59,7 @@ public class UserManager implements IUserManager { @Override public User getUserByUsername(String username) { - return dao.findUserByUsername(username); + return repo.findByUsername(username).get(0); } } \ No newline at end of file diff --git a/mozen/src/main/java/mozen/business/UserRepository.java b/mozen/src/main/java/mozen/business/UserRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..adb8194a159021a0454d06301815a79e14be196a --- /dev/null +++ b/mozen/src/main/java/mozen/business/UserRepository.java @@ -0,0 +1,11 @@ +package mozen.business; + +import java.util.List; + +import org.springframework.data.repository.PagingAndSortingRepository; + +import mozen.model.User; + +public interface UserRepository extends PagingAndSortingRepository<User, Long> { + List<User> findByUsername(String username); +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/utils/DatabaseFiller.java b/mozen/src/main/java/mozen/utils/DatabaseFiller.java index 5d8f692baadad8b68e4147555cda6baf94c31292..378c8e6b52f20ea74cc8f1789033a84ef8787f55 100644 --- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java +++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java @@ -15,8 +15,8 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import mozen.business.IModelDao; -import mozen.business.IUserDao; +import mozen.business.ModelRepository; +import mozen.business.UserRepository; import mozen.model.CustomLayer; import mozen.model.Model; import mozen.model.Role; @@ -27,10 +27,10 @@ import mozen.model.User; @Service public class DatabaseFiller { @Autowired - IModelDao daoModel; + ModelRepository modelRepo; @Autowired - IUserDao daoUser; + UserRepository userRepo; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; @@ -97,10 +97,10 @@ public class DatabaseFiller { m1layers.add(l2); m1.setCustomLayers(m1layers); - daoUser.addUser(u1); - daoUser.addUser(u2); + userRepo.save(u1); + userRepo.save(u2); - daoModel.addModel(m1); + modelRepo.save(m1); } Set<Tag> tagLoader(String filePath) { diff --git a/mozen/src/main/java/mozen/web/ModelController.java b/mozen/src/main/java/mozen/web/ModelController.java index 5506252be9153e264354295aaed45c1ff81b90d3..974687641e599ed620399323d8a8c3489182f1fd 100644 --- a/mozen/src/main/java/mozen/web/ModelController.java +++ b/mozen/src/main/java/mozen/web/ModelController.java @@ -138,7 +138,7 @@ public class ModelController { try { System.err.println("[MODEL CONTROLLER] model file upload n:"+file.getName()); - modelManager.addFile(file, id, user); + modelManager.addModelFile(file, id, user); } catch (Exception e) { response.setError(true); response.setMessage(e.getMessage());