
woko.async.facets.KillJobDeveloper Maven / Gradle / Ivy
The newest version!
package woko.async.facets;
import net.sourceforge.jfacets.IFacetDescriptorManager;
import net.sourceforge.jfacets.IInstanceFacet;
import net.sourceforge.jfacets.annotations.FacetKey;
import net.sourceforge.stripes.action.*;
import net.sourceforge.stripes.validation.LocalizableError;
import woko.async.Job;
import woko.async.JobDetails;
import woko.async.JobManager;
import woko.facets.BaseResolutionFacet;
import woko.facets.builtin.View;
import woko.ioc.WokoInject;
import woko.persistence.ObjectStore;
import woko.users.UserManager;
import woko.users.UsernameResolutionStrategy;
/**
* Kills the job associated to target {@link JobDetails} if any. Facet doesn't
* match if target JobDetails
is null or if there is no
* {@link JobManager} in IOC.
*/
@FacetKey(name="kill", profileId = "developer", targetObjectType = JobDetails.class)
public class KillJobDeveloper<
OsType extends ObjectStore,
UmType extends UserManager,
UnsType extends UsernameResolutionStrategy,
FdmType extends IFacetDescriptorManager
> extends BaseResolutionFacet implements IInstanceFacet {
private JobManager jobManager;
@WokoInject(JobManager.KEY)
public void injectJobManager(JobManager jobManager) {
this.jobManager = jobManager;
}
/**
* Default handler : retrieves running {@link Job} if any, and invokes kill()
on it.
*/
@Override
public Resolution getResolution(ActionBeanContext abc) {
JobDetails jd = (JobDetails)getFacetContext().getTargetObject();
String uuid = jd.getJobUuid();
Job job = jobManager.getRunningJob(uuid);
String viewUrl = getWoko().facetUrl(View.FACET_NAME, jd);
if (job==null) {
abc.getValidationErrors().addGlobalError(new LocalizableError("woko.ext.async.job.not.running", uuid));
return new ForwardResolution(viewUrl);
} else {
job.kill();
abc.getMessages().add(new LocalizableMessage("woko.ext.async.job.sent.kill.signal", uuid));
return new RedirectResolution(viewUrl);
}
}
/**
* Don't match if JobDetails is null or there is no JobManager found in IOC
* @param targetObject
* @return
*/
@Override
public boolean matchesTargetObject(Object targetObject) {
JobDetails jd = (JobDetails)getFacetContext().getTargetObject();
if (jd==null) {
return false;
}
return jobManager!=null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy