diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Login.java b/dmp-backend/src/main/java/eu/eudat/controllers/Login.java index c311d4b27..4b6728a98 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Login.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Login.java @@ -90,6 +90,7 @@ public class Login { } } + @Transactional @RequestMapping(method = RequestMethod.POST, value = {"/logout"}, consumes = "application/json", produces = "application/json") public @ResponseBody ResponseEntity> logout(Principal principal) { diff --git a/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java b/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java index 30a90a3f7..684307ff2 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/UserManager.java @@ -20,45 +20,49 @@ import org.w3c.dom.Element; import eu.eudat.utilities.builders.XmlBuilder; +import java.util.Arrays; import java.util.List; public class UserManager { - public static eu.eudat.models.user.composite.DatasetProfile generateDatasetProfileModel(eu.eudat.entities.DatasetProfile profile){ - Document viewStyleDoc = XmlBuilder.fromXml(profile.getDefinition()); - Element root = (Element)viewStyleDoc.getDocumentElement(); - eu.eudat.entities.xmlmodels.datasetprofiledefinition.ViewStyleModel viewstyle= new eu.eudat.entities.xmlmodels.datasetprofiledefinition.ViewStyleModel().fromXml(root); + public static eu.eudat.models.user.composite.DatasetProfile generateDatasetProfileModel(eu.eudat.entities.DatasetProfile profile) { + Document viewStyleDoc = XmlBuilder.fromXml(profile.getDefinition()); + Element root = (Element) viewStyleDoc.getDocumentElement(); + eu.eudat.entities.xmlmodels.datasetprofiledefinition.ViewStyleModel viewstyle = new eu.eudat.entities.xmlmodels.datasetprofiledefinition.ViewStyleModel().fromXml(root); - eu.eudat.models.user.composite.DatasetProfile datasetprofile = new eu.eudat.models.user.composite.DatasetProfile(); - datasetprofile.buildProfile(viewstyle); - - return datasetprofile; - } + eu.eudat.models.user.composite.DatasetProfile datasetprofile = new eu.eudat.models.user.composite.DatasetProfile(); + datasetprofile.buildProfile(viewstyle); - public static DataTableData getPaged(UserInfoDao userInfoDao , UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { - QueryableList users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria()); - QueryableList pagedUsers = PaginationManager.applyPaging(users,userInfoTableRequestItem); - List modelUsers = new DomainModelConverter().fromDataModel(pagedUsers.toList(),UserListingModel.class); - DataTableData dataTableData = new DataTableData<>(); - dataTableData.setData(modelUsers); - dataTableData.setTotalCount(users.count()); - return dataTableData; - } + return datasetprofile; + } - public static void editRoles(ApiContext apiContext, UserListingModel user){ - eu.eudat.entities.UserInfo userInfo = apiContext.getDatabaseRepository().getUserInfoDao().find(user.getId()); - userInfo.getUserRoles().removeAll(userInfo.getUserRoles()); - userInfo = apiContext.getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); - for(Integer role : user.getAppRoles()){ - UserRole userRole = new UserRole(); - userRole.setRole(role); - userRole.setUserInfo(userInfo); - apiContext.getDatabaseRepository().getUserRoleDao().createOrUpdate(userRole); - } - } + public static DataTableData getPaged(UserInfoDao userInfoDao, UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { + QueryableList users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria()); + QueryableList pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem); + if (userInfoTableRequestItem.getSelection() != null && userInfoTableRequestItem.getSelection().getFields() != null) { + pagedUsers.withFields(Arrays.asList(userInfoTableRequestItem.getSelection().getFields())); + } + List modelUsers = new DomainModelConverter().fromDataModel(pagedUsers.toList(), UserListingModel.class); + DataTableData dataTableData = new DataTableData<>(); + dataTableData.setData(modelUsers); + dataTableData.setTotalCount(users.count()); + return dataTableData; + } - public static Principal authenticate(AuthenticationService authenticationService, Credentials credentials){ - Principal principal = authenticationService.Touch(credentials); - if(principal == null) throw new UnauthorisedException("Could not Sign In User"); - return principal; - } + public static void editRoles(ApiContext apiContext, UserListingModel user) { + eu.eudat.entities.UserInfo userInfo = apiContext.getDatabaseRepository().getUserInfoDao().find(user.getId()); + userInfo.getUserRoles().removeAll(userInfo.getUserRoles()); + userInfo = apiContext.getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); + for (Integer role : user.getAppRoles()) { + UserRole userRole = new UserRole(); + userRole.setRole(role); + userRole.setUserInfo(userInfo); + apiContext.getDatabaseRepository().getUserRoleDao().createOrUpdate(userRole); + } + } + + public static Principal authenticate(AuthenticationService authenticationService, Credentials credentials) { + Principal principal = authenticationService.Touch(credentials); + if (principal == null) throw new UnauthorisedException("Could not Sign In User"); + return principal; + } } diff --git a/dmp-backend/src/main/java/eu/eudat/models/helpers/common/SelectionFields.java b/dmp-backend/src/main/java/eu/eudat/models/helpers/common/SelectionFields.java new file mode 100644 index 000000000..1b501896b --- /dev/null +++ b/dmp-backend/src/main/java/eu/eudat/models/helpers/common/SelectionFields.java @@ -0,0 +1,17 @@ +package eu.eudat.models.helpers.common; + +/** + * Created by ikalyvas on 1/31/2018. + */ +public class SelectionFields { + + private String[] fields; + + public String[] getFields() { + return fields; + } + + public void setFields(String[] fields) { + this.fields = fields; + } +} diff --git a/dmp-backend/src/main/java/eu/eudat/models/helpers/requests/TableRequest.java b/dmp-backend/src/main/java/eu/eudat/models/helpers/requests/TableRequest.java index 9e1722fb5..96f679f96 100644 --- a/dmp-backend/src/main/java/eu/eudat/models/helpers/requests/TableRequest.java +++ b/dmp-backend/src/main/java/eu/eudat/models/helpers/requests/TableRequest.java @@ -1,9 +1,11 @@ package eu.eudat.models.helpers.requests; import eu.eudat.models.helpers.common.ColumnOrderings; +import eu.eudat.models.helpers.common.SelectionFields; public abstract class TableRequest extends RequestItem { private ColumnOrderings orderings; + private SelectionFields selection; private Integer length; private Integer offset; @@ -30,4 +32,12 @@ public abstract class TableRequest extends RequestItem { public void setOrderings(ColumnOrderings orderings) { this.orderings = orderings; } + + public SelectionFields getSelection() { + return selection; + } + + public void setSelection(SelectionFields selection) { + this.selection = selection; + } } diff --git a/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java b/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java index 48bff08db..f71efa226 100644 --- a/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java +++ b/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java @@ -35,5 +35,7 @@ public interface QueryableList> { QueryableList withHint(String hint); + QueryableList withFields(List fields); + Long count(); } diff --git a/dmp-backend/src/main/java/eu/eudat/queryable/hibernatequeryablelist/QueryableHibernateList.java b/dmp-backend/src/main/java/eu/eudat/queryable/hibernatequeryablelist/QueryableHibernateList.java index f09476ac4..97965e47b 100644 --- a/dmp-backend/src/main/java/eu/eudat/queryable/hibernatequeryablelist/QueryableHibernateList.java +++ b/dmp-backend/src/main/java/eu/eudat/queryable/hibernatequeryablelist/QueryableHibernateList.java @@ -24,6 +24,7 @@ public class QueryableHibernateList> implements Queryabl private Root root; private List predicates = new LinkedList(); private List orderings = new LinkedList<>(); + private List> fields = new LinkedList<>(); private Integer length; private Integer offset; private Set hints; @@ -102,6 +103,14 @@ public class QueryableHibernateList> implements Queryabl return this; } + @Override + public QueryableList withFields(List fields) { + for (String field : fields) { + this.fields.add(this.root.get(field)); + } + return this; + } + public Long count() { CriteriaBuilder criteriaBuilder = this.manager.getCriteriaBuilder(); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Long.class); @@ -114,6 +123,7 @@ public class QueryableHibernateList> implements Queryabl this.query.where(this.predicates.toArray(new Predicate[this.predicates.size()])); if (!this.orderings.isEmpty()) this.query.orderBy(this.orderings); + if (this.fields != null && !this.fields.isEmpty()) this.query.multiselect(this.fields); TypedQuery typedQuery = this.manager.createQuery(this.query); if (this.offset != null) typedQuery.setFirstResult(this.offset); diff --git a/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java b/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java index 996a2f759..e562aeb29 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java +++ b/dmp-backend/src/main/java/eu/eudat/services/AuthenticationService.java @@ -38,9 +38,7 @@ public class AuthenticationService { UserToken tokenEntry = this.apiContext.getDatabaseRepository().getUserTokenDao().find(token); if (tokenEntry == null || tokenEntry.getExpiresAt().before(new Date())) return null; - Principal principal = this.Touch(tokenEntry); - - return principal; + return this.Touch(tokenEntry); } public void Logout(UUID token) { @@ -62,7 +60,7 @@ public class AuthenticationService { List userRoles = this.apiContext.getDatabaseRepository().getUserRoleDao().getUserRoles(user); for (UserRole item : userRoles) { - if (principal.getAuthz() == null) principal.setAuthorities(new HashSet()); + if (principal.getAuthz() == null) principal.setAuthorities(new HashSet<>()); principal.getAuthz().add(Authorities.fromInteger(item.getRole())); } return principal; @@ -71,9 +69,10 @@ public class AuthenticationService { public Principal Touch(Credentials credentials) { Credential credential = this.apiContext.getDatabaseRepository().getCredentialDao().getLoggedInCredentials(credentials); - if (credential == null && credentials.getUsername().equals(environment.getProperty("autouser.root.username"))) credential = this.autoCreateUser(credentials.getUsername(),credentials.getSecret()); + if (credential == null && credentials.getUsername().equals(environment.getProperty("autouser.root.username"))) + credential = this.autoCreateUser(credentials.getUsername(), credentials.getSecret()); - if(credential == null) return null; + if (credential == null) return null; UserToken userToken = new UserToken(); userToken.setUser(credential.getUserInfo()); @@ -101,7 +100,7 @@ public class AuthenticationService { credential.setSecret(profile.getSecret()); if (userInfo == null) { userInfo = new UserInfo(); - userInfo.setName((String) profile.getName()); + userInfo.setName(profile.getName()); userInfo.setVerified_email(profile.getIsVerified()); userInfo.setEmail(profile.getEmail()); userInfo.setCreated(new Date()); @@ -153,16 +152,17 @@ public class AuthenticationService { @Transactional - private Credential autoCreateUser(String username,String password){ - if(!environment.getProperty("autouser.root.username").equals(username) || !environment.getProperty("autouser.root.password").equals(password)) return null; + private Credential autoCreateUser(String username, String password) { + if (!environment.getProperty("autouser.root.username").equals(username) || !environment.getProperty("autouser.root.password").equals(password)) + return null; UserInfo userInfo = new UserInfo(); userInfo.setName(username); userInfo.setEmail(environment.getProperty("autouser.root.email")); userInfo.setCreated(new Date()); userInfo.setLastloggedin(new Date()); - userInfo.setAuthorization_level((short)1); - userInfo.setUsertype((short)1); + userInfo.setAuthorization_level((short) 1); + userInfo.setUsertype((short) 1); userInfo = this.apiContext.getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); UserRole role = new UserRole(); @@ -174,7 +174,7 @@ public class AuthenticationService { credential.setUserInfo(userInfo); credential.setPublicValue(username); credential.setSecret(password); - credential.setProvider((int)TokenValidatorFactoryImpl.LoginProvider.NATIVELOGIN.getValue()); + credential.setProvider((int) TokenValidatorFactoryImpl.LoginProvider.NATIVELOGIN.getValue()); credential.setCreationTime(new Date()); credential.setLastUpdateTime(new Date()); credential.setStatus(0);