package org.orienteer.core.component.property; import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.form.FormComponentPanel; import org.apache.wicket.markup.html.panel.GenericPanel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; import org.orienteer.core.component.IExportable; import org.orienteer.core.component.ODocumentPageLink; import org.orienteer.core.component.command.modal.SelectDialogPanel; import org.orienteer.core.model.ODocumentNameModel; import ru.ydn.wicket.wicketorientdb.model.DynamicPropertyValueModel; import ru.ydn.wicket.wicketorientdb.model.ODocumentModel; import com.orientechnologies.orient.core.db.record.OIdentifiable; 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 FormComponentPanel} to edit LINK properties */ public class LinkEditPanel extends FormComponentPanel<OIdentifiable> implements IExportable<String> { protected IModel<ODocument> inputDocument; protected ModalWindow modal; public LinkEditPanel(String id, IModel<ODocument> documentModel, IModel<OProperty> propertyModel) { super(id, new DynamicPropertyValueModel<OIdentifiable>(documentModel, propertyModel)); setOutputMarkupPlaceholderTag(true); setRenderBodyOnly(false); inputDocument = new ODocumentModel(getModelObject()); add(new ODocumentPageLink("link", inputDocument).setDocumentNameAsBody(true)); modal = new ModalWindow("modal"); modal.setAutoSize(true); add(modal); modal.setTitle(new ResourceModel("command.select.modal.title")); modal.setContent(new SelectDialogPanel(modal.getContentId(), modal, new PropertyModel<OClass>(propertyModel, "linkedClass"), false) { @Override protected boolean onSelect(AjaxRequestTarget target, List<ODocument> objects, boolean selectMore) { if(objects==null || objects.size()==0) return true; if(objects.size()>1) { String message = getLocalizer().getString("alert.onlyoneshouldbeselected", this).replace("\"", "\\\""); target.appendJavaScript("alert(\""+message+"\")"); return false; } else { inputDocument.setObject(objects.get(0)); target.add(LinkEditPanel.this); return true; } } }); add(new AjaxLink("select") { @Override public void onClick(AjaxRequestTarget target) { modal.show(target); } }); add(new AjaxLink("release") { @Override public void onClick(AjaxRequestTarget target) { inputDocument.setObject(null); target.add(LinkEditPanel.this); } @Override protected void onConfigure() { super.onConfigure(); setVisible(inputDocument.getObject()!=null); } }); } @Override public IModel<String> getExportableDataModel() { return new ODocumentNameModel(inputDocument); } @Override public void convertInput() { super.convertInput(); setConvertedInput(inputDocument.getObject()); } @Override public void detachModels() { super.detachModels(); inputDocument.detach(); } }