package org.orienteer.graph.component.command;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.id.ORID;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
import com.tinkerpop.blueprints.impls.orient.OrientGraphFactory;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.orienteer.core.component.command.AbstractDeleteCommand;
import org.orienteer.core.component.command.Command;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.component.table.OrienteerDataTable;
import org.orienteer.core.web.ODocumentPage;
import org.orienteer.graph.module.GraphModule;
import ru.ydn.wicket.wicketorientdb.model.OClassModel;
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} to delete vertices
*/
public class DeleteVertexCommand extends AbstractDeleteCommand<ODocument> implements ISecuredComponent
{
private static final long serialVersionUID = 1L;
private final IModel<ODocument> documentModel;
private IModel<OClass> classModel;
public DeleteVertexCommand(OrienteerDataTable<ODocument, ?> table, IModel<ODocument> documentModel)
{
super(table);
this.classModel = new OClassModel(GraphModule.VERTEX_CLASS_NAME);
this.documentModel = documentModel;
}
@Override
protected void performMultiAction(AjaxRequestTarget target, List<ODocument> objects) {
super.performMultiAction(target, objects);
OrientGraph tx = new OrientGraphFactory(getDatabase().getURL()).getTx();
tx.commit();
for (ODocument doc : objects) {
ORID id = doc.getIdentity();
tx.removeVertex(tx.getVertex(id));
}
tx.begin();
setResponsePage(new ODocumentPage(documentModel.getObject()).setModeObject(DisplayMode.VIEW));
}
@Override
public RequiredOrientResource[] getRequiredResources() {
return OSecurityHelper.requireOClass(classModel.getObject(), OrientPermission.DELETE);
}
}