package com.celements.scheduler.classes;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xwiki.component.annotation.Component;
import org.xwiki.component.annotation.Requirement;
import org.xwiki.model.reference.DocumentReference;
import com.celements.common.classes.AbstractClassCollection;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.objects.classes.BaseClass;
import com.xpn.xwiki.objects.classes.TextAreaClass;
@Component("SchedulerClasses")
public class SchedulerClasses extends AbstractClassCollection {
private static Log LOGGER = LogFactory.getFactory().getInstance(SchedulerClasses.class);
@Requirement
private ISchedulerClassConfig classConf;
@Override
protected Log getLogger() {
return LOGGER;
}
@Override
public String getConfigName() {
return "scheduler";
}
@Override
protected void initClasses() throws XWikiException {
getSchedulerJobClass();
}
private BaseClass getSchedulerJobClass() throws XWikiException {
DocumentReference docRef = classConf.getSchedulerJobClassRef();
XWikiDocument doc;
boolean needsUpdate = false;
try {
doc = getContext().getWiki().getDocument(docRef, getContext());
} catch (XWikiException xwe) {
LOGGER.error("Exception while getting doc for ClassRef '" + docRef + "'", xwe);
doc = new XWikiDocument(docRef);
needsUpdate = true;
}
BaseClass bclass = doc.getXClass();
bclass.setDocumentReference(docRef);
needsUpdate |= bclass.addTextField(ISchedulerClassConfig.PROP_JOB_NAME, "Job Name", 60);
needsUpdate |= bclass.addTextAreaField(ISchedulerClassConfig.PROP_JOB_DESCRIPTION,
"Job Description", 45, 10);
needsUpdate |= bclass.addTextField(ISchedulerClassConfig.PROP_JOB_CLASS, "Job Class", 60);
needsUpdate |= bclass.addTextField(ISchedulerClassConfig.PROP_STATUS, "Status", 30);
needsUpdate |= bclass.addTextField(ISchedulerClassConfig.PROP_CRON, "Cron Expression", 30);
needsUpdate |= bclass.addTextAreaField(ISchedulerClassConfig.PROP_SCRIPT, "Job Script", 60, 10);
// make sure that the script field is of type pure text so that wysiwyg editor is
// never used for it
TextAreaClass scriptField = (TextAreaClass) bclass.getField(ISchedulerClassConfig.PROP_SCRIPT);
// get editor returns lowercase but the values are actually camelcase
if (scriptField.getEditor() != "puretext") {
scriptField.setStringValue("editor", "PureText");
needsUpdate = true;
}
needsUpdate |= bclass.addTextField(ISchedulerClassConfig.PROP_CONTEXT_USER,
"Job execution context user", 30);
needsUpdate |= bclass.addTextField(ISchedulerClassConfig.PROP_CONTEXT_LANG,
"Job execution context lang", 30);
needsUpdate |= bclass.addTextField(ISchedulerClassConfig.PROP_CONTEXT_DATABASE,
"Job execution context database", 30);
setContentAndSaveClassDocument(doc, needsUpdate);
return bclass;
}
}