package org.orienteer.core.component.widget.document;
import org.apache.wicket.event.IEvent;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.orienteer.core.CustomAttribute;
import org.orienteer.core.OrienteerWebApplication;
import org.orienteer.core.behavior.UpdateOnActionPerformedEventBehavior;
import org.orienteer.core.component.FAIcon;
import org.orienteer.core.component.FAIconType;
import org.orienteer.core.component.command.BookmarkablePageLinkCommand;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.component.visualizer.IVisualizer;
import org.orienteer.core.event.ActionPerformedEvent;
import org.orienteer.core.web.schema.OClassPage;
import org.orienteer.core.web.schema.OPropertyPage;
import org.orienteer.core.widget.AbstractWidget;
import org.orienteer.core.widget.Widget;
import ru.ydn.wicket.wicketorientdb.behavior.DisableIfDocumentNotSavedBehavior;
import ru.ydn.wicket.wicketorientdb.model.DynamicPropertyValueModel;
import ru.ydn.wicket.wicketorientdb.model.OPropertyModel;
import ru.ydn.wicket.wicketorientdb.model.OPropertyNamingModel;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OProperty;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* This is temporal widget/adapter between widgets and old approach with {@link IVisualizer}s
*/
@Widget(id = ExtendedVisualizerWidget.WIDGET_TYPE_ID, domain="document")
public class ExtendedVisualizerWidget extends AbstractWidget<ODocument> {
public static final String WIDGET_TYPE_ID = "extended";
private IModel<OProperty> propertyModel = new OPropertyModel(null);
public ExtendedVisualizerWidget(String id, IModel<ODocument> model,
IModel<ODocument> widgetDocumentModel) {
super(id, model, widgetDocumentModel);
add(DisableIfDocumentNotSavedBehavior.INSTANCE);
}
@Override
protected void onInitialize() {
super.onInitialize();
Form<ODocument> form = new Form<ODocument>("form");
OProperty oProperty = propertyModel.getObject();
String component = CustomAttribute.VISUALIZATION_TYPE.getValue(oProperty);
form.add(OrienteerWebApplication.get()
.getUIVisualizersRegistry()
.getComponentFactory(oProperty.getType(), component)
.createComponent("component", DisplayMode.VIEW, getModel(),
propertyModel,
new DynamicPropertyValueModel<Object>(getModel(), propertyModel)));
add(form);
addCommand(new BookmarkablePageLinkCommand<ODocument>(newCommandId(), "command.gotoProperty", OPropertyPage.class) {
@Override
public PageParameters getPageParameters() {
return OPropertyPage.preparePageParameters(propertyModel.getObject(), DisplayMode.VIEW);
}
});
add(UpdateOnActionPerformedEventBehavior.INSTANCE_ALL_CONTINUE);
}
@Override
protected FAIcon newIcon(String id) {
return new FAIcon(id, FAIconType.table);
}
@Override
protected IModel<String> getDefaultTitleModel() {
return new OPropertyNamingModel(propertyModel);
}
@Override
public void saveSettings() {
super.saveSettings();
ODocument doc = getWidgetDocument();
if(doc!=null)
{
OProperty property = propertyModel.getObject();
doc.field("property", property.getName());
}
}
@Override
public void loadSettings() {
super.loadSettings();
ODocument doc = getWidgetDocument();
if(doc!=null)
{
String propertyName = doc.field("property");
OProperty property = getModelObject().getSchemaClass().getProperty(propertyName);
propertyModel.setObject(property);
}
}
@Override
public void detachModels() {
super.detachModels();
propertyModel.detach();
}
@Override
protected String getWidgetStyleClass() {
return "strict";
}
}