contentData.setPublishDate(new Date());
contentData.setPublishUser(user);
}
}
Draft draft = getOverlaidDraft(object);
UUID variationId = param(UUID.class, "variationId");
Site site = getSite();
try {
state.beginWrites();
state.as(Workflow.Data.class).changeState(null, user, (WorkflowLog) null);
if (variationId == null ||
(site != null &&
((state.isNew() && site.getDefaultVariation() != null) ||
ObjectUtils.equals(site.getDefaultVariation(), state.as(Variation.Data.class).getInitialVariation())))) {
if (state.isNew() && site != null && site.getDefaultVariation() != null) {
state.as(Variation.Data.class).setInitialVariation(site.getDefaultVariation());
}
getRequest().setAttribute("original", object);
includeFromCms("/WEB-INF/objectPost.jsp", "object", object, "original", object);
updateUsingAllWidgets(object);
if (variationId != null &&
variationId.equals(state.as(Variation.Data.class).getInitialVariation())) {
state.putByPath("variations/" + variationId.toString(), null);
}
} else {
Object original = Query.
from(Object.class).
where("_id = ?", state.getId()).
noCache().
first();
Map<String, Object> oldStateValues = State.getInstance(original).getSimpleValues();
getRequest().setAttribute("original", original);
includeFromCms("/WEB-INF/objectPost.jsp", "object", object, "original", original);
updateUsingAllWidgets(object);
Map<String, Object> newStateValues = state.getSimpleValues();
Set<String> stateKeys = new LinkedHashSet<String>();
Map<String, Object> stateValues = new LinkedHashMap<String, Object>();
stateKeys.addAll(oldStateValues.keySet());
stateKeys.addAll(newStateValues.keySet());
for (String key : stateKeys) {
Object value = newStateValues.get(key);
if (!ObjectUtils.equals(oldStateValues.get(key), value)) {
stateValues.put(key, value);
}
}
State.getInstance(original).putByPath("variations/" + variationId.toString(), stateValues);
State.getInstance(original).getExtras().put("cms.variedObject", object);
object = original;
state = State.getInstance(object);
}
Schedule schedule = user.getCurrentSchedule();
Date publishDate = null;
if (schedule == null) {
publishDate = getContentFormPublishDate();
} else if (draft == null) {
draft = Query.
from(Draft.class).
where("schedule = ?", schedule).
and("objectId = ?", object).
first();
}
if (schedule != null || publishDate != null) {
if (!state.validate()) {
throw new ValidationException(Arrays.asList(state));
}
if (draft == null || param(boolean.class, "newSchedule")) {
draft = new Draft();
draft.setOwner(user);
}
draft.setObject(object);
if (state.isNew() || contentData.isDraft()) {
contentData.setDraft(true);
publish(state);
draft.setObjectChanges(null);
}
if (schedule == null) {
schedule = draft.getSchedule();
}
if (schedule == null) {
schedule = new Schedule();
schedule.setTriggerSite(site);
schedule.setTriggerUser(user);
}
if (publishDate != null) {
schedule.setTriggerDate(publishDate);
schedule.save();
}
draft.setSchedule(schedule);
publish(draft);
state.commitWrites();
redirectOnSave("",
"_frame", param(boolean.class, "_frame") ? Boolean.TRUE : null,
ToolPageContext.DRAFT_ID_PARAMETER, draft.getId());
} else {
if (draft != null) {
draft.delete();
}
if (draft != null || contentData.isDraft()) {
contentData.setDraft(false);
}