Package org.mevenide.idea.synchronize

Source Code of org.mevenide.idea.synchronize.SynchronizeWithModuleActionGroup$SynchronizeWithModuleAction

package org.mevenide.idea.synchronize;

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.ModuleListener;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.ToolWindow;
import java.awt.*;
import java.util.List;
import javax.swing.*;
import org.mevenide.idea.Res;
import org.mevenide.idea.project.ui.PomManagerPanel;
import org.mevenide.idea.synchronize.ui.SynchronizationResultsPanel;
import org.mevenide.idea.util.FileUtils;
import org.mevenide.idea.util.actions.AbstractAnAction;
import org.mevenide.idea.util.actions.AbstractAnActionGroup;
import org.mevenide.idea.util.ui.images.Icons;

/**
* @author Arik
*/
public class SynchronizeWithModuleActionGroup extends AbstractAnActionGroup {
    /**
     * Resources
     */
    private static final Res RES = Res.getInstance(SynchronizeWithModuleActionGroup.class);

    public SynchronizeWithModuleActionGroup(final Project pProject) {
        super("Synchronize POM with module", true);
        final ModuleManager moduleMgr = ModuleManager.getInstance(pProject);
        final Module[] modules = moduleMgr.getModules();
        for (Module module : modules)
            add(new SynchronizeWithModuleAction(module));

        moduleMgr.addModuleListener(new ModuleListener() {
            public void moduleAdded(Project project, Module module) {
                add(new SynchronizeWithModuleAction(module));
            }

            public void beforeModuleRemoved(Project project, Module module) {
            }

            public void moduleRemoved(Project project, Module module) {
                final AnAction[] actions = getChildren(null);
                for (AnAction action : actions) {
                    if (!(action instanceof SynchronizeWithModuleAction))
                        continue;

                    final SynchronizeWithModuleAction act = (SynchronizeWithModuleAction) action;
                    if (act.module == module)
                        remove(act);
                }
            }

            public void modulesRenamed(Project project, List<Module> modules) {
                for (Module module : modules) {
                    final AnAction[] actions = getChildren(null);
                    for (AnAction action : actions) {
                        if (!(action instanceof SynchronizeWithModuleAction))
                            continue;

                        final SynchronizeWithModuleAction act = (SynchronizeWithModuleAction) action;
                        if (act.module == module) {
                            act.getTemplatePresentation().setText(
                                    RES.get("sync.module.action.text", module.getName()));
                            act.getTemplatePresentation().setDescription(
                                    RES.get("sync.module.action.desc", module.getName()));
                        }
                    }
                }
            }
        });
    }

    @Override
    public void update(final AnActionEvent pEvent) {
        final boolean enabled = getSelectedPomUrl(pEvent) != null;
        if (PomManagerPanel.PLACE.equalsIgnoreCase(pEvent.getPlace()))
            pEvent.getPresentation().setEnabled(enabled);
        else
            pEvent.getPresentation().setVisible(enabled);
    }

    /**
     * @param pEvent
     *
     * @return selected pom url (only if it is a pom)
     * @todo this is already implemented in {@link org.mevenide.idea.project.actions.AbstractPomAnAction}
     */
    private String getSelectedPomUrl(final AnActionEvent pEvent) {
        if (PomManagerPanel.PLACE.equals(pEvent.getPlace())) {
            final Component comp = pEvent.getInputEvent().getComponent();
            final PomManagerPanel pomPanel = (PomManagerPanel) SwingUtilities.getAncestorOfClass(
                    PomManagerPanel.class,
                    comp);
            return pomPanel.getSelectedPomUrl();
        }
        else {
            final VirtualFile file = getVirtualFile(pEvent);
            if (file == null || !file.isValid() || !FileUtils.exists(file))
                return null;
            else
                return file.getUrl();
        }
    }

    private class SynchronizeWithModuleAction extends AbstractAnAction {
        private final Module module;

        public SynchronizeWithModuleAction(final Module pModule) {
            super(RES.get("sync.module.action.text", pModule.getName()),
                  RES.get("sync.module.action.desc", pModule.getName()),
                  Icons.SYNC);

            module = pModule;
        }

        public void actionPerformed(final AnActionEvent pEvent) {
            final Project project = getProject(pEvent);
            if (project == null)
                return;

            final ToolWindow tw = SynchronizationResultsPanel.getInstance(project);
            if (tw == null)
                return;

            final String url = getSelectedPomUrl(pEvent);
            if (url == null)
                return;

            tw.setAvailable(true, null);
            tw.show(new Runnable() {
                public void run() {
                    final SynchronizationResultsPanel ui;
                    ui = (SynchronizationResultsPanel) tw.getComponent();
                    final InspectionsManager mgr = InspectionsManager.getInstance(project);
                    final ProblemInfo[] problems = mgr.inspect(url, module);
                    ui.setProblems(problems);
                }
            });
        }
    }
}
TOP

Related Classes of org.mevenide.idea.synchronize.SynchronizeWithModuleActionGroup$SynchronizeWithModuleAction

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.