package rocks.inspectit.ui.rcp.ci.handler;
import org.apache.commons.lang.StringUtils;
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.dialogs.Dialog;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import rocks.inspectit.shared.all.exception.BusinessException;
import rocks.inspectit.shared.cs.ci.business.impl.ApplicationDefinition;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.ci.view.BusinessContextManagerViewPart;
import rocks.inspectit.ui.rcp.dialog.EditNameDescriptionDialog;
import rocks.inspectit.ui.rcp.provider.IApplicationProvider;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
/**
* Handler for editing application.
*
* @author Alexander Wert
*
*/
public class EditApplicationHandler extends AbstractHandler implements IHandler {
/**
* {@inheritDoc}
*/
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
StructuredSelection selection = (StructuredSelection) HandlerUtil.getCurrentSelection(event);
if (selection.isEmpty()) {
return null;
}
Object selected = selection.getFirstElement();
if (selected instanceof IApplicationProvider) {
IApplicationProvider applicationProvider = (IApplicationProvider) selected;
ApplicationDefinition applicationDefinition = applicationProvider.getApplication();
CmrRepositoryDefinition repositoryDefinition = applicationProvider.getCmrRepositoryDefinition();
String[] existingApplicationNames = new String[applicationProvider.getParentList().size()];
int i = 0;
for (IApplicationProvider appProvider : applicationProvider.getParentList()) {
existingApplicationNames[i] = appProvider.getApplication().getApplicationName();
i++;
}
EditNameDescriptionDialog dialog = new EditNameDescriptionDialog(HandlerUtil.getActiveShell(event), applicationDefinition.getApplicationName(), applicationDefinition.getDescription(),
"Edit Application", "Enter new application name and/or description", existingApplicationNames);
if (Dialog.OK == dialog.open()) {
applicationDefinition.setApplicationName(dialog.getName());
if (StringUtils.isNotBlank(dialog.getDescription())) {
applicationDefinition.setDescription(dialog.getDescription());
} else {
applicationDefinition.setDescription("");
}
try {
applicationDefinition = repositoryDefinition.getConfigurationInterfaceService().updateApplicationDefinition(applicationDefinition);
InspectIT.getDefault().getInspectITConfigurationInterfaceManager().applicationUpdated(applicationDefinition, repositoryDefinition);
// set selection to the edited element after editing
IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
if (part instanceof BusinessContextManagerViewPart) {
((BusinessContextManagerViewPart) part).selectApplicationDefinition(applicationDefinition, repositoryDefinition);
}
} catch (BusinessException e) {
throw new ExecutionException("Update of the application state failed.", e);
}
}
}
return null;
}
}