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.OPropertyPage;
import org.orienteer.core.web.schema.OPropertyPage;
import com.orientechnologies.orient.core.metadata.schema.OProperty;
/**
* {@link BookmarkablePageLink} for {@link OProperty}
*/
public class OPropertyPageLink extends BookmarkablePageLink<OProperty>
{
private static final long serialVersionUID = 1L;
private IModel<DisplayMode> displayModeModel;
public OPropertyPageLink(String id, IModel<OProperty> oClassModel, PageParameters parameters)
{
this(id, oClassModel, DisplayMode.VIEW, parameters);
}
public OPropertyPageLink(String id, IModel<OProperty> oClassModel)
{
this(id, oClassModel, DisplayMode.VIEW);
}
public OPropertyPageLink(String id, IModel<OProperty> oClassModel, DisplayMode mode, PageParameters parameters)
{
this(id, oClassModel, resolvePageClass(mode), mode.asModel(), parameters);
}
public OPropertyPageLink(String id, IModel<OProperty> oClassModel, DisplayMode mode)
{
this(id, oClassModel, resolvePageClass(mode), mode.asModel());
}
public <C extends Page> OPropertyPageLink(String id, IModel<OProperty> oClassModel, Class<C> pageClass,
IModel<DisplayMode> displayModeModel, PageParameters parameters) {
super(id, pageClass, parameters);
setModel(oClassModel);
this.displayModeModel = displayModeModel;
}
public <C extends Page> OPropertyPageLink(String id, IModel<OProperty> 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 OPropertyPage.class;
case EDIT:
return OPropertyPage.class;
default:
return OPropertyPage.class;
}
}
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(getModelObject()!=null);
}
public OPropertyPageLink setPropertyNameAsBody(boolean classNameAsBody)
{
setBody(classNameAsBody?new PropertyModel<String>(getModel(), "name"):null);
return this;
}
@Override
public PageParameters getPageParameters() {
return super.getPageParameters().add("className", getModelObject().getOwnerClass().getName()).add("propertyName", getModelObject().getName());
}
}