[jbosstools-commits] JBoss Tools SVN: r40823 - in trunk/maven/plugins/org.jboss.tools.maven.ui: icons and 4 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Mon May 7 12:30:03 EDT 2012


Author: snjeza
Date: 2012-05-07 12:30:02 -0400 (Mon, 07 May 2012)
New Revision: 40823

Added:
   trunk/maven/plugins/org.jboss.tools.maven.ui/icons/
   trunk/maven/plugins/org.jboss.tools.maven.ui/icons/jboss.png
   trunk/maven/plugins/org.jboss.tools.maven.ui/icons/repo_wiz.gif
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/ConfigureMavenRepositoriesMarkerResolution.java
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/ConfigureMavenRepositoriesWizard.java
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/ConfigureMavenRepositoriesWizardPage.java
Modified:
   trunk/maven/plugins/org.jboss.tools.maven.ui/build.properties
   trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.properties
   trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.xml
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/MavenDependencyMarkerResolutionGenerator.java
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/OpenPageInBrowserMarkerResolution.java
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencePage.java
Log:
JBIDE-11235 - Recognize EAP/WFK maven repositories and add them into ~/.m2/settings.xml

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/build.properties
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/build.properties	2012-05-07 16:21:53 UTC (rev 40822)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/build.properties	2012-05-07 16:30:02 UTC (rev 40823)
@@ -8,4 +8,5 @@
                about.mappings,\
                about.ini,\
                about.html,\
-               plugin.properties
+               plugin.properties,\
+               icons/

Added: trunk/maven/plugins/org.jboss.tools.maven.ui/icons/jboss.png
===================================================================
(Binary files differ)


Property changes on: trunk/maven/plugins/org.jboss.tools.maven.ui/icons/jboss.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/maven/plugins/org.jboss.tools.maven.ui/icons/repo_wiz.gif
===================================================================
(Binary files differ)


Property changes on: trunk/maven/plugins/org.jboss.tools.maven.ui/icons/repo_wiz.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.properties
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.properties	2012-05-07 16:21:53 UTC (rev 40822)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.properties	2012-05-07 16:30:02 UTC (rev 40823)
@@ -11,3 +11,6 @@
 JBoss_Public_Repo_description=The JBoss Public repository is a composite repository of several major repositories
 JBoss_Releases_Repo_name=JBoss Releases repository
 JBoss_Releases_Repo_description=The JBoss Releases repository mostly contains JBoss projects artifacts
+
+JBossTools_Category = JBoss Tools
+Configure_Maven_Repositories = Configure Maven Repositories

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.xml
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.xml	2012-05-07 16:21:53 UTC (rev 40822)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.xml	2012-05-07 16:30:02 UTC (rev 40823)
@@ -145,4 +145,18 @@
             markerType="org.eclipse.m2e.core.maven2Problem.pomloading">
         </markerResolutionGenerator>
     </extension>
+    
+    <extension point="org.eclipse.ui.newWizards">
+    <category
+            name="%JBossTools_Category"
+            id="org.jboss.ide.eclipse.ui.wizards">
+    </category>
+    <wizard
+          category="org.jboss.ide.eclipse.ui.wizards"
+          class="org.jboss.tools.maven.ui.wizard.ConfigureMavenRepositoriesWizard"
+          icon="icons/repo_wiz.gif"
+          id="org.jboss.tools.maven.ui.wizard.ConfigureMavenRepositoriesWizard"
+          name="%Configure_Maven_Repositories">
+    </wizard>
+  </extension>
 </plugin>

