/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.plugin.maven.client;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.che.ide.api.action.ActionManager;
import org.eclipse.che.ide.api.action.DefaultActionGroup;
import org.eclipse.che.ide.api.constraints.Constraints;
import org.eclipse.che.ide.api.editor.EditorRegistry;
import org.eclipse.che.ide.api.extension.Extension;
import org.eclipse.che.ide.api.filetypes.FileType;
import org.eclipse.che.ide.api.filetypes.FileTypeRegistry;
import org.eclipse.che.ide.api.project.type.wizard.PreSelectedProjectTypeManager;
import org.eclipse.che.plugin.maven.client.actions.GetEffectivePomAction;
import org.eclipse.che.plugin.maven.client.actions.ReimportMavenDependenciesAction;
import org.eclipse.che.plugin.maven.client.comunnication.MavenMessagesHandler;
import org.eclipse.che.plugin.maven.client.comunnication.progressor.background.DependencyResolverAction;
import org.eclipse.che.plugin.maven.client.editor.ClassFileSourcesDownloader;
import org.eclipse.che.plugin.maven.client.editor.PomEditorProvider;
import org.eclipse.che.plugin.maven.client.project.MavenModelImporter;
import org.eclipse.che.plugin.maven.client.project.ResolvingMavenProjectStateHolder;
import org.eclipse.che.plugin.maven.shared.MavenAttributes;
import java.util.Arrays;
import java.util.List;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_ASSISTANT;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_RIGHT_STATUS_PANEL;
import static org.eclipse.che.plugin.maven.client.actions.MavenActionsConstants.MAVEN_GROUP_CONTEXT_MENU_ID;
import static org.eclipse.che.plugin.maven.client.actions.MavenActionsConstants.MAVEN_GROUP_CONTEXT_MENU_NAME;
/**
* Maven extension entry point.
*
* @author Artem Zatsarynnyi
*/
@Singleton
@Extension(title = "Maven", version = "3.0.0")
public class MavenExtension {
private static List<MavenArchetype> archetypes;
private final MavenResources resources;
@Inject
public MavenExtension(PreSelectedProjectTypeManager preSelectedProjectManager,
MavenMessagesHandler messagesHandler,
ClassFileSourcesDownloader downloader,
MavenModelImporter importMavenModelHandler,
MavenResources resources,
ResolvingMavenProjectStateHolder resolvingProjectStateHolder) {
this.resources = resources;
preSelectedProjectManager.setProjectTypeIdToPreselect(MavenAttributes.MAVEN_ID, 100);
archetypes =
Arrays.asList(new MavenArchetype("org.apache.maven.archetypes", "maven-archetype-quickstart", "RELEASE", null),
new MavenArchetype("org.apache.maven.archetypes", "maven-archetype-webapp", "RELEASE", null),
new MavenArchetype("org.apache.openejb.maven", "tomee-webapp-archetype", "1.7.1", null));
}
public static List<MavenArchetype> getAvailableArchetypes() {
return archetypes;
}
@Inject
private void prepareActions(ActionManager actionManager,
DependencyResolverAction dependencyResolverAction,
GetEffectivePomAction getEffectivePomAction,
ReimportMavenDependenciesAction reimportMavenDependenciesAction) {
// register actions
actionManager.registerAction("getEffectivePom", getEffectivePomAction);
actionManager.registerAction("reimportMavenDependenciesAction", reimportMavenDependenciesAction);
// add actions in main menu
DefaultActionGroup assistantGroup = (DefaultActionGroup)actionManager.getAction(GROUP_ASSISTANT);
assistantGroup.add(getEffectivePomAction, Constraints.LAST);
// create maven context menu
DefaultActionGroup mavenContextMenuGroup = new DefaultActionGroup(MAVEN_GROUP_CONTEXT_MENU_NAME, true, actionManager);
actionManager.registerAction(MAVEN_GROUP_CONTEXT_MENU_ID, mavenContextMenuGroup);
mavenContextMenuGroup.getTemplatePresentation().setSVGResource(resources.maven());
// add maven context menu to main context menu
DefaultActionGroup mainContextMenuGroup = (DefaultActionGroup)actionManager.getAction("resourceOperation");
mainContextMenuGroup.addSeparator();
mainContextMenuGroup.add(mavenContextMenuGroup, Constraints.LAST);
// add actions in context menu
mavenContextMenuGroup.add(reimportMavenDependenciesAction);
mavenContextMenuGroup.addSeparator();
// add resolver widget on right part of bottom panel
final DefaultActionGroup rightStatusPanelGroup = (DefaultActionGroup)actionManager.getAction(GROUP_RIGHT_STATUS_PANEL);
rightStatusPanelGroup.add(dependencyResolverAction);
}
@Inject
private void registerFileType(FileTypeRegistry fileTypeRegistry,
MavenResources mavenResources,
EditorRegistry editorRegistry,
PomEditorProvider editorProvider) {
FileType pomFile = new FileType(mavenResources.maven(), "pom.xml", "pom\\.xml");
fileTypeRegistry.registerFileType(pomFile);
editorRegistry.register(pomFile, editorProvider);
}
}