com.opendoorlogistics.components.geocode.postcodes.impl.SummaryPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.opendoorlogistics.components.geocode.postcodes.impl.SummaryPanel.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser Public License v3
 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
 ******************************************************************************/
package com.opendoorlogistics.components.geocode.postcodes.impl;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.io.File;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingWorker;

import org.apache.commons.io.FilenameUtils;

import com.opendoorlogistics.api.ODLApi;

final public class SummaryPanel extends JPanel {
    private final JTextArea text = new JTextArea();

    public SummaryPanel() {
        setLayout(new BorderLayout());
        text.setEditable(false);
        JScrollPane scrollpane = new JScrollPane(text);
        scrollpane.setViewportView(text);
        add(scrollpane, BorderLayout.CENTER);
        Dimension size = new Dimension(350, 100);
        scrollpane.setMinimumSize(new Dimension(1, (int) size.getHeight()));
        scrollpane.setPreferredSize(size);
        scrollpane.setMaximumSize(new Dimension(2000, (int) size.getHeight()));
        text.setBackground(new Color(220, 220, 220));
        text.setOpaque(true);

    }

    public void setFile(ODLApi api, String filename) {
        if (filename != null) {
            File file = PCConstants.resolvePostcodeFile(api, new File(filename));
            if (file.exists()) {
                if (file.isFile() && FilenameUtils.getExtension(filename).toLowerCase()
                        .equals(PCConstants.DBFILE_EXTENSION)) {
                    text.setText("Currently parsing: " + System.lineSeparator() + filename);
                    ParseFileWorker parseFileWorker = new ParseFileWorker(file);
                    parseFileWorker.execute();
                } else {
                    text.setText("File is not a postcode geocode file (." + PCConstants.DBFILE_EXTENSION + "): "
                            + System.lineSeparator() + filename);
                }

            } else {
                text.setText("File does not exist: " + System.lineSeparator() + filename);
            }
        } else {
            text.setText("No file set");
        }
    }

    private class ParseFileWorker extends SwingWorker<String, Void> {
        private final File file;

        ParseFileWorker(File file) {
            this.file = file;
        }

        @Override
        protected String doInBackground() throws Exception {
            try {
                PCGeocodeFile pcfile = new PCGeocodeFile(file);
                String ret = pcfile.getDescription();
                pcfile.close();
                return ret;
            } catch (Throwable e) {
            }
            return createErrorString();
        }

        private String createErrorString() {
            return "Postcode file cannot be read: " + System.lineSeparator() + file.getAbsolutePath();
        }

        /*
         * Executed in event dispatch thread
         */

        @Override
        public void done() {
            String description = createErrorString();
            try {
                String s = get();
                description = "File: " + file.getAbsolutePath() + System.lineSeparator() + s;
            } catch (Throwable e) {
                // TODO: handle exception
            }
            text.setText(description);
        }
    }
}