Added: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/ConfigureMavenRepositoriesMarkerResolution.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/ConfigureMavenRepositoriesMarkerResolution.java	                        (rev 0)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/ConfigureMavenRepositoriesMarkerResolution.java	2012-05-07 16:30:02 UTC (rev 40823)
@@ -0,0 +1,49 @@
+/*************************************************************************************
+ * Copyright (c) 2009-2011 Red Hat, Inc. and others.
+ * 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:
+ *     JBoss by Red Hat - Initial implementation.
+ ************************************************************************************/
+package org.jboss.tools.maven.ui.internal.markers;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolution2;
+import org.jboss.tools.maven.ui.wizard.ConfigureMavenRepositoriesWizard;
+
+public class ConfigureMavenRepositoriesMarkerResolution implements IMarkerResolution,
+		IMarkerResolution2 {
+
+	
+	public ConfigureMavenRepositoriesMarkerResolution() {
+	}
+	
+	public String getDescription() {
+		return getLabel();
+	}
+
+	public Image getImage() {					
+		return null;
+	}
+
+	public String getLabel() {
+		return "Configure Maven Repositories";
+	}
+
+	public void run(IMarker arg0) {
+
+		ConfigureMavenRepositoriesWizard wizard = new ConfigureMavenRepositoriesWizard();
+		WizardDialog dialog = new WizardDialog(Display.getDefault().getActiveShell(), wizard);
+		dialog.create();
+		dialog.open(); 
+		
+	}
+	
+}

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/MavenDependencyMarkerResolutionGenerator.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/MavenDependencyMarkerResolutionGenerator.java	2012-05-07 16:21:53 UTC (rev 40822)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/MavenDependencyMarkerResolutionGenerator.java	2012-05-07 16:30:02 UTC (rev 40823)
@@ -47,11 +47,13 @@
 		switch (type) {
 		case JBOSS_REPO:
 			return new IMarkerResolution[] {
+					new ConfigureMavenRepositoriesMarkerResolution(),
 					new OpenPageInBrowserMarkerResolution(Messages.Quickfix_setupCommunityRepo, 
 							JBOSS_COMMUNITY_REPO_SETUP_GUIDE_URL)
 					};
 		case EAP_REPO:
 			return new IMarkerResolution[] { 
+					new ConfigureMavenRepositoriesMarkerResolution(),
 					new OpenPageInBrowserMarkerResolution(Messages.Quickfix_setupEnterpriseRepo, 
 							JBOSS_ENTERPRISE_REPO_SETUP_GUIDE_URL)
 					};

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/OpenPageInBrowserMarkerResolution.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/OpenPageInBrowserMarkerResolution.java	2012-05-07 16:21:53 UTC (rev 40822)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/markers/OpenPageInBrowserMarkerResolution.java	2012-05-07 16:30:02 UTC (rev 40823)
@@ -21,6 +21,7 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.browser.IWebBrowser;
 import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+import org.jboss.tools.maven.ui.Activator;
 
 public class OpenPageInBrowserMarkerResolution implements IMarkerResolution,
 		IMarkerResolution2 {
@@ -58,11 +59,9 @@
 			}
 			browser.openURL(new URL(url));
 		} catch (PartInitException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			Activator.log(e);
 		} catch (MalformedURLException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			Activator.log(e);
 		}
 	}
 	

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencePage.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencePage.java	2012-05-07 16:21:53 UTC (rev 40822)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencePage.java	2012-05-07 16:30:02 UTC (rev 40823)
@@ -13,18 +13,24 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.jboss.tools.maven.ui.Activator;
 import org.jboss.tools.maven.ui.Messages;
+import org.jboss.tools.maven.ui.wizard.ConfigureMavenRepositoriesWizard;
 import org.osgi.framework.Bundle;
 
 /**
@@ -58,6 +64,7 @@
 	private Button configureJaxRsButton;
 	private Button configureJpaButton;
 	private Button configureGwtButton;
+	private Image jbossImage;
 	
 	@Override
 	protected Control createContents(Composite parent) {
@@ -165,9 +172,33 @@
 			configureGwtButton.setSelection(configureJpa);
 		}
 
+		Button configureMavenButton = new Button(composite, SWT.PUSH);
+		configureMavenButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, true, false));
+		configureMavenButton.setText("Configure Maven Repositories...");
+		configureMavenButton.setImage(getJBossImage());
 		
+		configureMavenButton.addSelectionListener(new SelectionAdapter() {
+			
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				ConfigureMavenRepositoriesWizard wizard = new ConfigureMavenRepositoriesWizard();
+				WizardDialog dialog = new WizardDialog(Display.getDefault().getActiveShell(), wizard);
+				dialog.create();
+				dialog.open(); 
+			}
+		});
+		
 		return composite;
 	}
+	
+	private Image getJBossImage() {
+		if (jbossImage == null) {
+			ImageDescriptor desc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
+					"icons/jboss.png"); //$NON-NLS-1$
+			jbossImage = desc.createImage();
+		}
+		return jbossImage;
+	}
 
 	private boolean bundleExists(String bundleId) {
 		Bundle bundle = Platform.getBundle(bundleId);
@@ -293,5 +324,13 @@
 		return super.performOk();
 	}
 
+	@Override
+	public void dispose() {
+		if (jbossImage != null) {
+			jbossImage.dispose();
+		}
+		super.dispose();
+	}
+
 		
 }

Added: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/ConfigureMavenRepositoriesWizard.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/ConfigureMavenRepositoriesWizard.java	                        (rev 0)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/ConfigureMavenRepositoriesWizard.java	2012-05-07 16:30:02 UTC (rev 40823)
@@ -0,0 +1,41 @@
+package org.jboss.tools.maven.ui.wizard;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.jboss.tools.maven.ui.Activator;
+
+public class ConfigureMavenRepositoriesWizard extends Wizard implements
+		INewWizard {
+
+	private ConfigureMavenRepositoriesWizardPage page;
+
+	public ConfigureMavenRepositoriesWizard() {
+		super();
+		setWindowTitle("Maven Repositories");
+	}
+	
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		initializeDefaultPageImageDescriptor();
+	}
+
+	private void initializeDefaultPageImageDescriptor() {
+		ImageDescriptor desc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
+						"icons/repo_wiz.gif"); //$NON-NLS-1$
+		setDefaultPageImageDescriptor(desc);
+	}
+	
+	@Override
+	public boolean performFinish() {
+		page.finishPage();
+		return true;
+	}
+
+	@Override
+	public void addPages() {
+		page = new ConfigureMavenRepositoriesWizardPage();
+		addPage(page);
+	}
+}

Added: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/ConfigureMavenRepositoriesWizardPage.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/ConfigureMavenRepositoriesWizardPage.java	                        (rev 0)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/wizard/ConfigureMavenRepositoriesWizardPage.java	2012-05-07 16:30:02 UTC (rev 40823)
@@ -0,0 +1,710 @@
+package org.jboss.tools.maven.ui.wizard;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.cli.MavenCli;
+import org.apache.maven.settings.Activation;
+import org.apache.maven.settings.Profile;
+import org.apache.maven.settings.Repository;
+import org.apache.maven.settings.RepositoryPolicy;
+import org.apache.maven.settings.Settings;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.m2e.core.MavenPlugin;
+import org.eclipse.m2e.core.embedder.IMaven;
+import org.eclipse.m2e.core.embedder.IMavenConfiguration;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.jboss.tools.maven.ui.Activator;
+
+public class ConfigureMavenRepositoriesWizardPage extends WizardPage {
+
+	private static final String SEPARATOR = "/"; //$NON-NLS-1$
+	
+	private static final String JSF_IMPL = "com" + File.separator + "sun" + File.separator + "faces" + File.separator + "jsf-impl";  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+	private static final String WFK_BOMS = "com" + File.separator + "redhat" + File.separator + "jboss" + File.separator + "wfk" + File.separator + "boms";  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+	
+	private static final String PAGE_NAME = "org.jboss.tools.maven.ui.wizard.page"; //$NON-NLS-1$
+	private static final String ADD_ALL = " Add All>> ";
+	private static final String ADD = " Add>> ";
+	private static final String REMOVE_ALL = " <<Remove All ";
+	private static final String REMOVE = " <Remove ";
+
+	private Button removeButton;
+	private Button removeAllButton;
+	private Button addButton;
+	private Button addAllButton;
+	private IMavenConfiguration mavenConfiguration;
+	private IMaven maven;
+	private Image jbossImage;
+	private ListViewer includedRepositoriesViewer;
+	private List<Repository> includedRepositories;
+	private List<Repository> availableRepositories;
+	private List<Repository> selectedIncludedRepositories = new ArrayList<Repository>();
+	private List<Repository> selectedAvailableRepositories = new ArrayList<Repository>();
+	private ListViewer availableRepositoriesViewer;
+	
+	public ConfigureMavenRepositoriesWizardPage() {
+		super(PAGE_NAME);
+		setTitle("Configure Maven Repositories");
+		mavenConfiguration = MavenPlugin.getMavenConfiguration();
+		maven = MavenPlugin.getMaven();
+		try {
+			maven.reloadSettings();
+		} catch (CoreException e) {
+			Activator.log(e);
+		}
+	}
+
+	public void createControl(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		composite.setLayout(new GridLayout(1, false));
+		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+		composite.setLayoutData(gd);
+		Dialog.applyDialogFont(composite);
+		setControl(composite);
+		
+		Label userSettingsLabel = new Label(composite, SWT.NONE);
+		gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+		userSettingsLabel.setLayoutData(gd);
+		
+		String userSettings = getUserSettings();
+	    userSettingsLabel.setText("User settings: " + userSettings);
+	    
+	    Group repositoriesGroup = new Group(composite, SWT.NONE);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        GridLayout layout = new GridLayout(3, false);
+        repositoriesGroup.setLayout(layout);
+        repositoriesGroup.setLayoutData(gd);
+        repositoriesGroup.setText("Repositories");
+	
+        Composite availableRepositoriesComposite = new Composite(repositoriesGroup, SWT.NONE);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        availableRepositoriesComposite.setLayoutData(gd);
+        availableRepositoriesComposite.setLayout(new GridLayout());
+        
+        Label availableRepositoriesLabel = new Label(availableRepositoriesComposite, SWT.NONE);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        availableRepositoriesLabel.setLayoutData(gd);
+        availableRepositoriesLabel.setText("Available Repositories:");
+        
+        availableRepositoriesViewer = new ListViewer(availableRepositoriesComposite, SWT.BORDER | SWT.MULTI |SWT.H_SCROLL|SWT.V_SCROLL);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        gd.heightHint = 300;
+        gd.widthHint = 300;
+        availableRepositoriesViewer.getList().setLayoutData(gd);
+        availableRepositoriesViewer.setContentProvider(new ArrayContentProvider());
+        availableRepositoriesViewer.setLabelProvider(new RepositoryLabelProvider());
+        
+        Composite buttonsComposite = new Composite(repositoriesGroup, SWT.NONE);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        buttonsComposite.setLayoutData(gd);
+        buttonsComposite.setLayout(new GridLayout(1, false));
+        
+        Label buttonsLabel = new Label(buttonsComposite, SWT.NONE);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        buttonsLabel.setLayoutData(gd);
+        
+        Composite buttonsComp = new Composite(buttonsComposite, SWT.NONE);
+        gd = new GridData(SWT.FILL, SWT.FILL, false, true);
+        buttonsComp.setLayoutData(gd);
+        buttonsComp.setLayout(new GridLayout());
+        
+        GC gc = new GC(buttonsComp);
+        int maxAddRemoveButtonsWidth = computeMaxAddRemoveButtonsWidth(gc);
+        gc.dispose();
+        
+        removeButton = createButton(buttonsComp, maxAddRemoveButtonsWidth, REMOVE);
+        removeAllButton = createButton(buttonsComp, maxAddRemoveButtonsWidth, REMOVE_ALL);
+        addButton = createButton(buttonsComp, maxAddRemoveButtonsWidth, ADD);
+        addAllButton = createButton(buttonsComp, maxAddRemoveButtonsWidth, ADD_ALL);
+   
+        Composite includedRepositoriesComposite = new Composite(repositoriesGroup, SWT.NONE);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        includedRepositoriesComposite.setLayoutData(gd);
+        includedRepositoriesComposite.setLayout(new GridLayout(1, false));
+        
+        Label includedRepositoriesLabel = new Label(includedRepositoriesComposite, SWT.NONE);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        includedRepositoriesLabel.setLayoutData(gd);
+        includedRepositoriesLabel.setText("Maven Repositories:");
+	    
+	    includedRepositoriesViewer = new ListViewer(includedRepositoriesComposite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL|SWT.V_SCROLL);
+        gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+        gd.heightHint = 300;
+        gd.widthHint = 300;
+        
+        includedRepositoriesViewer.getList().setLayoutData(gd);
+        includedRepositoriesViewer.setContentProvider(new ArrayContentProvider());
+        includedRepositoriesViewer.setLabelProvider(new RepositoryLabelProvider());
+        
+        
+        Button recognizeButton = new Button(composite, SWT.PUSH);
+		recognizeButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, true, false));
+		recognizeButton.setText("Recognize JBoss Maven Enterprise Repositories...");
+		recognizeButton.setImage(getJBossImage());
+		
+		recognizeButton.addSelectionListener(new SelectionAdapter() {
+			
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				DirectoryDialog directoryDialog = new DirectoryDialog(getShell());
+				directoryDialog.setMessage("Select the directory in which to search for JBoss Maven Enterprise Repositories:");
+				directoryDialog.setText("Search for JBoss Maven Enterprise Repositories");
+
+				String pathStr = directoryDialog.open();
+				if (pathStr == null)
+					return;
+				
+				final IPath path = new Path(pathStr);
+				
+				final ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell());
+				dialog.setBlockOnOpen(false);
+				dialog.setCancelable(true);
+				dialog.open();
+				final IProgressMonitor monitor = dialog.getProgressMonitor();
+				monitor.beginTask("Searching...", 110);
+				final List<Repository> list = new ArrayList<Repository>();
+				
+				IRunnableWithProgress runnable = new IRunnableWithProgress() {
+					public void run(IProgressMonitor monitor2) {
+						searchForRepositories(path, list, monitor2);
+					}
+				};
+				try {
+					dialog.run(true, true, runnable);
+				} catch (Exception e1) {
+					Activator.log(e1);
+				} 
+				
+				if (monitor.isCanceled()) {
+					return;
+				}
+				List<Repository> newRepositories = new ArrayList<Repository>();
+				if (list.size() > 0) {
+					for (Repository repository:list) {
+						String url = repository.getUrl();
+						if (url == null) {
+							continue;
+						}
+						url = changeUrl(url);
+						boolean included = false;
+						for (Repository rep:availableRepositories) {
+							String url1 = rep.getUrl();
+							if (url1 == null) {
+								continue;
+							}
+							url1 = changeUrl(url1);
+							if (url1.equals(url)) {
+								included = true;
+								break;
+							}
+						}
+						for (Repository rep:includedRepositories) {
+							String url1 = rep.getUrl();
+							if (url1 == null) {
+								continue;
+							}
+							url1 = changeUrl(url1);
+							if (url1.equals(url)) {
+								included = true;
+								break;
+							}
+						}
+						if (!included) {
+							newRepositories.add(repository);
+						}
+					}
+				}
+				if (newRepositories.size() > 0) {
+					availableRepositories.addAll(newRepositories);
+					refreshRepositories();
+				}
+			}
+		});
+		
+		includedRepositories = getIncludedRepositories();
+		availableRepositories = getAvailableRepositories();
+		List<Repository> remove = new ArrayList<Repository>();
+		for (Repository availableRepository:availableRepositories) {
+			String url = availableRepository.getUrl();
+			if (url == null) {
+				continue;
+			}
+			url = changeUrl(url);
+			for (Repository includedRepository:includedRepositories) {
+				String url1 = includedRepository.getUrl();
+				if (url1 == null) {
+					continue;
+				}
+				url1 = changeUrl(url1);
+				if (url1.equals(url)) {
+					remove.add(availableRepository);
+				}
+			}
+		}
+		for (Repository repository:remove) {
+			availableRepositories.remove(repository);
+		}
+		
+		availableRepositoriesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			
+			public void selectionChanged(SelectionChangedEvent event) {
+				ISelection sel = event.getSelection();
+				selectedAvailableRepositories.clear();
+				if (sel instanceof IStructuredSelection) {
+					IStructuredSelection selection = (IStructuredSelection) sel;
+					Iterator iterator = selection.iterator();
+					while (iterator.hasNext()) {
+						Object object = iterator.next();
+						if (object instanceof Repository) {
+							selectedAvailableRepositories.add((Repository) object);
+						}
+					}
+				}
+				configureButtons();
+			}
+		});
+		includedRepositoriesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			
+			public void selectionChanged(SelectionChangedEvent event) {
+				ISelection sel = event.getSelection();
+				selectedIncludedRepositories.clear();
+				if (sel instanceof IStructuredSelection) {
+					IStructuredSelection selection = (IStructuredSelection) sel;
+					Iterator iterator = selection.iterator();
+					while (iterator.hasNext()) {
+						Object object = iterator.next();
+						if (object instanceof Repository) {
+							selectedIncludedRepositories.add((Repository) object);
+						}
+					}
+				}
+				configureButtons();
+			}
+		});
+		removeButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				includedRepositories.removeAll(selectedIncludedRepositories);
+				availableRepositories.addAll(selectedIncludedRepositories);
+				setPageComplete(true);
+				refreshRepositories();
+			}
+		
+        });
+		removeAllButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				availableRepositories.addAll(includedRepositories);
+				includedRepositories.clear();
+				setPageComplete(true);
+				refreshRepositories();
+			}
+		
+        });
+		addButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				includedRepositories.addAll(selectedAvailableRepositories);
+				availableRepositories.removeAll(selectedAvailableRepositories);
+				setPageComplete(true);
+				refreshRepositories();
+			}
+		
+        });
+		addAllButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				includedRepositories.addAll(availableRepositories);
+				availableRepositories.clear();
+				setPageComplete(true);
+				refreshRepositories();
+			}
+		
+        });
+		refreshRepositories();
+		setPageComplete(false);
+	}
+
+	private void searchForRepositories(IPath path,
+			List<Repository> list, IProgressMonitor monitor) {
+		File[] files = null;
+		if (path != null) {
+			File f = path.toFile();
+			if (f.isDirectory()) {
+				files = new File[1];
+				files[0] = f;
+			}
+			else
+				return;
+		} else
+			files = File.listRoots();
+
+		if (files != null) {
+			int size = files.length;
+			int work = 100 / size;
+			int workLeft = 100 - (work * size);
+			for (int i = 0; i < size; i++) {
+				if (monitor.isCanceled())
+					return;
+				if (files[i] != null && files[i].isDirectory()) {
+					searchDir(list, files[i], 4, monitor);
+				}
+				monitor.worked(work);
+			}
+			monitor.worked(workLeft);
+		} else
+			monitor.worked(100);
+	}
+	
+	private void searchDir(List<Repository> list, File directory, int depth,
+			IProgressMonitor monitor) {
+		
+		monitor.setTaskName("Searching " + directory.getAbsolutePath());
+		File comFile = new File(directory, "com");
+		if (comFile.isDirectory()) { //$NON-NLS-1$
+			Repository repository = getRepositoryFromDir(directory, list, monitor);
+			if (repository != null) {
+				list.add(repository);
+				return;
+			}
+		}
+		
+		if (depth == 0)
+			return;
+		
+		File[] files = directory.listFiles(new FileFilter() {
+			public boolean accept(File file) {
+				return file.isDirectory();
+			}
+		});
+		if (files != null) {
+			int size = files.length;
+			for (int i = 0; i < size; i++) {
+				if (monitor.isCanceled())
+					return;
+				searchDir(list, files[i], depth - 1, monitor);
+			}
+		}
+	}
+
+	private Repository getRepositoryFromDir(File directory,List<Repository> repositories, IProgressMonitor monitor) {
+		if (monitor.isCanceled()) {
+			return null;
+		}
+		
+		File file = new File(directory, JSF_IMPL);
+		if (file.isDirectory()) {
+			File[] list = file.listFiles(new FileFilter() {
+				
+				public boolean accept(File pathname) {
+					if (pathname != null && pathname.getName() != null && pathname.getName().contains("redhat")) {
+						return true;
+					}
+					return false;
+				}
+			});
+			if (list != null && list.length >= 1) {
+				// JBoss EAP Maven Repository
+				Repository repository = getDefaultRepository();
+				String id = "jboss-eap-maven-repository";
+				List<Repository> allRepositories = new ArrayList<Repository>();
+				allRepositories.addAll(repositories);
+				allRepositories.addAll(includedRepositories);
+				allRepositories.addAll(availableRepositories);
+				repository.setId(getUniqueId(id, allRepositories));
+				repository.setName("JBoss EAP Maven Repository");
+				try {
+					repository.setUrl(directory.toURI().toURL().toString());
+				} catch (MalformedURLException e) {
+					Activator.log(e);
+				}
+				return repository;
+			}
+		}
+		file = new File(directory, WFK_BOMS);
+		if (file.isDirectory()) {
+			// JBoss WFK Maven Repository
+			Repository repository = getDefaultRepository();
+			repository.setId("jboss-wfk-maven-repository");
+			repository.setName("JBoss WFK Maven Repository");
+			try {
+				repository.setUrl(directory.toURI().toURL().toString());
+			} catch (MalformedURLException e) {
+				Activator.log(e);
+			}
+			return repository;
+		}
+		return null;
+	}
+
+	private String getUniqueId(String id, List<Repository> allRepositories) {
+		int i = 0;
+		String startId = id;
+		while (true) {
+			boolean found = false;
+			for (Repository repository:allRepositories) {
+				if (id.equals(repository.getId())) {
+					id = startId + "." + i;
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				return id;
+			}
+		}
+	}
+
+	private String getUserSettings() {
+		String userSettings = mavenConfiguration.getUserSettingsFile();
+	    if(userSettings == null || userSettings.length() == 0) {
+	    	userSettings = MavenCli.DEFAULT_USER_SETTINGS_FILE.getAbsolutePath();
+	    }
+		return userSettings;
+	}
+	
+	private void configureButtons() {
+		removeButton.setEnabled(selectedIncludedRepositories.size() > 0);
+		removeAllButton.setEnabled(includedRepositories.size() > 0);
+		addButton.setEnabled(selectedAvailableRepositories.size() > 0);
+		addAllButton.setEnabled(availableRepositories.size() > 0);
+	}
+
+	private void refreshRepositories() {
+		includedRepositoriesViewer.setInput(includedRepositories.toArray(new Repository[0]));
+        availableRepositoriesViewer.setInput(availableRepositories.toArray(new Repository[0]));
+		
+        selectedIncludedRepositories.clear();
+        selectedAvailableRepositories.clear();
+        includedRepositoriesViewer.setSelection(new StructuredSelection(selectedIncludedRepositories.toArray(new Repository[0])));
+        availableRepositoriesViewer.setSelection(new StructuredSelection(selectedAvailableRepositories.toArray(new Repository[0])));
+		configureButtons();
+	}
+	
+	private String changeUrl(String url) {
+		url = url.trim();
+		if (!url.endsWith(SEPARATOR)) {
+			url = url + SEPARATOR;
+		}
+		return url;
+	}
+
+	private List<Repository> getIncludedRepositories() {
+		List<Repository> repositories = new ArrayList<Repository>();
+        try {
+			List<Profile> activeProfiles = getActiveProfiles();
+			for (Profile profile:activeProfiles) {
+				repositories.addAll(profile.getRepositories());
+			}
+		} catch (CoreException e) {
+			Activator.log(e);
+		}
+        return repositories;
+	}
+	
+	private List<Repository> getAvailableRepositories() {
+		List<Repository> repositories = new ArrayList<Repository>();
+        
+		Repository repository = getDefaultRepository();
+		
+		repository.setId("jboss-public-repository");
+		repository.setName("JBoss Public");
+		repository.setUrl("https://repository.jboss.org/nexus/content/groups/public-jboss/");
+		
+		repositories.add(repository);
+		
+		repository = getDefaultRepository();
+        repository.setId("java-net-public");
+		repository.setName("Java Net Public");
+		repository.setUrl("https://maven.java.net/content/groups/public/");
+		
+		repositories.add(repository);
+		
+		repository = getDefaultRepository();
+        repository.setId("com.springsource.repository.bundles.release");
+		repository.setName("EBR Spring Release");
+		repository.setUrl("http://repository.springsource.com/maven/bundles/release/");
+		
+		repositories.add(repository);
+		
+		repository = getDefaultRepository();
+        repository.setId("com.springsource.repository.bundles.external");
+		repository.setName("EBR External Release");
+		repository.setUrl("http://repository.springsource.com/maven/bundles/external/");
+		
+		repositories.add(repository);
+
+		repository = getDefaultRepository();
+        repository.setId("repository.apache.org");
+		repository.setName("Apache Repository");
+		repository.setUrl("https://repository.apache.org/content/groups/public/");
+		
+		repositories.add(repository);
+		
+		return repositories;
+	}
+	
+	private Repository getDefaultRepository() {
+		Repository repository = new Repository();
+		repository.setLayout("default"); //$NON-NLS-1$
+		RepositoryPolicy releases = new RepositoryPolicy();
+		releases.setEnabled(true);
+		releases.setUpdatePolicy("never"); //$NON-NLS-1$
+		repository.setReleases(releases);
+		RepositoryPolicy snapshots = new RepositoryPolicy();
+		snapshots.setEnabled(false);
+		snapshots.setUpdatePolicy("never"); //$NON-NLS-1$
+		repository.setSnapshots(snapshots);
+		return repository;
+	}
+	
+	private Image getJBossImage() {
+		if (jbossImage == null) {
+			ImageDescriptor desc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
+					"icons/jboss.png"); //$NON-NLS-1$
+			jbossImage = desc.createImage();
+		}
+		return jbossImage;
+	}
+
+	private List<Profile> getActiveProfiles() throws CoreException {
+		Settings settings = maven.getSettings();
+		List<String> activeProfilesIds = settings.getActiveProfiles();
+		List<Profile> activeProfiles = new ArrayList<Profile>();
+		for (Profile profile : settings.getProfiles()) {
+			if ((profile.getActivation() != null && profile.getActivation().isActiveByDefault())
+					|| activeProfilesIds.contains(profile.getId())) {
+				activeProfiles.add(profile);
+			}
+		}
+		return activeProfiles;
+	}
+	
+	private Button createButton(Composite buttonsComp,
+			int maxAddRemoveButtonsWidth, String text) {
+		GridData gd;
+		Button button = new Button(buttonsComp, SWT.NONE | SWT.LEFT);
+        gd = new GridData();
+        gd.verticalAlignment = GridData.VERTICAL_ALIGN_CENTER;
+        gd.widthHint = maxAddRemoveButtonsWidth;
+        button.setLayoutData(gd);
+        button.setText(text);
+        return button;
+	}
+	
+	private int computeMaxAddRemoveButtonsWidth(GC gc) {
+		int maxWidth = 0;
+
+		maxWidth = getGreaterWidth(gc,REMOVE, maxWidth);
+		maxWidth = getGreaterWidth(gc,REMOVE_ALL, maxWidth);
+		maxWidth = getGreaterWidth(gc,ADD, maxWidth);
+		maxWidth = getGreaterWidth(gc,ADD_ALL, maxWidth);
+		
+		return maxWidth;
+	}
+	
+	private int getGreaterWidth(GC gc, String str, int compareWidth) {
+		int greaterWidth = compareWidth;
+
+		Point strExtentPoint = gc.stringExtent(str);
+		int strWidth = strExtentPoint.x;
+		if (strWidth > compareWidth) {
+			greaterWidth = strWidth;
+		}
+
+		return greaterWidth + 5;
+	}
+	
+	@Override
+	public void dispose() {
+		if (jbossImage != null) {
+			jbossImage.dispose();
+		}
+		super.dispose();
+	}
+
+	class RepositoryLabelProvider extends LabelProvider {
+		public Image getImage(Object element) {
+	        return null;
+	      }
+
+	      public String getText(Object element) {
+	    	  if (element instanceof Repository) {
+	    		  Repository repository = (Repository) element;
+	    		  String name = repository.getName() == null ? "<no-name>" : repository.getName(); //$NON-NLS-1$
+	    		  return name + "-" + repository.getUrl(); //$NON-NLS-1$
+	    	  }
+	        return null;
+	      }
+	}
+
+	public void finishPage() {
+		try {
+			List<Profile> profiles;
+			profiles = getActiveProfiles();
+			Profile profile;
+			Settings settings = maven.getSettings();
+			if (profiles.size() <= 0) {
+				profile = new Profile();
+				profile.setId("jbosstools-maven-profile");
+				Activation activation = new Activation();
+				activation.setActiveByDefault(true);
+				profile.setActivation(activation);
+				settings.addProfile(profile);
+			} else {
+				profile = profiles.get(0);
+			}
+			profile.setRepositories(includedRepositories);
+			profile.setPluginRepositories(includedRepositories);
+			String userSettings = getUserSettings();
+			File file = new File(userSettings);
+			OutputStream out = new FileOutputStream(file);
+			maven.writeSettings(settings, out);
+			maven.reloadSettings();
+		} catch (Exception e) {
+			// FIXME
+			Activator.log(e);
+		}
+		
+	}
+
+}



More information about the jbosstools-commits mailing list