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

Source Code of org.mevenide.idea.editor.pom.ui.GeneralInfoPanel

/* ==========================================================================
* Copyright 2003-2004 Mevenide Team
*
* 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 org.mevenide.idea.editor.pom.ui;

import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.ScrollPaneFactory;
import com.jgoodies.binding.adapter.Bindings;
import com.jgoodies.binding.beans.BeanAdapter;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.*;
import javax.swing.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mevenide.idea.Res;
import org.mevenide.idea.psi.project.PsiProject;
import org.mevenide.idea.util.ui.CustomFormsComponentFactory;
import org.mevenide.idea.util.ui.RelativeTextFieldWithBrowseButton;

/**
* @author Arik
*/
public class GeneralInfoPanel extends AbstractPomLayerPanel {
    /**
     * Logging.
     */
    private static final Log LOG = LogFactory.getLog(GeneralInfoPanel.class);

    /**
     * Resources
     */
    private static final Res RES = Res.getInstance(GeneralInfoPanel.class);

    private final JComboBox pomVersionField = new JComboBox(new String[]{"3"});
    private final TextFieldWithBrowseButton extendField;

    private final JTextField nameField = new JTextField();
    private final JTextField versionField = new JTextField();
    private final JTextField artifactIdField = new JTextField();
    private final JTextField groupIdField = new JTextField();
    private final JTextField inceptionYearField = new JTextField();
    private final JTextField urlField = new JTextField();
    private final TextFieldWithBrowseButton logoUriField;

    private final JTextField shortDescField = new JTextField();
    private final JTextArea descField = new JTextArea();

    private final JTextField packageField = new JTextField();
    private final JTextField issueTrackingUrlField = new JTextField();

    private final JTextField orgNameField = new JTextField();
    private final JTextField orgUrlField = new JTextField();
    private final TextFieldWithBrowseButton orgLogoUrlField;

    protected final PsiProject project;
    protected final BeanAdapter projectModel;
    protected final BeanAdapter orgModel;

    public GeneralInfoPanel(final PsiProject psiProject) {
        project = psiProject;
        projectModel = new BeanAdapter(project, true);
        orgModel = new BeanAdapter(project.getOrganization(), true);

        final VirtualFile virtualFile = project.getXmlFile().getVirtualFile();
        if (virtualFile == null)
            throw new IllegalStateException("PSI file has no virtual project.");
        final VirtualFile dir = virtualFile.getParent();

        extendField = new RelativeTextFieldWithBrowseButton(dir);
        logoUriField = new RelativeTextFieldWithBrowseButton(dir);
        orgLogoUrlField = new RelativeTextFieldWithBrowseButton(dir);

        initComponents();
        layoutComponents();
        bindComponents();
    }

    private void initComponents() {
        pomVersionField.setEnabled(false);

        extendField.addBrowseFolderListener(
                RES.get("choose.pom.parent"),
                RES.get("choose.pom.parent.desc"),
                project.getXmlFile().getProject(),
                FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor());

        logoUriField.addBrowseFolderListener(
                RES.get("choose.org.logo"),
                RES.get("choose.org.logo.desc"),
                project.getXmlFile().getProject(),
                FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor());

        orgLogoUrlField.addBrowseFolderListener(
                RES.get("choose.org.logo"),
                RES.get("choose.org.logo.desc"),
                project.getXmlFile().getProject(),
                FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor());

        inceptionYearField.setPreferredSize(new Dimension(60, 20));
        descField.setPreferredSize(new Dimension(300, 80));
    }

    private void layoutComponents() {
        final FormLayout layout = new FormLayout(
                "" +
                        "right:min:grow(0.05), 2dlu, fill:min:grow(0.45), 0dlu, " + //first column
                        "right:min:grow(0.05), 2dlu, fill:min:grow(0.45)",
                //second column
                "");
        DefaultFormBuilder builder = new DefaultFormBuilder(layout, this);
        builder.setComponentFactory(CustomFormsComponentFactory.getInstance());

        //
        //maven pom info
        //
        builder.appendSeparator(RES.get("maven.pom.title"));
        builder.append(RES.get("pom.version.label"), pomVersionField);
        builder.nextLine();
        builder.append(RES.get("pom.extend.label"), extendField, 5);

        //
        //project general info
        //
        builder.appendSeparator(RES.get("project.info.title"));
        builder.append(RES.get("project.name"), nameField);
        builder.append(RES.get("project.version"), versionField);
        builder.append(RES.get("project.artifact.id"), artifactIdField);
        builder.append(RES.get("project.group.id"), groupIdField);
        builder.append(RES.get("project.url"), urlField);
        builder.append(RES.get("project.logo.url"), logoUriField);
        builder.append(RES.get("project.inception.year"), inceptionYearField);
        builder.append(RES.get("project.package"), packageField);

        //
        //project descriptions
        //
        builder.appendSeparator(RES.get("project.desc.title"));
        builder.append(RES.get("project.short.desc"), shortDescField, 5);
        builder.append(RES.get("project.desc"),
                       ScrollPaneFactory.createScrollPane(descField),
                       5);

        //
        //project management
        //
        builder.appendSeparator(RES.get("project.mgmt.title"));
        builder.append(RES.get("project.issues.url"), issueTrackingUrlField, 5);

        //
        //organization
        //
        builder.appendSeparator(RES.get("project.org.title"));
        builder.append(RES.get("project.org.name"), orgNameField);
        builder.append(RES.get("project.org.url"), orgUrlField);
        builder.append(RES.get("project.org.logo"), orgLogoUrlField);
    }

    private void bindComponents() {
        Bindings.bind(extendField.getTextField(), projectModel.getValueModel("extend"));
        Bindings.bind(nameField, projectModel.getValueModel("name"));
        Bindings.bind(versionField, projectModel.getValueModel("currentVersion"));
        Bindings.bind(artifactIdField, projectModel.getValueModel("artifactId"));
        Bindings.bind(groupIdField, projectModel.getValueModel("groupId"));
        Bindings.bind(inceptionYearField, projectModel.getValueModel("inceptionYear"));
        Bindings.bind(urlField, projectModel.getValueModel("url"));
        Bindings.bind(logoUriField.getTextField(), projectModel.getValueModel("logoUri"));
        Bindings.bind(shortDescField, projectModel.getValueModel("shortDescription"));
        Bindings.bind(descField, projectModel.getValueModel("description"));
        Bindings.bind(packageField, projectModel.getValueModel("packageName"));
        Bindings.bind(issueTrackingUrlField,
                      projectModel.getValueModel("issueTrackingUrl"));
        Bindings.bind(orgNameField, orgModel.getValueModel("name"));
        Bindings.bind(orgUrlField, orgModel.getValueModel("url"));
        Bindings.bind(orgLogoUrlField.getTextField(), orgModel.getValueModel("logoUri"));
    }
}
TOP

Related Classes of org.mevenide.idea.editor.pom.ui.GeneralInfoPanel

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.