Skip to content
Snippets Groups Projects
Commit 7fa24200 authored by Thomas's avatar Thomas
Browse files

Refactor JPA to proper Spring data

parent 274bf430
Branches
No related tags found
No related merge requests found
Showing
with 124 additions and 317 deletions
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
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
......@@ -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);
......
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
......@@ -11,7 +11,6 @@ public interface IUserManager {
User getUser(Long id);
User getUserByUsername(String username);
boolean resetPassword(String email);
boolean changePassword(String token, String password);
}
\ No newline at end of file
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
package mozen.business;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
......@@ -21,7 +22,16 @@ import mozen.model.User;
public class ModelManager implements IModelManager {
@Autowired
IModelDao dao;
private ModelRepository modelRepo;
@Autowired
private TagRepository tagRepo;
@Autowired
private TagCategoryRepository tagCategoryRepo;
@Autowired
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
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
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
......
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
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
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
......@@ -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
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
......@@ -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) {
......
......@@ -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());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment