Skip to content
Snippets Groups Projects
Commit 4e1c440c authored by Michael Simon's avatar Michael Simon
Browse files

NO_STORY add job class to periodically sync project group memberships

parent f865a98d
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@
package edu.kit.scc.webreg.entity.project;
import java.sql.Types;
import java.util.Date;
import java.util.Set;
import org.hibernate.annotations.JdbcTypeCode;
......@@ -95,6 +96,9 @@ public class ProjectEntity extends AbstractBaseEntity {
@OneToMany(mappedBy = "project")
private Set<ProjectIdentityAdminEntity> projectAdmins;
@Column(name = "last_sync_to_group")
private Date lastSyncToGroup;
public String getName() {
return name;
}
......@@ -222,4 +226,12 @@ public class ProjectEntity extends AbstractBaseEntity {
public void setAttributeName(String attributeName) {
this.attributeName = attributeName;
}
public Date getLastSyncToGroup() {
return lastSyncToGroup;
}
public void setLastSyncToGroup(Date lastSyncToGroup) {
this.lastSyncToGroup = lastSyncToGroup;
}
}
/*******************************************************************************
* Copyright (c) 2014 Michael Simon.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* Michael Simon - initial
******************************************************************************/
package edu.kit.scc.webreg.job;
import static edu.kit.scc.webreg.dao.ops.PaginateBy.withLimit;
import static edu.kit.scc.webreg.dao.ops.RqlExpressions.and;
import static edu.kit.scc.webreg.dao.ops.RqlExpressions.isNull;
import static edu.kit.scc.webreg.dao.ops.RqlExpressions.lessThanOrEqualTo;
import static edu.kit.scc.webreg.dao.ops.RqlExpressions.notEqual;
import static edu.kit.scc.webreg.dao.ops.RqlExpressions.or;
import static edu.kit.scc.webreg.dao.ops.SortBy.ascendingBy;
import static java.time.temporal.ChronoUnit.MILLIS;
import java.time.Instant;
import java.util.Date;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import edu.kit.scc.webreg.dao.ops.RqlExpressions;
import edu.kit.scc.webreg.entity.project.ProjectEntity;
import edu.kit.scc.webreg.entity.project.ProjectEntity_;
import edu.kit.scc.webreg.entity.project.ProjectStatus;
import edu.kit.scc.webreg.service.project.ProjectService;
public class ProjectsSyncToGroup extends AbstractExecutableJob {
private static final long serialVersionUID = 1L;
@Override
public void execute() {
Logger logger = LoggerFactory.getLogger(ProjectsSyncToGroup.class);
Long olderThanMillis;
if (!getJobStore().containsKey("older_than_millis")) {
olderThanMillis = 24L * 60L * 60L * 1000L;
} else {
olderThanMillis = Long.parseLong(getJobStore().get("older_than_millis"));
}
Date olderThan = Date.from(Instant.now().minus(olderThanMillis, MILLIS));
Integer limit;
if (!getJobStore().containsKey("limit")) {
limit = 2;
} else {
limit = Integer.parseInt(getJobStore().get("limit"));
}
try {
InitialContext ic = new InitialContext();
ProjectService projectService = (ProjectService) ic.lookup(
"global/bwreg/bwreg-service/ProjectServiceImpl!edu.kit.scc.webreg.service.project.ProjectService");
logger.info("Starting project member sync to group");
List<ProjectEntity> projectList = projectService.findAll(withLimit(limit),
ascendingBy(ProjectEntity_.lastSyncToGroup),
and(or(lessThanOrEqualTo(ProjectEntity_.lastSyncToGroup, olderThan),
isNull(ProjectEntity_.lastSyncToGroup)),
or(notEqual(ProjectEntity_.projectStatus, ProjectStatus.DELETED),
RqlExpressions.isNull(ProjectEntity_.projectStatus))));
for (ProjectEntity project : projectList) {
logger.info("Syncing project {}", project.getShortName());
projectService.syncAllMembersToGroup(project, "project-sync-job");
}
logger.info("Project member sync to group done");
} catch (NamingException e) {
logger.warn("Could not clear Audit Logs: {}", e);
}
}
}
......@@ -4,6 +4,7 @@ import static org.apache.commons.lang3.RandomStringUtils.randomAlphanumeric;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
......@@ -203,6 +204,8 @@ public abstract class AbstractProjectUpdater<T extends ProjectEntity> implements
logger.info("Remove user {} from project-group for project {}", user.getId(), project.getName());
groupDao.removeUserGromGroup(user, project.getProjectGroup());
}
project.setLastSyncToGroup(new Date());
}
public void syncMemberToGroup(ProjectEntity project, IdentityEntity identity, String executor) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment