package com.anjlab.ping.pages.job;
import java.util.Date;
import org.apache.tapestry5.annotations.AfterRender;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.Select;
import org.apache.tapestry5.corelib.components.TextField;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.anjlab.ping.entities.Job;
import com.anjlab.ping.pages.Index;
import com.anjlab.ping.services.Application;
import com.anjlab.ping.services.GAEHelper;
import com.anjlab.ping.services.Utils;
import com.google.appengine.api.users.UserServiceFactory;
@SuppressWarnings("unused")
public class CreateJob {
private static final Logger logger = LoggerFactory.getLogger(CreateJob.class);
private Job job;
public Job getJob() {
if (job == null) {
job = getDefaultJob();
}
return job;
}
public void setJob(Job job) {
this.job = job;
}
@Inject
private GAEHelper gaeHelper;
private Job getDefaultJob() {
Job result = new Job();
result.setPingURL("http://");
result.setReportEmail(gaeHelper.getUserPrincipal().getName());
result.setUsesValidatingHttpCode(true);
result.setValidatingHttpCode(-200);
result.setCronString("every 1 hour");
result.setResponseEncoding("UTF-8");
result.setCreatedAt(new Date());
return result;
}
@Property
private final String httpCodesModel = Utils.getHttpCodesModel();
@Property
private final String cronStringModel = Utils.getCronStringModel();
@InjectPage
private Index index;
@Property
@Persist
private String message;
@AfterRender
public void cleanup() {
message = null;
}
@Inject
private Application application;
public Index onSuccess() {
try {
// if (UserServiceFactory.getUserService().isUserAdmin()) {
application.createJob(job);
// } else {
// index.operationFailed("Creation of new jobs temporarily unavailable.");
// }
return index;
} catch (Exception e) {
message = e.getMessage();
logger.error("Error creating job", e);
}
return null;
}
@Inject
private Messages messages;
@Component(id="jobForm")
private Form jobForm;
@Component(id="cronString")
private Select cronStringField;
@Component(id="validatingRegexp")
private TextField validatingRegexpField;
public void onValidateFromJobForm() {
if (application.isQuotaLimitsForCreateOrUpdateExceeded(job)) {
jobForm.recordError(cronStringField, messages.get("account-cron-string-quota-limit"));
}
if (job.isUsesValidatingRegexp() && Utils.isNullOrEmpty(job.getValidatingRegexp())) {
jobForm.recordError(validatingRegexpField,
String.format(messages.get("required"), validatingRegexpField.getLabel()));
}
}
}