package rocks.inspectit.ui.rcp.wizard.page;
import java.util.List;
import org.eclipse.swt.SWT;
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.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.storage.StorageFileType;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus;
/**
* Wizard page for selection of the storage to import.
*
* @author Ivan Senic
*
*/
public class ImportStorageSelectPage 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;
/**
* Button for selecting if storage should be imported locally.
*/
private Button locallyButton;
/**
* Combo for selecting the CMR.
*/
private Combo cmrCombo;
/**
* Default constructor.
*/
public ImportStorageSelectPage() {
super("Import Storage", DEFAULT_MESSAGE, new String[] { "*" + StorageFileType.ZIP_STORAGE_FILE.getExtension() }, "", SWT.OPEN);
cmrRepositoryList = InspectIT.getDefault().getCmrRepositoryManager().getCmrRepositoryDefinitions();
}
/**
* {@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));
locallyButton = new Button(main, SWT.RADIO);
locallyButton.setSelection(true);
locallyButton.setText("Local machine");
locallyButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
SelectionAdapter radioListener = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
cmrCombo.setEnabled(!locallyButton.getSelection());
}
};
locallyButton.addSelectionListener(radioListener);
new Label(main, SWT.NONE);
final Button cmrButton = new Button(main, SWT.RADIO);
cmrButton.setText("CMR Repository");
cmrButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
cmrButton.addSelectionListener(radioListener);
new Label(main, SWT.NONE);
cmrCombo = new Combo(main, SWT.DROP_DOWN | SWT.READ_ONLY);
for (CmrRepositoryDefinition cmrRepositoryDefinition : cmrRepositoryList) {
cmrCombo.add(cmrRepositoryDefinition.getName());
}
cmrCombo.setEnabled(false);
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;
} else if (!locallyButton.getSelection()) {
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);
locallyButton.addListener(SWT.Selection, pageCompleteListener);
cmrCombo.addListener(SWT.Selection, pageCompleteListener);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isPageComplete() {
if (!super.isPageComplete()) {
return false;
}
if (!locallyButton.getSelection()) {
if (cmrCombo.getSelectionIndex() == -1) {
return false;
}
CmrRepositoryDefinition cmrRepositoryDefinition = cmrRepositoryList.get(cmrCombo.getSelectionIndex());
if (cmrRepositoryDefinition.getOnlineStatus() == OnlineStatus.OFFLINE) {
return false;
}
}
return true;
}
/**
* @return If storage should be imported locally.
*/
public boolean isImportLocally() {
return locallyButton.getSelection();
}
/**
* @return Returns {@link CmrRepositoryDefinition} if any is selected for import.
*/
public CmrRepositoryDefinition getCmrRepositoryDefinition() {
if (-1 != cmrCombo.getSelectionIndex()) {
return cmrRepositoryList.get(cmrCombo.getSelectionIndex());
}
return null;
}
}