package org.orienteer.core.component;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.web.schema.OIndexPage;
import org.orienteer.core.web.schema.OIndexPage;
import com.orientechnologies.orient.core.index.OIndex;
/**
* {@link BookmarkablePageLink} for {@link OIndex}
*/
public class OIndexPageLink extends BookmarkablePageLink<OIndex<?>>
{
private static final long serialVersionUID = 1L;
private IModel<DisplayMode> displayModeModel;
public OIndexPageLink(String id, IModel<OIndex<?>> oIndexModel, PageParameters parameters)
{
this(id, oIndexModel, DisplayMode.VIEW, parameters);
}
public OIndexPageLink(String id, IModel<OIndex<?>> oIndexModel)
{
this(id, oIndexModel, DisplayMode.VIEW);
}
public OIndexPageLink(String id, IModel<OIndex<?>> oIndexModel, DisplayMode mode, PageParameters parameters)
{
this(id, oIndexModel, resolvePageClass(mode), mode.asModel(), parameters);
}
public OIndexPageLink(String id, IModel<OIndex<?>> oIndexModel, DisplayMode mode)
{
this(id, oIndexModel, resolvePageClass(mode), mode.asModel());
}
public <C extends Page> OIndexPageLink(String id, IModel<OIndex<?>> oIndexModel, Class<C> pageClass,
IModel<DisplayMode> displayModeModel, PageParameters parameters) {
super(id, pageClass, parameters);
setModel(oIndexModel);
this.displayModeModel = displayModeModel;
}
public <C extends Page> OIndexPageLink(String id, IModel<OIndex<?>> oClassModel, Class<C> pageClass,
IModel<DisplayMode> displayModeModel) {
super(id, pageClass);
setModel(oClassModel);
this.displayModeModel = displayModeModel;
}
private static Class<? extends Page> resolvePageClass(DisplayMode mode)
{
switch (mode) {
case VIEW:
return OIndexPage.class;
case EDIT:
return OIndexPage.class;
default:
return OIndexPage.class;
}
}
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(getModelObject()!=null);
}
public OIndexPageLink setPropertyNameAsBody(boolean indexNameAsBody)
{
setBody(indexNameAsBody?new PropertyModel<String>(getModel(), "name"):null);
return this;
}
@Override
public PageParameters getPageParameters() {
return super.getPageParameters().add("indexName", getModelObject().getName());
}
}