package org.orienteer.core.component.widget.oclass;
import com.google.inject.Inject;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.orienteer.core.component.FAIcon;
import org.orienteer.core.component.FAIconType;
import org.orienteer.core.component.command.BookmarkablePageLinkCommand;
import org.orienteer.core.component.command.EditSchemaCommand;
import org.orienteer.core.component.command.SaveSchemaCommand;
import org.orienteer.core.component.meta.OClassMetaPanel;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.component.structuretable.OrienteerStructureTable;
import org.orienteer.core.component.widget.document.ODocumentPropertiesWidget;
import org.orienteer.core.service.IOClassIntrospector;
import org.orienteer.core.web.BrowseOClassPage;
import org.orienteer.core.web.schema.OClassPage;
import org.orienteer.core.widget.AbstractModeAwareWidget;
import org.orienteer.core.widget.Widget;
import ru.ydn.wicket.wicketorientdb.components.TransactionlessForm;
import ru.ydn.wicket.wicketorientdb.utils.OSchemaUtils;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* Widget to show and modify {@link OClass} configuration
*/
@Widget(id="class-configuration", domain="class", tab="configuration", autoEnable=true)
public class OClassConfigurationWidget extends AbstractModeAwareWidget<OClass> {
@Inject
private IOClassIntrospector inspector;
private OrienteerStructureTable<OClass, String> structureTable;
public OClassConfigurationWidget(String id, IModel<OClass> model,
IModel<ODocument> widgetDocumentModel) {
super(id, model, widgetDocumentModel);
Form<OClass> form = new TransactionlessForm<OClass>("form");
structureTable = new OrienteerStructureTable<OClass, String>("attributes", getModel(), OClassMetaPanel.OCLASS_ATTRS) {
@Override
protected Component getValueComponent(String id, final IModel<String> rowModel) {
return new OClassMetaPanel<Object>(id, getModeModel(), OClassConfigurationWidget.this.getModel(), rowModel);
}
};
structureTable.addCommand(new EditSchemaCommand<OClass>(structureTable, getModeModel()));
structureTable.addCommand(new SaveSchemaCommand<OClass>(structureTable, getModeModel(), getModel()));
form.add(structureTable);
add(form);
addCommand(new BookmarkablePageLinkCommand<OClass>(newCommandId(), "class.browse", BrowseOClassPage.class) {
@Override
public PageParameters getPageParameters() {
return BrowseOClassPage.preparePageParameters(OClassConfigurationWidget.this.getModelObject(), DisplayMode.VIEW);
}
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(OSchemaUtils.isNotNullOrPrototype(OClassConfigurationWidget.this.getModelObject()));
}
});
}
@Override
protected FAIcon newIcon(String id) {
return new FAIcon(id, FAIconType.bars);
}
@Override
protected IModel<String> getDefaultTitleModel() {
return new ResourceModel("class.configuration");
}
@Override
protected String getWidgetStyleClass() {
return "strict";
}
}