Package org.mevenide.idea.editor.pom.ui.reports

Source Code of org.mevenide.idea.editor.pom.ui.reports.ReportTableCellEditor

package org.mevenide.idea.editor.pom.ui.reports;

import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.SelectFromListDialog;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.TableCellEditor;
import org.mevenide.idea.Res;
import org.mevenide.idea.project.reports.MavenReportManager;
import org.mevenide.idea.project.reports.Report;
import org.mevenide.idea.psi.project.PsiReports;
import org.mevenide.idea.util.ui.MultiLineLabel;

/**
* @author Arik
*/
public class ReportTableCellEditor extends AbstractCellEditor
        implements TableCellEditor, ActionListener {
    /**
     * Resources
     */
    private static final Res RES = Res.getInstance(ReportTableCellEditor.class);

    /**
     * The field for editing with a browse button.
     */
    private final TextFieldWithBrowseButton field = new TextFieldWithBrowseButton(this);

    /**
     * The current value of the editor.
     */
    private String value = null;

    /**
     * The PSI model we use.
     */
    private final PsiReports model;
    private static final String TITLE = "Select a report";
    private static final SelectFromListDialog.ToStringAspect TO_STRING_ASPECT = new SelectFromListDialog.ToStringAspect() {
        public String getToStirng(Object obj) {
            if (obj instanceof Report) {
                final Report report = (Report) obj;
                final StringBuilder buf = new StringBuilder(report.getName());
                buf.append(" - ").append(report.getId()).append(": ");
                buf.append(report.getDescription());
                return buf.toString();
            }
            else
                return obj == null ? "Unknown" : obj.toString();
        }
    };

    public ReportTableCellEditor(final PsiReports pModel) {
        model = pModel;
        field.setBorder(null);
        field.setOpaque(false);
        field.getTextField().setBorder(BorderFactory.createLineBorder(Color.BLACK));
        field.getTextField().setOpaque(false);
    }

    public Component getTableCellEditorComponent(final JTable pTable,
                                                 final Object pValue,
                                                 final boolean pSelected,
                                                 final int pRow,
                                                 final int pColumn) {

        value = pValue == null ? null : pValue.toString();
        field.setText(value);
        return field;
    }

    public Object getCellEditorValue() {
        return value;
    }

    public void actionPerformed(final ActionEvent pEvent) {
        final Project project = model.getXmlFile().getProject();
        final MavenReportManager mgr = MavenReportManager.getInstance(project);
        final Report[] reports = mgr.getReports();

        final SelectFromListDialog dlg = new SelectFromListDialog(
                project,
                reports,
                TO_STRING_ASPECT,
                TITLE,
                ListSelectionModel.SINGLE_SELECTION);

        dlg.addToDialog(new MultiLineLabel(RES.get("select.report.label")),
                        BorderLayout.PAGE_START);

        dlg.setModal(true);
        dlg.setResizable(true);
        dlg.setSelection(value);
        dlg.show();

        if (dlg.isOK()) {
            final Object[] selection = dlg.getSelection();

            if (selection != null && selection.length > 0)
                value = ((Report) selection[0]).getId();
            else
                return;

            field.setText(value);
        }
    }
}
TOP

Related Classes of org.mevenide.idea.editor.pom.ui.reports.ReportTableCellEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.