/* * Copyright (c) 2010-2013 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.web.component.input; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.AjaxDownloadBehaviorFromStream; import com.evolveum.midpoint.web.component.AjaxSubmitButton; import com.evolveum.midpoint.web.component.prism.InputPanel; import java.io.InputStream; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.upload.FileUpload; import org.apache.wicket.markup.html.form.upload.FileUploadField; /** * @author shood * @author lazyman * @author katkav */ public class UploadDownloadPanel extends InputPanel { private static final Trace LOGGER = TraceManager.getTrace(UploadDownloadPanel.class); private static final String ID_BUTTON_DOWNLOAD = "download"; private static final String ID_BUTTON_DELETE = "remove"; private static final String ID_INPUT_FILE = "fileInput"; public UploadDownloadPanel(String id, boolean isReadOnly) { super(id); initLayout(isReadOnly); } private void initLayout(final boolean isReadOnly) { final FileUploadField fileUpload = new FileUploadField(ID_INPUT_FILE); Form form = this.findParent(Form.class); fileUpload.add(new AjaxFormSubmitBehavior(form, "change") { @Override protected void onSubmit ( AjaxRequestTarget target ) { super.onSubmit(target); UploadDownloadPanel.this.uploadFilePerformed(target); } @Override protected void onError (AjaxRequestTarget target){ super.onError(target); UploadDownloadPanel.this.uploadFilePerformed(target); } } ); fileUpload.setOutputMarkupId(true); add(fileUpload); final AjaxDownloadBehaviorFromStream downloadBehavior = new AjaxDownloadBehaviorFromStream() { @Override protected InputStream initStream() { return getStream(); } }; add(downloadBehavior); add(new AjaxSubmitButton(ID_BUTTON_DOWNLOAD) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { downloadPerformed(downloadBehavior, target); } }); add(new AjaxSubmitButton(ID_BUTTON_DELETE) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { removeFilePerformed(target); } }); add(new VisibleEnableBehaviour(){ @Override public boolean isVisible() { return !isReadOnly; } }); } @Override public FormComponent getBaseFormComponent() { return (FormComponent) get(ID_INPUT_FILE); } private FileUpload getFileUpload() { FileUploadField file = (FileUploadField) get(ID_INPUT_FILE); return file.getFileUpload(); } public void uploadFilePerformed(AjaxRequestTarget target) { Component input = get(ID_INPUT_FILE); try { FileUpload uploadedFile = getFileUpload(); updateValue(uploadedFile.getBytes()); LOGGER.trace("Upload file success."); input.success(getString("UploadPanel.message.uploadSuccess")); } catch (Exception e) { LOGGER.trace("Upload file error.", e); input.error(getString("UploadPanel.message.uploadError") + " " + e.getMessage()); } } public void removeFilePerformed(AjaxRequestTarget target) { Component input = get(ID_INPUT_FILE); try { updateValue(null); LOGGER.trace("Remove file success."); input.success(getString("UploadPanel.message.removeSuccess")); } catch (Exception e) { LOGGER.trace("Remove file error.", e); input.error(getString("UploadPanel.message.removeError") + " " + e.getMessage()); } } public void uploadFileFailed(AjaxRequestTarget target) { LOGGER.trace("Upload file validation failed."); } public void updateValue(byte[] file) { } public InputStream getStream() { return null; } private void downloadPerformed(AjaxDownloadBehaviorFromStream downloadBehavior, AjaxRequestTarget target) { downloadBehavior.initiate(target); } private FileUploadField getInputFile(){ return (FileUploadField)get(ID_INPUT_FILE); } }