package org.orienteer.core.component.command;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.component.table.OrienteerDataTable;
import org.orienteer.core.component.table.OrienteerDataTable.MetaContextItem;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* {@link Command} for {@link OrienteerDataTable} to save {@link ODocument}s
*/
public class SaveODocumentsCommand extends AbstractSaveCommand<ODocument>
{
private OrienteerDataTable<ODocument, ?> table;
private boolean forceCommit = false;
public SaveODocumentsCommand(OrienteerDataTable<ODocument, ?> table,
IModel<DisplayMode> displayModeModel)
{
super(table, displayModeModel);
this.table = table;
}
@Override
public void onClick(AjaxRequestTarget target) {
table.visitChildren(OrienteerDataTable.MetaContextItem.class, new IVisitor<OrienteerDataTable.MetaContextItem<ODocument, ?>, Void>() {
@Override
public void component(MetaContextItem<ODocument, ?> rowItem, IVisit<Void> visit) {
ODocument doc = rowItem.getModelObject();
if(doc.isDirty()) {
if(doc.getIdentity().isNew()) SaveODocumentCommand.realizeMandatory(doc);
doc.save();
}
visit.dontGoDeeper();
}
});
if(forceCommit) {
ODatabaseDocument db = getDatabase();
boolean active = db.getTransaction().isActive();
db.commit();
if(active) db.begin();
}
super.onClick(target);
}
public boolean isForceCommit() {
return forceCommit;
}
public SaveODocumentsCommand setForceCommit(boolean forceCommit) {
this.forceCommit = forceCommit;
return this;
}
}