net.rrm.ehour.ui.common.form.ImageUploadForm.java Source code

Java tutorial

Introduction

Here is the source code for net.rrm.ehour.ui.common.form.ImageUploadForm.java

Source

/*
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 * 
 * eHour is sponsored by TE-CON  - http://www.te-con.nl/
 */

package net.rrm.ehour.ui.common.form;

import net.rrm.ehour.persistence.value.ImageLogo;
import org.apache.log4j.Logger;
import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.Sanselan;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.model.util.ListModel;

import java.awt.*;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created on Apr 22, 2009, 7:02:12 PM
 *
 * @author Thies Edeling (thies@te-con.nl)
 */
public abstract class ImageUploadForm extends Form<Void> {
    private static final long serialVersionUID = 808442352504816831L;
    private FileUploadField fileUploadField;

    private static final Logger LOGGER = Logger.getLogger(ImageUploadForm.class);

    public ImageUploadForm(String id) {
        super(id);

        setMultiPart(true);
        add(fileUploadField = new FileUploadField("fileInput", new ListModel<FileUpload>()));

        add(new SubmitLink("uploadSubmit"));
    }

    /**
     * @see org.apache.wicket.markup.html.form.Form#onSubmit()
     */
    @Override
    protected void onSubmit() {
        final FileUpload upload = fileUploadField.getFileUpload();

        if (upload != null) {
            try {
                ImageLogo logo = parseImageLogo(upload);

                uploadImage(logo);
            } catch (Exception e) {
                LOGGER.warn("While uploading new image: " + e.getMessage());
                uploadImageError();
            }
        }
    }

    protected abstract void uploadImage(ImageLogo logo);

    protected abstract void uploadImageError();

    private ImageLogo parseImageLogo(FileUpload upload) throws IOException, ImageReadException {
        byte[] bytes = getBytes(upload);

        ImageLogo logo = new ImageLogo();
        logo.setImageData(bytes);

        Dimension imageSize = Sanselan.getImageSize(bytes);

        logo.setWidth((int) imageSize.getWidth());
        logo.setHeight((int) imageSize.getHeight());
        logo.setImageType(upload.getClientFileName().substring(upload.getClientFileName().lastIndexOf(".") + 1));

        return logo;
    }

    private byte[] getBytes(FileUpload upload) throws IOException {
        try (ByteArrayOutputStream bout = new ByteArrayOutputStream();
                InputStream in = new BufferedInputStream(upload.getInputStream())) {
            int b;

            while ((b = in.read()) != -1) {
                bout.write(b);
            }

            return bout.toByteArray();
        }
    }
}