/******************************************************************************* * Copyright (c) 2017 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.windup.ui.internal.rules; import java.io.File; import javax.inject.Inject; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; 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.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IImportWizard; import org.eclipse.ui.IWorkbench; import org.jboss.tools.windup.model.domain.ModelService; import org.jboss.tools.windup.ui.internal.Messages; public class ImportExistingRulesetWizard extends Wizard implements IImportWizard{ @Inject private ModelService modelService; private ImportXMLRulesetWizardPage xmlPage; public ImportExistingRulesetWizard() { setNeedsProgressMonitor(true); setWindowTitle(Messages.ImportRuleset_title); } @Override public void init(IWorkbench workbench, IStructuredSelection selection) { } @Override public void addPages() { xmlPage = new ImportXMLRulesetWizardPage(); addPage(xmlPage); } @Override public boolean performFinish() { modelService.addRulesetRepository( xmlPage.getRulesetFileLocation(), true); return true; } private static class ImportXMLRulesetWizardPage extends WizardPage { private Text directoryText; private String rulesetFileLocation; public ImportXMLRulesetWizardPage() { super("xmlPage"); //$NON-NLS-1$ setTitle(Messages._UI_WIZARD_IMPORT_XML_RULESET_FILE_HEADING); setDescription(Messages._UI_WIZARD_IMPORT_XML_FILE_EXPL); } public String getRulesetFileLocation() { return rulesetFileLocation; } @Override public void createControl(Composite parent) { GridLayoutFactory.fillDefaults().applyTo(parent); Composite container = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().margins(5, 5).applyTo(container); GridDataFactory.fillDefaults().grab(true, true).applyTo(container); Composite top = new Composite(container, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(3).applyTo(top); GridDataFactory.fillDefaults().grab(true, false).applyTo(top); Label label = new Label(top, SWT.NONE); label.setText(Messages._UI_WIZARD_IMPORT_XML_RULESET_FILE); GridDataFactory.fillDefaults().hint(65, SWT.DEFAULT).align(SWT.BEGINNING, SWT.CENTER).applyTo(label); directoryText = new Text(top, SWT.BORDER); directoryText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); directoryText.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { validate(); } }); Button directoryButton = new Button(top, SWT.PUSH); directoryButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); directoryButton.setText(Messages.ImportRuleset_browse); directoryButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell()); dialog.setFilterExtensions(new String[] {NewXMLFilePage.EXTENSION}); rulesetFileLocation = dialog.open(); if (rulesetFileLocation != null) { directoryText.setText(rulesetFileLocation); } validate(); } }); setControl(container); validate(); } private void validate() { String path = directoryText.getText().trim(); if (!path.isEmpty()) { if (new File(path).exists()) { setPageComplete(true); } else { setPageComplete(false); } } else { setPageComplete(false); } } } }