package org.orienteer.core.component.property;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.FormComponentPanel;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import ru.ydn.wicket.wicketorientdb.model.DynamicPropertyValueModel;
import ru.ydn.wicket.wicketorientdb.model.ODocumentPropertyModel;
import com.orientechnologies.orient.core.metadata.schema.OProperty;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* {@link FormComponentPanel} to edit binary parameters (upload)
*/
public class BinaryEditPanel extends FormComponentPanel<byte[]> {
public static final String FILENAME_SUFFIX = "$fileName";
protected final CheckBox clear;
protected FileUploadField fileUploadField;
private String tempName;
private IModel<String> nameModel;
public BinaryEditPanel(String id, final IModel<ODocument> docModel, final IModel<OProperty> propModel) {
this(id, docModel, propModel, new DynamicPropertyValueModel<byte[]>(docModel, propModel));
}
public BinaryEditPanel(String id, final IModel<ODocument> docModel, final IModel<OProperty> propModel, IModel<byte[]> valueModel) {
this(id, valueModel);
nameModel = new ODocumentPropertyModel<String>(docModel, propModel.getObject().getName()+"$fileName");
}
public BinaryEditPanel(String id, IModel<byte[]> model) {
super(id, model);
fileUploadField = new FileUploadField("data");
add(fileUploadField);
fileUploadField.setOutputMarkupId(true);
clear = new AjaxCheckBox("clear", Model.of(Boolean.FALSE)) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
Boolean shouldClear = clear.getConvertedInput();
if (shouldClear) {
fileUploadField.clearInput();
}
fileUploadField.setEnabled(!shouldClear);
target.add(fileUploadField);
}
};
add(clear);
}
@Override
public void convertInput() {
if (clear.getConvertedInput())
{
setConvertedInput(null);
tempName = null;
return;
}
FileUpload fileUpload = fileUploadField.getFileUpload();
if(fileUpload!=null) {
setConvertedInput(fileUpload.getBytes());
tempName = fileUpload.getClientFileName();
}
else {
setConvertedInput(getModelObject());
}
}
@Override
public void updateModel() {
super.updateModel();
if(nameModel!=null) nameModel.setObject(tempName);
}
}