package org.orienteer.core.component.widget.schema; import com.google.common.base.Predicate; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.record.impl.ODocument; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.util.io.IClusterable; import org.orienteer.core.CustomAttribute; import org.orienteer.core.OClassDomain; import org.orienteer.core.component.FAIcon; import org.orienteer.core.component.FAIconType; import org.orienteer.core.component.command.*; import org.orienteer.core.component.property.DisplayMode; import org.orienteer.core.component.table.OrienteerDataTable; import org.orienteer.core.component.widget.AbstractOClassesListWidget; import org.orienteer.core.widget.Widget; import ru.ydn.wicket.wicketorientdb.model.AbstractJavaSortableDataProvider; import ru.ydn.wicket.wicketorientdb.model.OClassesDataProvider; /** * Widget to list all classes in the schema */ @Widget(domain="schema", tab="classes", id="list-oclasses", autoEnable=true) public class OClassesWidget extends AbstractOClassesListWidget<Void> { private IModel<Boolean> showAllClassesModel; private static class FilterClassesPredicate implements Predicate<OClass>, IClusterable { public final IModel<Boolean> showAllClassesModel; public FilterClassesPredicate(IModel<Boolean> showAllClassesModel) { this.showAllClassesModel = showAllClassesModel; } @Override public boolean apply(OClass input) { Boolean showAll = showAllClassesModel.getObject(); return showAll==null || showAll ? true : OClassDomain.BUSINESS.equals(CustomAttribute.DOMAIN.getValue(input)); } } public OClassesWidget(String id, IModel<Void> model, IModel<ODocument> widgetDocumentModel) { super(id, model, widgetDocumentModel); } @Override protected void addTableCommands(OrienteerDataTable<OClass, String> table, IModel<DisplayMode> modeModel) { table.addCommand(new CreateOClassCommand(table)); table.addCommand(new EditSchemaCommand<OClass>(table, modeModel)); table.addCommand(new SaveSchemaCommand<OClass>(table, modeModel)); table.addCommand(new DeleteOClassCommand(table)); table.addCommand(new ReloadOMetadataCommand(table)); table.addCommand(new TriggerCommand<>("command.showhide.allclasses", table, showAllClassesModel)); table.addCommand(new ExportOSchemaCommand(table)); table.addCommand(new ImportOSchemaCommand(table)); table.addCommand(new ViewUMLCommand(table)); } @Override protected AbstractJavaSortableDataProvider getOClassesDataProvider() { return new OClassesDataProvider(new FilterClassesPredicate(showAllClassesModel = Model.of(false))); } @Override protected FAIcon newIcon(String id) { return new FAIcon(id, FAIconType.cubes); } @Override protected IModel<String> getDefaultTitleModel() { return new ResourceModel("class.list.title"); } @Override protected String getWidgetStyleClass() { return "strict"; } }