package org.orienteer.core.component.command;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.record.impl.ODocument;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.component.structuretable.OrienteerStructureTable;
import org.orienteer.core.component.table.OrienteerDataTable;
import org.orienteer.core.web.ODocumentPage;
import ru.ydn.wicket.wicketorientdb.model.OClassModel;
import ru.ydn.wicket.wicketorientdb.model.ODocumentModel;
import ru.ydn.wicket.wicketorientdb.security.ISecuredComponent;
import ru.ydn.wicket.wicketorientdb.security.OSecurityHelper;
import ru.ydn.wicket.wicketorientdb.security.OrientPermission;
import ru.ydn.wicket.wicketorientdb.security.RequiredOrientResource;
import java.util.List;
/**
* {@link Command} for {@link OrienteerStructureTable} to copy {@link ODocument}
*/
public class CopyODocumentCommand extends AbstractCopyCommand<ODocument> implements ISecuredComponent {
private static final long serialVersionUID = 1L;
private IModel<OClass> classModel;
public CopyODocumentCommand(OrienteerDataTable<ODocument, ?> table, OClass oClazz) {
this(table, new OClassModel(oClazz));
}
public CopyODocumentCommand(OrienteerDataTable<ODocument, ?> table, IModel<OClass> classModel) {
super(table);
this.classModel = classModel;
}
@Override
protected void performMultiAction(AjaxRequestTarget target, List<ODocument> objects) {
if(objects.size() > 1)
{
String message = getLocalizer().getString("alert.onlyoneshouldbeselected", this).replace("\"", "\\\"");
target.appendJavaScript("alert(\""+message+"\")");
return;
}
super.performMultiAction(target, objects);
getDatabase().commit(true);
getDatabase().begin();
}
@Override
protected void perfromSingleAction(AjaxRequestTarget target, ODocument object) {
ODocument copy = getDatabase().newInstance(object.getClassName());
for (String fieldName : object.fieldNames()) {
copy.field(fieldName, object.field(fieldName));
}
setResponsePage(new ODocumentPage(new ODocumentModel(copy)).setModeObject(DisplayMode.EDIT));
}
@Override
public RequiredOrientResource[] getRequiredResources() {
return OSecurityHelper.requireOClass(classModel.getObject(), OrientPermission.CREATE);
}
}