package org.orienteer.core.component.command; import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.orienteer.core.OrienteerWebApplication; import org.orienteer.core.component.BootstrapType; import org.orienteer.core.component.FAIconType; import org.orienteer.core.component.property.DisplayMode; import org.orienteer.core.component.table.DataTableCommandsToolbar; import org.orienteer.core.component.table.OrienteerDataTable; import org.orienteer.core.web.schema.OIndexPage; import org.orienteer.core.web.schema.OIndexPage; import ru.ydn.wicket.wicketorientdb.model.OIndexModel; import ru.ydn.wicket.wicketorientdb.proto.OIndexPrototyper; import ru.ydn.wicket.wicketorientdb.security.OSecurityHelper; import ru.ydn.wicket.wicketorientdb.security.OrientPermission; import ru.ydn.wicket.wicketorientdb.security.RequiredOrientResource; import ru.ydn.wicket.wicketorientdb.security.RequiredOrientResources; import com.google.common.base.Function; import com.google.common.collect.Lists; import com.orientechnologies.orient.core.index.OIndex; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OProperty; import com.orientechnologies.orient.core.metadata.security.ODatabaseSecurityResources; import com.orientechnologies.orient.core.metadata.security.ORule; /** * {@link Command} to create an {@link OIndex} for a selected set of properties */ @RequiredOrientResources({ @RequiredOrientResource(value = OSecurityHelper.SCHEMA, permissions=OrientPermission.CREATE), @RequiredOrientResource(value=OSecurityHelper.CLUSTER, specific="internal", permissions=OrientPermission.CREATE) }) public class CreateOIndexFromOPropertiesCommand extends AbstractCheckBoxEnabledCommand<OProperty> { private IModel<OClass> classModel; public CreateOIndexFromOPropertiesCommand(OrienteerDataTable<OProperty, ?> table, IModel<OClass> classModel) { super(new ResourceModel("command.create.index"), table); this.classModel = classModel; } @Override protected void onInstantiation() { super.onInstantiation(); setIcon(FAIconType.plus); setBootstrapType(BootstrapType.SUCCESS); } @Override protected void performMultiAction(AjaxRequestTarget target, List<OProperty> objects) { if(objects==null || objects.size()==0) { error(OrienteerWebApplication.get().getResourceSettings().getLocalizer().getString("errors.checkbox.empty", this)); return; } else { List<String> fields = Lists.newArrayList(Lists.transform(objects, new Function<OProperty, String>() { @Override public String apply(OProperty input) { return input.getName(); } })); OClass oClass = classModel!=null?classModel.getObject():null; if(oClass==null) oClass = objects.get(0).getOwnerClass(); setResponsePage(new OIndexPage(new OIndexModel(OIndexPrototyper.newPrototype(oClass.getName(), fields))).setModeObject(DisplayMode.EDIT)); } } @Override public void detachModels() { super.detachModels(); if(classModel!=null) classModel.detach(); } }