Mercurial > hg > thermostat-tools-eclipse
view com.redhat.thermostat.tools.eclipse.plugin/src/com/redhat/thermostat/tools/eclipse/plugin/wizards/ExportPluginPage.java @ 143:5c3c720c875e
Move duplicate project code into shared class
author | Omair Majid <omajid@redhat.com> |
---|---|
date | Thu, 05 Jun 2014 17:50:39 -0400 |
parents | 31d0ab4467ad |
children |
line wrap: on
line source
package com.redhat.thermostat.tools.eclipse.plugin.wizards; import java.io.File; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.jface.fieldassist.ContentProposalAdapter; import org.eclipse.jface.fieldassist.SimpleContentProposalProvider; import org.eclipse.jface.fieldassist.TextContentAdapter; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Label; import org.eclipse.swt.widgets.Text; import com.redhat.thermostat.tools.eclipse.plugin.ProjectFinder; import com.redhat.thermostat.tools.eclipse.plugin.ProjectFinder.Criteria; import com.redhat.thermostat.tools.eclipse.plugin.ProjectPreferences; import com.redhat.thermostat.tools.eclipse.plugin.ProjectUtils; import com.redhat.thermostat.tools.eclipse.plugin.SelectionUtils; public class ExportPluginPage extends WizardPage { static final String PAGE_NAME = "exportPlugin"; //$NON-NLS-1$ private IProject project; private Text projectNameText; private Text installationLocationText; private ISelection selection; public ExportPluginPage(ISelection selection) { super(PAGE_NAME); setTitle("Export Plugin"); setDescription("Export a plugin to a Thermostat installation"); this.selection = selection; } public void createControl(Composite parent) { GridData gd; Composite container = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(3, false); container.setLayout(layout); Label projectName = new Label(container, SWT.NONE); projectName.setText("Project Name"); projectNameText = new Text(container, SWT.BORDER | SWT.SINGLE); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; projectNameText.setLayoutData(gd); projectNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { dialogChanged(); } }); Label targetDirectory = new Label(container, SWT.NONE); targetDirectory.setText("Installation Location"); installationLocationText = new Text(container, SWT.BORDER | SWT.SINGLE); gd = new GridData(GridData.FILL_HORIZONTAL); installationLocationText.setLayoutData(gd); installationLocationText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { dialogChanged(); } }); Button browse = new Button(container, SWT.PUSH); browse.setText("Browse"); browse.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { handleBrowse(); } }); String[] proposals = getProjectNamesForExporting().toArray(new String[0]); SimpleContentProposalProvider projectProposalProvider = new SimpleContentProposalProvider(proposals); TextContentAdapter contentAdapter = new TextContentAdapter(); ContentProposalAdapter proposalAdapter = new ContentProposalAdapter(projectNameText, contentAdapter, projectProposalProvider, null, null); proposalAdapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); initialize(); dialogChanged(); setControl(container); } private void initialize() { IProject project = SelectionUtils.getSelectedProject(selection); if (project != null) { ProjectPreferences prefs = new ProjectPreferences(project); if (Boolean.valueOf(prefs.get(ProjectPreferences.PLUGIN_PROJECT))) { this.project = project; projectNameText.setText(project.getName()); } } } private void dialogChanged() { setErrorMessage(null); setPageComplete(isProjectValid() && isTargetLocationValid()); } /** Side-effect: Update error status message */ private boolean isProjectValid() { boolean result = ProjectUtils.isValid(getProjectName()); if (!result) { setErrorMessage("Must select a valid project"); } return result; } /** Side-effect: Update error status message */ private boolean isTargetLocationValid() { File thermostatHome = new File(installationLocationText.getText()); if (!thermostatHome.isDirectory()) { setErrorMessage("Not a valid thermostat directory"); return false; } File pluginDir = new File(thermostatHome, "plugins"); if (!pluginDir.isDirectory()) { setErrorMessage("Not a valid thermostat directory"); return false; } String pluginName = projectNameText.getText().replace("-distribution", ""); File pluginHome = new File(pluginDir, pluginName); if (pluginHome.isDirectory()) { setErrorMessage("Directory " + pluginHome + " already exists."); return false; } return true; } private void handleBrowse() { DirectoryDialog dialog = new DirectoryDialog(getShell()); String selectedDir = dialog.open(); if (selectedDir != null) { installationLocationText.setText(selectedDir); } } public IProject getProject() { return this.project; } public String getProjectName() { return this.project.getName(); } public String getInstallationLocation() { return installationLocationText.getText(); } private List<String> getProjectNamesForExporting() { ProjectFinder finder = new ProjectFinder(); return finder.findProjectNames(new ValidPluginProjectMatcher()); } private static class ValidPluginProjectMatcher implements Criteria { @Override public boolean matches(IProject project) { if (!project.isOpen()) { return false; } ProjectPreferences prefs = new ProjectPreferences(project); return Boolean.valueOf(prefs.get(ProjectPreferences.PLUGIN_PROJECT)); } } }