Exatamente, vc tem que criar uma classe customizada que implemente as cores.
Crie uma classe que estenda DefaultScheduleEntry, adicionando o método um atributo color(get/set)
public class SchedulerEntryExtended extends DefaultScheduleEntry {
private static final long serialVersionUID = 2131962103765021189L;
private String color;
public SchedulerEntryExtended() {
super();
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
Depois… Você estende a classe DefaultScheduleEntryRenderer, tratando o set da cor!
Note que eu implementei um método getColor que usa o o valor que vc seta no entry da classe anterior!
public class ScheduleEntryRenderer extends DefaultScheduleEntryRenderer {
private static final long serialVersionUID = 769149814442282103L;
public String getColor(FacesContext context, HtmlSchedule schedule,
ScheduleEntry entry, boolean selected) {
SchedulerEntryExtended extEntry = (SchedulerEntryExtended) entry;
return extEntry.getColor();
}
protected void renderDetailedContentText(
javax.faces.context.FacesContext context,
javax.faces.context.ResponseWriter writer, HtmlSchedule schedule,
ScheduleDay day, ScheduleEntry entry, boolean selected)
throws IOException {
StringBuffer entryStyle = new StringBuffer();
// Add entry style
entryStyle.append("height: 100%; width: 100%;");
String entryColor = getColor(context, schedule, entry, selected);
if (entryColor != null) { // Se foi setada uma cor no objeto entry, ele customiza, senão mantém o padrão
entryStyle.append("background-color: ");
entryStyle.append(entryColor); // Aqui está a sacada! Vc seta a cor do background via CSS com a cor setada para a entry!
entryStyle.append(";");
}
// Put entry inside of html DIV element
writer.startElement(HTML.DIV_ELEM, null);
writer.writeAttribute(HTML.STYLE_ATTR, entryStyle.toString(), null);
// Write the title of the entry
if (entry.getTitle() != null) {
writer.startElement(HTML.SPAN_ELEM, schedule);
writer.writeAttribute(HTML.CLASS_ATTR, getStyleClass(schedule,
"title"), null);
writer.writeText(entry.getTitle(), null);
writer.endElement(HTML.SPAN_ELEM);
}
// Write the sub-title of the entry
if (entry.getSubtitle() != null) {
writer.startElement("br", schedule);
writer.endElement("br");
writer.startElement(HTML.SPAN_ELEM, schedule);
writer.writeAttribute(HTML.CLASS_ATTR, getStyleClass(schedule,
"subtitle"), null);
writer.writeText(entry.getSubtitle(), null);
writer.endElement(HTML.SPAN_ELEM);
}
writer.endElement(HTML.DIV_ELEM);
}
}
Finalmente, na sua página use
entryRenderer="#{scheduleEntryRenderer}"
Não esqueça de declarar o ScheduleEntryRenderer no faces-config.xml. Eu declarei como request!
Espero ter ajudado!