package org.orienteer.core.component.table; import org.apache.wicket.Component; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.orienteer.core.OrienteerWebApplication; import org.orienteer.core.component.meta.AbstractMetaPanel; import org.orienteer.core.component.meta.ODocumentMetaPanel; import org.orienteer.core.component.property.DisplayMode; import org.orienteer.core.component.property.LinkViewPanel; import org.orienteer.core.model.ODocumentNameModel; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OProperty; import com.orientechnologies.orient.core.record.impl.ODocument; /** * {@link OPropertyValueColumn} to refer to {@link ODocument} themselves */ public class OEntityColumn extends OPropertyValueColumn { private static final long serialVersionUID = 1L; public OEntityColumn(OClass oClass, IModel<DisplayMode> modeModel) { this(OrienteerWebApplication.get().getOClassIntrospector().getNameProperty(oClass), true, modeModel); } public OEntityColumn(IModel<OProperty> criteryModel, IModel<DisplayMode> modeModel) { super(criteryModel, modeModel); } public OEntityColumn(OProperty oProperty, boolean sortColumn, IModel<DisplayMode> modeModel) { super(sortColumn?resolveSortExpression(oProperty):null, oProperty, modeModel); } public OEntityColumn(OProperty oProperty, IModel<DisplayMode> modeModel) { super(oProperty, modeModel); } public OEntityColumn(String sortProperty, IModel<OProperty> criteryModel, IModel<DisplayMode> modeModel) { super(sortProperty, criteryModel, modeModel); } public OEntityColumn(String sortProperty, OProperty oProperty, IModel<DisplayMode> modeModel) { super(sortProperty, oProperty, modeModel); } private static String resolveSortExpression(OProperty property) { if(property==null || property.getType()==null) return null; Class<?> defType = property.getType().getDefaultJavaType(); return defType!=null && Comparable.class.isAssignableFrom(defType)?property.getName():null; } public String getNameProperty() { return getSortProperty(); } @Override protected <V> AbstractMetaPanel<ODocument, OProperty, V> newMetaPanel( String componentId, IModel<OProperty> criteryModel, IModel<ODocument> rowModel) { return new ODocumentMetaPanel<V>(componentId, getModeModel(), rowModel, criteryModel) { @Override protected Component resolveComponent(String id, DisplayMode mode, OProperty property) { if (DisplayMode.VIEW.equals(mode) || property == null) return new LinkViewPanel(id, getEntityModel(), new ODocumentNameModel(getEntityModel(), getCriteryModel())); else return super.resolveComponent(id, mode, property); } }; } }