package com.psddev.cms.tool.page.content;
import com.psddev.cms.db.Content;
import com.psddev.cms.db.Draft;
import com.psddev.cms.db.ToolUser;
import com.psddev.dari.db.Database;
import com.psddev.dari.db.Modification;
import com.psddev.dari.db.State;
import java.util.Date;
public class PublishModification extends Modification<Object> {
private static final String BROADCAST_EXTRA = PublishModification.class.getName() + ".broadcast";
public static void setBroadcast(Object object, boolean broadcast) {
State.getInstance(object).getExtras().put(BROADCAST_EXTRA, broadcast);
}
@Override
protected void afterSave() {
Object object = getState().getOriginalObjectOrNull();
if (object == null) {
return;
}
if (!Boolean.TRUE.equals(State.getInstance(object).getExtras().get(BROADCAST_EXTRA))) {
return;
}
Publish publish = new Publish();
Content.ObjectModification contentData = State.getInstance(object).as(Content.ObjectModification.class);
ToolUser updateUser = contentData.getUpdateUser();
if (updateUser == null) {
return;
}
Date updateDate = contentData.getUpdateDate();
if (updateDate == null) {
return;
}
publish.setUserId(updateUser.getId());
publish.setUserName(updateUser.getName());
publish.setDate(updateDate.getTime());
if (object instanceof Draft) {
object = ((Draft) object).recreate();
}
publish.setValues(State.getInstance(object).getSimpleValues());
publish.saveImmediately();
Database db = Database.Static.getDefault();
try {
db.beginIsolatedWrites();
publish.delete();
db.commitWrites();
} finally {
db.endWrites();
}
}
}