/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jabylon.scheduler.internal.jobs; import java.util.Map; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Service; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.jabylon.common.team.TeamProvider; import org.jabylon.common.team.TeamProviderException; import org.jabylon.common.team.TeamProviderUtil; import org.jabylon.properties.ProjectVersion; import org.jabylon.scheduler.JobUtil; import org.jabylon.scheduler.JobExecution; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Component(enabled = true, immediate = true) @Service public class TeamCommitJob implements JobExecution { public static final String JOB_ID = "job.team.commit"; private static final Logger logger = LoggerFactory.getLogger(TeamUpdateJob.class); @org.apache.felix.scr.annotations.Property(value = "false", name = JobExecution.PROP_JOB_ACTIVE) private String ACTIVE = JobExecution.PROP_JOB_ACTIVE; /** every hour, five minutes after the full hour */ @Property(value = "0 5 * * * ?", name = JobExecution.PROP_JOB_SCHEDULE) public static final String DEFAULT_SCHEDULE = "0 5 * * * ?"; @Property(value = "%commit.job.name", name = JobExecution.PROP_JOB_NAME) private String NAME = JobExecution.PROP_JOB_NAME; /** at 2 am every day */ @Property(value = "%commit.job.description", name = JobExecution.PROP_JOB_DESCRIPTION) private String DESCRIPTION = JobExecution.PROP_JOB_DESCRIPTION; @Override public void run(IProgressMonitor monitor, Map<String, Object> jobContext) throws Exception { ProjectVersion version = JobUtil.getDomainObject(jobContext); TeamProvider provider = TeamProviderUtil.getTeamProvider(version.getParent().getTeamProvider()); CDOTransaction transaction = JobUtil.openTransaction(jobContext); try { version = transaction.getObject(version); SubMonitor subMonitor = SubMonitor.convert(monitor, "Committing", 100); provider.commit(version, subMonitor.newChild(100)); } catch (TeamProviderException e) { logger.error("Commit failed", e); } finally { transaction.close(); } } @Override public boolean retryOnError() { return false; } @Override public String getID() { return JOB_ID; } }