package rocks.inspectit.ui.rcp.handlers;
import java.io.IOException;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.handlers.HandlerUtil;
import rocks.inspectit.shared.all.exception.BusinessException;
import rocks.inspectit.shared.all.serializer.SerializationException;
import rocks.inspectit.shared.cs.storage.StorageData;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.dialog.EditNameDescriptionDialog;
import rocks.inspectit.ui.rcp.provider.IStorageDataProvider;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus;
/**
* Edit storage name and description handler.
*
* @author Ivan Senic
*
*/
public class EditStorageDataHandler extends AbstractHandler implements IHandler {
/**
* {@inheritDoc}
*/
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IStorageDataProvider storageDataProvider = null;
Object selectedElement = ((StructuredSelection) HandlerUtil.getCurrentSelection(event)).getFirstElement();
if (selectedElement instanceof IStorageDataProvider) {
storageDataProvider = (IStorageDataProvider) selectedElement;
} else {
return null;
}
StorageData storageData = storageDataProvider.getStorageData();
EditNameDescriptionDialog editStorageDataDialog = new EditNameDescriptionDialog(HandlerUtil.getActiveShell(event), storageData.getName(), storageData.getDescription());
editStorageDataDialog.open();
if (editStorageDataDialog.getReturnCode() == Window.OK) {
CmrRepositoryDefinition cmrRepositoryDefinition = storageDataProvider.getCmrRepositoryDefinition();
if (cmrRepositoryDefinition.getOnlineStatus() != OnlineStatus.OFFLINE) {
try {
storageData.setName(editStorageDataDialog.getName());
storageData.setDescription(editStorageDataDialog.getDescription());
cmrRepositoryDefinition.getStorageService().updateStorageData(storageData);
try {
InspectIT.getDefault().getInspectITStorageManager().storageRemotelyUpdated(storageData);
} catch (SerializationException | IOException e) {
throw new ExecutionException("Storage data update failed.", e);
}
} catch (BusinessException e) {
throw new ExecutionException("Storage data update failed.", e);
}
} else {
InspectIT.getDefault().createInfoDialog("Storage data can not be updated, because the underlying repository is currently offline.", -1);
}
}
return null;
}
}