package rocks.inspectit.ui.rcp.wizard.page; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; 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 org.eclipse.swt.widgets.Text; import rocks.inspectit.shared.cs.storage.StorageData; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus; /** * Define storage page. * * @author Ivan Senic * */ public class DefineNewStorageWizzardPage extends WizardPage { /** * Default message. */ private static final String DEFAULT_MESSAGE = "Enter storage data and select the repository where it will be created"; /** * List of CMR repositories. */ private List<CmrRepositoryDefinition> cmrRepositories; /** * Combo box for repositories. */ private Combo cmrRepositoryCombo; /** * Box for storage name. */ private Text nameBox; /** * Box for storage description. */ private Text descriptionBox; /** * Button for choosing if storage should be auto finalized. */ private Button autoFinalize; /** * {@link CmrRepositoryDefinition} that should be initially selected. */ private CmrRepositoryDefinition proposedCmrRepositoryDefinition; /** * If auto-finalize button should be selected. */ private boolean autoFinalizeSelected; /** * Default constructor. */ public DefineNewStorageWizzardPage() { super("Define New Storage"); setTitle("Define New Storage"); setDescription(DEFAULT_MESSAGE); cmrRepositories = new ArrayList<>(); cmrRepositories.addAll(InspectIT.getDefault().getCmrRepositoryManager().getCmrRepositoryDefinitions()); } /** * This constructor will set provided {@link CmrRepositoryDefinition} as the initially selected * repository to create storage to. * * @param cmrRepositoryDefinition * {@link CmrRepositoryDefinition} to create storage on. */ public DefineNewStorageWizzardPage(CmrRepositoryDefinition cmrRepositoryDefinition) { this(cmrRepositoryDefinition, true); } /** * This constructor will set provided {@link CmrRepositoryDefinition} as the initially selected * repository to create storage to. * * @param cmrRepositoryDefinition * {@link CmrRepositoryDefinition} to create storage on. * @param autoFinalizeSecelected * If auto-finalize button should be selected. */ public DefineNewStorageWizzardPage(CmrRepositoryDefinition cmrRepositoryDefinition, boolean autoFinalizeSecelected) { this(); this.proposedCmrRepositoryDefinition = cmrRepositoryDefinition; this.autoFinalizeSelected = autoFinalizeSecelected; } /** * {@inheritDoc} */ @Override public void createControl(Composite parent) { Composite main = new Composite(parent, SWT.NONE); main.setLayout(new GridLayout(2, false)); Label cmrSelectLabel = new Label(main, SWT.LEFT); cmrSelectLabel.setText("Repository:"); cmrRepositoryCombo = new Combo(main, SWT.READ_ONLY); cmrRepositoryCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); int i = 0; int index = -1; for (CmrRepositoryDefinition cmrRepositoryDefinition : cmrRepositories) { cmrRepositoryCombo.add(cmrRepositoryDefinition.getName() + " (" + cmrRepositoryDefinition.getIp() + ":" + cmrRepositoryDefinition.getPort() + ")"); if (cmrRepositoryDefinition.equals(proposedCmrRepositoryDefinition)) { index = i; } i++; } if (index != -1) { cmrRepositoryCombo.select(index); cmrRepositoryCombo.setEnabled(false); } Label nameLabel = new Label(main, SWT.LEFT); nameLabel.setText("Storage name:"); nameBox = new Text(main, SWT.BORDER); nameBox.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); Label descLabel = new Label(main, SWT.LEFT); descLabel.setText("Description:"); descLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); descriptionBox = new Text(main, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.WRAP); descriptionBox.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); new Label(main, SWT.LEFT); autoFinalize = new Button(main, SWT.CHECK); autoFinalize.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); autoFinalize.setText("Auto-finalize storage"); autoFinalize.setToolTipText("If selected the storage will be automatically finalized after the action completes"); autoFinalize.setSelection(autoFinalizeSelected); Listener listener = new Listener() { @Override public void handleEvent(Event event) { setPageComplete(isPageComplete()); if (event.widget.equals(cmrRepositoryCombo) && (cmrRepositoryCombo.getSelectionIndex() == -1)) { setMessage("Repository must be selected", IMessageProvider.ERROR); } else if (event.widget.equals(cmrRepositoryCombo) && (getSelectedRepository().getOnlineStatus() == OnlineStatus.OFFLINE)) { setMessage("Selected repository is currently unavailable", IMessageProvider.ERROR); } else if (event.widget.equals(nameBox) && nameBox.getText().isEmpty()) { setMessage("Storage name can not be empty", IMessageProvider.ERROR); } else { setMessage(DEFAULT_MESSAGE); } } }; cmrRepositoryCombo.addListener(SWT.Selection, listener); nameBox.addListener(SWT.Modify, listener); setControl(main); } /** * {@inheritDoc} */ @Override public boolean isPageComplete() { if (cmrRepositoryCombo.getSelectionIndex() == -1) { return false; } else if (getSelectedRepository().getOnlineStatus() == OnlineStatus.OFFLINE) { return false; } if (nameBox.getText().isEmpty()) { return false; } return true; } /** * @return Returns the selected repository or null if noting is selected. */ public CmrRepositoryDefinition getSelectedRepository() { if (cmrRepositoryCombo.getSelectionIndex() != -1) { return cmrRepositories.get(cmrRepositoryCombo.getSelectionIndex()); } return null; } /** * @return {@link StorageData} that was defined. */ public StorageData getStorageData() { StorageData storageData = new StorageData(); storageData.setName(nameBox.getText().trim()); storageData.setDescription(descriptionBox.getText().trim()); return storageData; } /** * Returns if auto-finalize options is selected. * * @return Returns if auto-finalize options is selected. */ public boolean isAutoFinalize() { return autoFinalize.getSelection(); } }