package org.orienteer.core.component.command.modal;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.GZIPInputStream;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.event.Broadcast;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.markup.html.panel.Panel;
import org.orienteer.core.component.command.ImportOSchemaCommand;
import ru.ydn.wicket.wicketorientdb.OrientDbWebSession;
import ru.ydn.wicket.wicketorientdb.utils.LoggerOCommandOutputListener;
import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.db.tool.ODatabaseImport;
/**
* Modal window for schema importing
*/
public abstract class ImportDialogPanel extends Panel
{
public ImportDialogPanel(String id, final ModalWindow modal)
{
super(id);
modal.setMinimalHeight(300);
Form<?> uploadForm = new Form<Object>("uploadForm");
final FileUploadField inputFile = new FileUploadField("inputFile");
uploadForm.add(inputFile);
uploadForm.add(new AjaxButton("importFile", uploadForm)
{
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
FileUpload file = inputFile.getFileUpload();
ODatabaseDocument db = OrientDbWebSession.get().getDatabase();
db.commit();
try
{
InputStream is = file.getInputStream();
if(file.getClientFileName().endsWith(".gz") || file.getContentType().contains("gzip"))
{
is = new GZIPInputStream(is);
}
ODatabaseImport dbImport = new ODatabaseImport((ODatabaseDocumentInternal)db, is, LoggerOCommandOutputListener.INSTANCE);
dbImport.setOptions("-merge=true");
dbImport.importDatabase();
success(getLocalizer().getString("success.import", this));
} catch (IOException e)
{
error(getLocalizer().getString("errors.import.error", this));
}
finally
{
db.begin();
}
modal.close(target);
onImportFinished(target);
}
});
add(uploadForm);
}
public abstract void onImportFinished(AjaxRequestTarget target);
}