package rocks.inspectit.ui.rcp.ci.wizard.page; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import rocks.inspectit.shared.cs.ci.export.ConfigurationInterfaceImportData; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus; import rocks.inspectit.ui.rcp.wizard.page.SelectFileWizardPage; /** * Configuration interface import page. Extension of the {@link SelectFileWizardPage} where all the * needed import information are defined. * * @author Ivan Senic * */ public class ImportCiSelectWizardPage extends SelectFileWizardPage { /** * Default wizard page message. */ private static final String DEFAULT_MESSAGE = "Select a file to import and a destination"; /** * List of available CMR repositories. */ private final List<CmrRepositoryDefinition> cmrRepositoryList; /** * Pre-selected repository. */ private final CmrRepositoryDefinition repositoryDefinition; /** * Combo for selecting CMR. */ private Combo cmrCombo; /** * Default constructor. * * @param pageName * Page name * @param preSelectedRepository * Pre-selected repository, can be <code>null</code> */ public ImportCiSelectWizardPage(String pageName, CmrRepositoryDefinition preSelectedRepository) { super(pageName, DEFAULT_MESSAGE, new String[] { "*" + ConfigurationInterfaceImportData.FILE_EXTENSION }, "", SWT.OPEN); this.cmrRepositoryList = InspectIT.getDefault().getCmrRepositoryManager().getCmrRepositoryDefinitions(); this.repositoryDefinition = preSelectedRepository; } /** * {@inheritDoc} */ @Override public void createControl(Composite parent) { super.createControl(parent); Composite main = (Composite) getControl(); Label lbl = new Label(main, SWT.NONE); lbl.setText("Import to:"); lbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); cmrCombo = new Combo(main, SWT.DROP_DOWN | SWT.READ_ONLY); for (CmrRepositoryDefinition cmrRepositoryDefinition : cmrRepositoryList) { cmrCombo.add(cmrRepositoryDefinition.getName()); } cmrCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1)); Listener pageCompleteListener = new Listener() { @Override public void handleEvent(Event event) { setPageComplete(isPageComplete()); if (fileText.getText().isEmpty()) { setMessage("No file selected", ERROR); return; } if (cmrCombo.getSelectionIndex() == -1) { setMessage("No CMR Repository selected", ERROR); return; } else { CmrRepositoryDefinition cmrRepositoryDefinition = cmrRepositoryList.get(cmrCombo.getSelectionIndex()); if (cmrRepositoryDefinition.getOnlineStatus() == OnlineStatus.OFFLINE) { setMessage("Selected CMR Repository is offline.", ERROR); return; } } setMessage(DEFAULT_MESSAGE); } }; select.addListener(SWT.Selection, pageCompleteListener); cmrCombo.addListener(SWT.Selection, pageCompleteListener); if (null != repositoryDefinition) { cmrCombo.select(cmrCombo.indexOf(repositoryDefinition.getName())); } } /** * {@inheritDoc} */ @Override public boolean isPageComplete() { if (!super.isPageComplete()) { return false; } if (cmrCombo.getSelectionIndex() == -1) { return false; } CmrRepositoryDefinition cmrRepositoryDefinition = cmrRepositoryList.get(cmrCombo.getSelectionIndex()); if (cmrRepositoryDefinition.getOnlineStatus() == OnlineStatus.OFFLINE) { // NOPMD return false; } return true; } /** * @return Returns {@link CmrRepositoryDefinition} if any is selected for import. */ public CmrRepositoryDefinition getCmrRepositoryDefinition() { if (-1 != cmrCombo.getSelectionIndex()) { return cmrRepositoryList.get(cmrCombo.getSelectionIndex()); } return null; } }