argos/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java

178 lines
9.4 KiB
Java

package eu.eudat.logic.managers;
import eu.eudat.commons.scope.user.UserScope;
import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity;
import eu.eudat.commons.types.xml.XmlBuilder;
import eu.eudat.data.DescriptionTemplateEntity;
import eu.eudat.data.UserCredentialEntity;
import eu.eudat.data.UserEntity;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.query.UserCredentialQuery;
import gr.cite.commons.web.authz.service.AuthorizationService;
import gr.cite.tools.data.query.QueryFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.management.InvalidApplicationException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Component
public class UserManager {
private static final Logger logger = LoggerFactory.getLogger(UserManager.class);
private final ApiContext apiContext;
private final Environment environment;
private final UserScope userScope;
private final QueryFactory queryFactory;
private final AuthorizationService authorizationService;
@Autowired
public UserManager(ApiContext apiContext, Environment environment, UserScope userScope, QueryFactory queryFactory, AuthorizationService authorizationService) {
this.apiContext = apiContext;
this.environment = environment;
this.userScope = userScope;
this.queryFactory = queryFactory;
this.authorizationService = authorizationService;
}
public eu.eudat.models.data.user.composite.DatasetProfile generateDatasetProfileModel(DescriptionTemplateEntity profile) {
Document viewStyleDoc = XmlBuilder.fromXml(profile.getDefinition());
Element root = (Element) viewStyleDoc.getDocumentElement();
DefinitionEntity viewstyle = new DefinitionEntity().fromXml(root);
eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = new eu.eudat.models.data.user.composite.DatasetProfile();
datasetprofile.buildProfile(viewstyle);
return datasetprofile;
}
// public DataTableData<UserListingModel> getPaged(UserInfoTableRequestItem userInfoTableRequestItem) throws Exception {
// QueryableList<UserEntity> users = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoTableRequestItem.getCriteria()).withHint(HintedModelFactory.getHint(UserListingModel.class));
// QueryableList<UserEntity> pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem);
//
// List<UserListingModel> modelUsers = pagedUsers.select(item -> new UserListingModel().fromDataModel(item));
// return apiContext.getOperationsContext().getBuilderFactory().getBuilder(DataTableDataBuilder.class).totalCount(users.count()).data(modelUsers).build();
// }
// public List<UserCredential> getCredentials(UUID userId) throws InvalidApplicationException {
// List<UserCredential> results = new ArrayList<>();
// UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId);
// List<UserCredentialEntity> credentials = this.queryFactory.query(UserCredentialQuery.class).userIds(user.getId()).collect();
// credentials.forEach(credential -> {
// UserCredential userCredential = new UserCredential();
// results.add(userCredential);
// });
// return results;
// }
// public UserProfile getSingle(UUID userId) throws Exception {
// UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId);
// UserProfile profile = new UserProfile().fromDataModel(user);
// List<Integer> roles = new LinkedList<>();
// DataManagementPlanCriteria criteria = new DataManagementPlanCriteria();
// criteria.setAllVersions(false);
// QueryableList<DmpEntity> items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria);
// List<DmpEntity> dmps = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(items, userId, roles).take(5).toList();
// profile.setAssociatedDmps(dmps.stream().map(x -> new DataManagementPlan().fromDataModel(x)).collect(Collectors.toList()));
// return profile;
// }
// public void editRoles(UserListingModel user) throws InvalidApplicationException {
// UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(user.getId());
// //userInfo.getUserRoles().stream().forEach(item -> apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().delete(item)); //TODO
// for (String role : user.getAppRoles()) {
// UserRoleEntity userRole = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserRoleBuilder.class).role(role).userInfo(userInfo).build();
// apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(userRole);
// }
// }
// public void updateSettings(Map<String, Object> settings) throws IOException, InvalidApplicationException {
// UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId());
// apiContext.getOperationsContext().getDatabaseRepository().detachEntity(userInfo);
// HashMap<String, Object> result =
// new ObjectMapper().readValue(userInfo.getAdditionalInfo(), HashMap.class);
// userInfo.setName(settings.entrySet().stream().filter(entry -> entry.getKey().equals("name")).filter(Objects::nonNull).map(entry -> entry.getValue().toString()).findFirst().orElse(userInfo.getName()));
// settings.remove("name");
// result.putAll(settings);
// userInfo.setAdditionalInfo(new JSONObject(result).toString());
// apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao()
// .createOrUpdate(userInfo);
// }
//
// public DataTableData<UserListingModel> getCollaboratorsPaged(UserInfoTableRequestItem userInfoTableRequestItem) throws Exception {
// UserInfoDao userInfoDao = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao();
// QueryableList<UserEntity> users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria());
//
// List<UserListingModel> colaborators = userInfoDao.getAuthenticated(users, this.userScope.getUserId())
// .withHint(HintedModelFactory.getHint(UserListingModel.class))
// .select(colaborator -> new UserListingModel().fromDataModel(colaborator));
//
// DataTableData<UserListingModel> dataTableData = new DataTableData<>();
// dataTableData.setData(colaborators);
// dataTableData.setTotalCount((long) colaborators.size());
// return dataTableData;
// }
//
// public ResponseEntity<byte[]> exportToCsv() throws IOException, InvalidApplicationException {
//
// this.authorizationService.authorizeForce(Permission.AdminRole);
//
// List<UserEntity> users = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().toList();
// StringBuilder resultBuilder = new StringBuilder();
// resultBuilder.append("User Id").append(",").append("User Name").append(",").append("User Email").append("\n");
// users.stream().forEach(user -> resultBuilder.append(user.getId().toString()).append(",")
// .append(user.getName()).append(",")
////TODO .append(user.getEmail()).append("\n")
// );
// String result = resultBuilder.toString();
// String fileName = "Users_dump";//dmp.getLabel();
// fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", "");
// String uuid = UUID.randomUUID().toString();
// File file = new File(this.environment.getProperty("temp.temp") + uuid + ".csv");
// OutputStream output = new FileOutputStream(file);
// try {
//// mapper.writeValue(file, rdaExportModel);
// output.write(result.getBytes());
// output.flush();
// output.close();
// } catch (IOException e) {
// logger.error(e.getMessage(), e);
// }
//
// InputStream resource = new FileInputStream(file);
// HttpHeaders responseHeaders = new HttpHeaders();
// responseHeaders.setContentLength(file.length());
// responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// responseHeaders.set("Content-Disposition", "attachment;filename=" + fileName + ".csv");
// responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition");
// responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type");
//
// byte[] content = org.apache.poi.util.IOUtils.toByteArray(resource);
// resource.close();
// Files.deleteIfExists(file.toPath());
// return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK);
// }
//
// public UserProfile getFromEmail(String email) throws InvalidApplicationException {
// UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), email)).getSingle();
// return new UserProfile().fromDataModel(user);
// }
//
// public Long countActiveUsers(){ //TODO: Authn
// return 0L;
// //return apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().asQueryable().where(((builder, root) -> builder.greaterThan(root.get("expiresAt"), new Date()))).count();
// }
//
// public Long countAllUsers() throws InvalidApplicationException {
// return apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().count();
// }
}