package org.orienteer.core.service;
import java.util.List;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.IModel;
import org.orienteer.core.component.property.DisplayMode;
import ru.ydn.wicket.wicketorientdb.model.OQueryDataProvider;
import com.google.common.base.Predicate;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OProperty;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* Utility service for introspection of {@link OClass}
*/
public interface IOClassIntrospector
{
public static String DEFAULT_TAB = "parameters";
public List<OProperty> getDisplayableProperties(OClass oClass);
public List<IColumn<ODocument, String>> getColumnsFor(OClass oClass, boolean withCheckbox, IModel<DisplayMode> modeModel);
public List<ODocument> getNavigationPath(ODocument doc, boolean fromUpToDown);
public ODocument getParent(ODocument doc);
public List<String> listTabs(OClass oClass);
public List<OProperty> listProperties(OClass oClass, String tab, Boolean extended);
public List<OProperty> listProperties(OClass oClass, Predicate<OProperty>... predicates);
public SortableDataProvider<ODocument, String> prepareDataProviderForProperty(OProperty property, IModel<ODocument> documentModel);
public void defineDefaultSorting(SortableDataProvider<ODocument, String> provider, OClass oClass);
public OProperty getNameProperty(OClass oClass);
public String getDocumentName(ODocument doc);
public String getDocumentName(ODocument doc, OProperty nameProperty);
public OProperty virtualizeField(ODocument doc, String field);
public OQueryDataProvider<ODocument> getDataProviderForGenericSearch(OClass oClass, IModel<String> queryModel);
}