package org.orienteer.core.web.schema;
import javax.servlet.http.HttpServletResponse;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.Strings;
import org.orienteer.core.MountPath;
import org.orienteer.core.component.SchemaPageHeader;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.component.property.OClassViewPanel;
import org.orienteer.core.web.AbstractWidgetDisplayModeAwarePage;
import ru.ydn.wicket.wicketorientdb.model.OClassModel;
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 com.orientechnologies.orient.core.index.OIndex;
/**
* Page to display {@link OIndex} specific parameters
*/
@MountPath("/index/${indexName}")
@RequiredOrientResource(value=OSecurityHelper.SCHEMA, permissions=OrientPermission.READ)
public class OIndexPage extends
AbstractWidgetDisplayModeAwarePage<OIndex<?>> {
public OIndexPage(IModel<OIndex<?>> model) {
super(model);
}
public OIndexPage(PageParameters parameters) {
super(parameters);
DisplayMode mode = DisplayMode.parse(parameters.get("mode").toOptionalString());
if(mode!=null) setModeObject(mode);
}
@Override
protected IModel<OIndex<?>> resolveByPageParameters(
PageParameters pageParameters) {
String indexName = pageParameters.get("indexName").toOptionalString();
return Strings.isEmpty(indexName)?null:new OIndexModel(indexName);
}
@Override
protected void onConfigure() {
super.onConfigure();
if(getModelObject()==null) throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND);
}
@Override
public IModel<String> getTitleModel() {
return new PropertyModel<String>(getModel(), "name");
}
@Override
protected Component newPageHeaderComponent(String componentId) {
OClassModel oClassModel = new OClassModel(new PropertyModel<String>(getModel(), OIndexPrototyper.DEF_CLASS_NAME));
SchemaPageHeader pageHeader = new SchemaPageHeader(componentId, oClassModel);
pageHeader.addChild(new OClassViewPanel(pageHeader.newChildId(), oClassModel));
pageHeader.addChild(new Label(pageHeader.newChildId(), getTitleModel()));
return pageHeader;
}
@Override
public String getDomain() {
return "index";
}
}