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.request.mapper.parameter.PageParameters;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.model.ODocumentNameModel;
import com.orientechnologies.orient.core.db.record.OIdentifiable;
import com.orientechnologies.orient.core.id.ORID;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* {@link BookmarkablePageLink} for {@link ODocument}
*/
public class ODocumentPageLink extends BookmarkablePageLink<ODocument>
{
private static final long serialVersionUID = 1L;
private boolean propogateDisplayMode = true;
private IModel<DisplayMode> displayModeModel;
public ODocumentPageLink(String id, IModel<ODocument> docModel, PageParameters parameters)
{
this(id, docModel, DisplayMode.VIEW, parameters);
}
public ODocumentPageLink(String id, IModel<ODocument> docModel)
{
this(id, docModel, DisplayMode.VIEW);
}
public ODocumentPageLink(String id, IModel<ODocument> docModel, DisplayMode mode, PageParameters parameters)
{
this(id, docModel, mode.getDefaultPageClass(), mode.asModel(), parameters);
}
public ODocumentPageLink(String id, IModel<ODocument> docModel, DisplayMode mode)
{
this(id, docModel, mode.getDefaultPageClass(), mode.asModel());
}
public <C extends Page> ODocumentPageLink(String id, IModel<ODocument> docModel, Class<C> pageClass,
IModel<DisplayMode> displayModeModel, PageParameters parameters) {
super(id, pageClass, parameters);
setModel(docModel);
this.displayModeModel = displayModeModel;
}
public <C extends Page> ODocumentPageLink(String id, IModel<ODocument> docModel, Class<C> pageClass,
IModel<DisplayMode> displayModeModel) {
super(id, pageClass);
setModel(docModel);
this.displayModeModel = displayModeModel;
}
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(getModelObject()!=null && getModelObject() instanceof ODocument);
}
public ODocumentPageLink setDocumentNameAsBody(boolean docNameAsBody)
{
setBody(docNameAsBody?new ODocumentNameModel(getModel()):null);
return this;
}
public ODocumentPageLink setPropogateDisplayMode(boolean propogateDisplayMode)
{
this.propogateDisplayMode = propogateDisplayMode;
return this;
}
@Override
public PageParameters getPageParameters() {
PageParameters pageParameters = super.getPageParameters();
pageParameters.add("rid", buitifyRid(getModelObject()));
if(propogateDisplayMode)
{
pageParameters.add("mode", displayModeModel.getObject().getName());
}
return pageParameters;
}
public String buitifyRid(OIdentifiable identifiable)
{
if(identifiable==null) return "";
String ret = identifiable.getIdentity().toString();
return ret.charAt(0)==ORID.PREFIX?ret.substring(1):ret;
}
}