/** * {@inheritDoc} */ @Override public boolean isChangeable() { return getId() != DEFAULT_ID; }
/** * {@inheritDoc} */ @Override public boolean performFinish() { String name = newItemWizardPage.getName(); String description = newItemWizardPage.getDescription(); int insertBeforeIndex = newItemWizardPage.getInsertedBeforeIndex(); AbstractExpression matchingRuleExpression = new BooleanExpression(false); newBusinessTransaction = new BusinessTransactionDefinition(name); if (StringUtils.isNotBlank(description)) { newBusinessTransaction.setDescription(description); } newBusinessTransaction.setMatchingRuleExpression(matchingRuleExpression); try { application.addBusinessTransactionDefinition(newBusinessTransaction, insertBeforeIndex); } catch (BusinessException e) { InspectIT.getDefault().createErrorDialog( "Adding the business transaction definition '" + newBusinessTransaction.getBusinessTransactionDefinitionName() + "' failed due to the following exception.", e, -1); return false; } return true; }
@Test public void definitionName() { businessTxDefinition.setNameExtractionExpression(null); String businessTransactionName = businessTxDefinition.determineBusinessTransactionName(isd1, cachedDataService); assertThat(businessTransactionName, equalTo(BUSINESS_TX_DEF_NAME)); }
/** * Determines the business transaction name for the given {@link InvocationSequenceData} using * the passed {@link BusinessTransactionDefinition}. * * @param invocSequence * {@link InvocationSequenceData} to determine the business transaction name for. * @param cachedDataService * {@link ICachedDataService} instance for retrieving method names, etc. * @return a business transaction name */ public String determineBusinessTransactionName(InvocationSequenceData invocSequence, ICachedDataService cachedDataService) { String businessTxName; if (dynamicNameExtractionActive()) { businessTxName = extractNameDynamically(invocSequence, cachedDataService, 0); if (null == businessTxName) { businessTxName = getBusinessTransactionDefinitionName() + NameExtractionExpression.UNKNOWN_DYNAMIC_BUSINESS_TRANSACTION_POSTFIX; } else if (StringUtils.isEmpty(businessTxName)) { businessTxName = getBusinessTransactionDefinitionName() + NameExtractionExpression.EMPTY_DYNAMIC_BUSINESS_TRANSACTION_POSTFIX; } } else { businessTxName = getBusinessTransactionDefinitionName(); } return businessTxName; }
/** * Adds business transaction definition to the application definition. Inserts it to the list * before the element with the passed index. * * @param businessTransactionDefinition * {@link BusinessTransactionDefinition} instance to add * @param insertBeforeIndex * insert before this index * @throws BusinessException * If the application definition already contains a business transaction with same * identifier or the insertBeforeIndex is not valid. */ public void addBusinessTransactionDefinition(BusinessTransactionDefinition businessTransactionDefinition, int insertBeforeIndex) throws BusinessException { if (businessTransactionDefinition == null) { throw new BusinessException("Adding business transaction 'null'.", BusinessContextErrorCodeEnum.UNKNOWN_BUSINESS_TRANSACTION); } else if (businessTransactionDefinitions.contains(businessTransactionDefinition)) { throw new BusinessException( "Adding business transaction " + businessTransactionDefinition.getBusinessTransactionDefinitionName() + " with id " + businessTransactionDefinition.getId() + ".", BusinessContextErrorCodeEnum.DUPLICATE_ITEM); } else if ((insertBeforeIndex < 0) || (insertBeforeIndex > businessTransactionDefinitions.size())) { throw new BusinessException("Adding business transaction " + businessTransactionDefinition.getBusinessTransactionDefinitionName() + " with id " + businessTransactionDefinition.getId() + " at index " + insertBeforeIndex + ".", BusinessContextErrorCodeEnum.INVALID_MOVE_OPRATION); } else { businessTransactionDefinitions.add(insertBeforeIndex, businessTransactionDefinition); } }
application = new ApplicationData(idGenerator.getAndIncrement(), applicationDefinition.getId(), applicationDefinition.getApplicationName()); businessTxDefinition_1 = new BusinessTransactionDefinition(idGenerator.getAndIncrement(), "businessTxDefinition_1", null); businessTx_1 = new BusinessTransactionData(idGenerator.getAndIncrement(), businessTxDefinition_1.getId(), application, businessTxDefinition_1.getBusinessTransactionDefinitionName()); applicationDefinition.addBusinessTransactionDefinition(businessTxDefinition_1); when(stringValueSource.getStringValues(level_2_1, cachedDataService)).thenReturn(new String[] { "node/level_2_1/", "node/level_2_1/multiple" }); when(businessContextManagementService.registerApplication(applicationDefinition)).thenReturn(application); when(businessContextManagementService.registerBusinessTransaction(application, businessTxDefinition_1, businessTxDefinition_1.getBusinessTransactionDefinitionName())) .thenReturn(businessTx_1); when(invocationDataDao.getInvocationSequenceDetail(0, 0, -1, null, null, null)).thenReturn(Collections.singletonList(root));
/** * Start modification of the (first) selected business transaction definition. */ private void editSelectedBusinessTransaction() { ISelection selection = tableViewer.getSelection(); if (selection instanceof StructuredSelection) { BusinessTransactionDefinition businessTransactionDef = (BusinessTransactionDefinition) ((StructuredSelection) selection).getFirstElement(); if (businessTransactionDef.getId() == BusinessTransactionDefinition.DEFAULT_ID) { return; } ApplicationDefinition appDefinition = getApplication(); String[] existingBusinessTxNames = new String[appDefinition.getBusinessTransactionDefinitions().size()]; int i = 0; for (BusinessTransactionDefinition businessTx : appDefinition.getBusinessTransactionDefinitions()) { existingBusinessTxNames[i] = businessTx.getBusinessTransactionDefinitionName(); i++; } EditNameDescriptionDialog dialog = new EditNameDescriptionDialog(Display.getCurrent().getActiveShell(), businessTransactionDef.getBusinessTransactionDefinitionName(), businessTransactionDef.getDescription(), "Edit Business Transaction", "Enter new business transaction name and/or description", existingBusinessTxNames); if (Dialog.OK == dialog.open()) { businessTransactionDef.setBusinessTransactionDefinitionName(dialog.getName()); if (StringUtils.isNotBlank(dialog.getDescription())) { businessTransactionDef.setDescription(dialog.getDescription()); } updateContent(new StructuredSelection(businessTransactionDef)); markDirty(); } } }
/** * {@inheritDoc} */ @Override protected StyledString getStyledText(Object element, int index) { if (element instanceof BusinessTransactionDefinition) { BusinessTransactionDefinition bTxDef = (BusinessTransactionDefinition) element; switch (index) { case 0: return new StyledString(bTxDef.getBusinessTransactionDefinitionName()); case 1: if (bTxDef.dynamicNameExtractionActive()) { StyledString result = new StyledString("Pattern: "); result.append(new StyledString(bTxDef.getNameExtractionExpression().getTargetNamePattern(), StyledString.QUALIFIER_STYLER)); return result; } else { return new StyledString(bTxDef.getBusinessTransactionDefinitionName()); } case 2: return EMPTY; case 3: return new StyledString((bTxDef.getDescription() != null) ? bTxDef.getDescription() : ""); default: return EMPTY; } } return EMPTY; }
@BeforeMethod public void init() { firstBusinessTxDefinition = new BusinessTransactionDefinition(firstBusinessTxDefinitionId, "firstBusinessTxDefinition", null); secondBusinessTxDefinition = new BusinessTransactionDefinition(secondBusinessTxDefinitionId, "secondBusinessTxDefinition", null); }
@Test public void dynamicNameOnFirstLevel() { when(extractionExpression.isSearchNodeInTrace()).thenReturn(false); when(extractionExpression.extractName(any(InvocationSequenceData.class), any(CachedDataService.class))).thenReturn(DYNAMIC_NAME); String businessTransactionName = businessTxDefinition.determineBusinessTransactionName(isd1, cachedDataService); assertThat(businessTransactionName, equalTo(DYNAMIC_NAME)); }
@Test public void matchDefaultBT() { StringMatchingExpression stringMatchingExpression = new StringMatchingExpression(PatternMatchingType.CONTAINS, "root"); stringMatchingExpression.setStringValueSource(stringValueSource); stringMatchingExpression.setSearchNodeInTrace(false); StringMatchingExpression stringMatchingExpression_2 = new StringMatchingExpression(PatternMatchingType.CONTAINS, "nothing"); stringMatchingExpression_2.setStringValueSource(stringValueSource); stringMatchingExpression_2.setSearchNodeInTrace(false); applicationDefinition.setMatchingRuleExpression(stringMatchingExpression); applicationDefinition_empty.setMatchingRuleExpression(stringMatchingExpression_2); businessTxDefinition_1.setMatchingRuleExpression(stringMatchingExpression_2); businessTxDefinition_2.setMatchingRuleExpression(stringMatchingExpression_2); processor.process(root, entityManager); assertThat(root.getApplicationId(), equalTo(application.getId())); assertThat(root.getBusinessTransactionId(), equalTo(businessTx_unknown.getId())); }
/** * {@inheritDoc} */ @Override public void addPages() { List<BusinessTransactionDefinition> businessTransactions = application.getBusinessTransactionDefinitions(); String[] items = new String[businessTransactions.size()]; int i = 0; for (BusinessTransactionDefinition businessTx : businessTransactions) { items[i] = businessTx.getBusinessTransactionDefinitionName(); i++; } newItemWizardPage = new NameDescriptionInsertBeforeWizardPage(TITLE, MESSAGE, items, BusinessContextManagerViewPart.B_TX_ORDER_INFO_TOOLTIP); addPage(newItemWizardPage); }
/** * Extracts the business transaction name dynamically from the {@link InvocationSequenceData} by * recursively iterating over the invocation sequence. * * @param invocSequence * {@link InvocationSequenceData} to extract the business transaction from. * @param cachedDataService * {@link ICachedDataService} instance for retrieving method names, etc. * @param depth * current recursion depth. THis is used stop the recursion at a specified maximum * search depth. * @return extracted name */ private String extractNameDynamically(InvocationSequenceData invocSequence, ICachedDataService cachedDataService, int depth) { String name = getNameExtractionExpression().extractName(invocSequence, cachedDataService); if ((null == name) && (null != invocSequence.getNestedSequences())) { if ((getNameExtractionExpression().getMaxSearchDepth() < 0) || (depth < getNameExtractionExpression().getMaxSearchDepth())) { for (InvocationSequenceData child : invocSequence.getNestedSequences()) { name = extractNameDynamically(child, cachedDataService, depth + 1); if (null != name) { return name; } } } } return name; }
/** * Indicates whether the name of the business transaction shell be extracted dynamically from * the measurement data. * * @return true, if dynamic extraction shell be used. */ public boolean dynamicNameExtractionActive() { return null != getNameExtractionExpression(); }
/** * {@inheritDoc} */ @Override public void commit(boolean onSave) { businessTransaction.setNameExtractionExpression(constructNameExtractionExpression()); if (onSave) { super.commit(onSave); } }
/** * {@inheritDoc} */ @Override protected Image getColumnImage(Object element, int index) { if (element instanceof BusinessTransactionDefinition) { BusinessTransactionDefinition bTxDef = (BusinessTransactionDefinition) element; switch (index) { case 0: return ImageFormatter.getBusinessTransactionDefinitionImage(bTxDef); case 2: return bTxDef.dynamicNameExtractionActive() ? InspectIT.getDefault().getImage(InspectITImages.IMG_CHECKMARK) : super.getColumnImage(element, index); default: } } return super.getColumnImage(element, index); }
@BeforeMethod public void init() { businessTxDefinition.setBusinessTransactionDefinitionName(BUSINESS_TX_DEF_NAME); isd1 = new InvocationSequenceData(); isd1.setId(1); isd2 = new InvocationSequenceData(); isd2.setId(2); isd1.getNestedSequences().add(isd2); }
businessTxDefinition_1 = new BusinessTransactionDefinition(idGenerator.getAndIncrement(), "businessTxDefinition_1", null); businessTx_1 = new BusinessTransactionData(idGenerator.getAndIncrement(), businessTxDefinition_1.getId(), application, businessTxDefinition_1.getBusinessTransactionDefinitionName()); businessTxDefinition_2 = new BusinessTransactionDefinition(idGenerator.getAndIncrement(), "businessTxDefinition_2", null); businessTx_2 = new BusinessTransactionData(idGenerator.getAndIncrement(), businessTxDefinition_2.getId(), application, businessTxDefinition_2.getBusinessTransactionDefinitionName()); businessTx_unknown = new BusinessTransactionData(idGenerator.getAndIncrement(), BusinessTransactionDefinition.DEFAULT_ID, application, "Unknown Transaction"); applicationDefinition.addBusinessTransactionDefinition(businessTxDefinition_1); when(businessContextManagementService.registerApplication(applicationDefinition)).thenReturn(application); when(businessContextManagementService.registerApplication(ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION)).thenReturn(application_unknown); when(businessContextManagementService.registerBusinessTransaction(application, businessTxDefinition_1, businessTxDefinition_1.getBusinessTransactionDefinitionName())) .thenReturn(businessTx_1); when(businessContextManagementService.registerBusinessTransaction(application, businessTxDefinition_2, businessTxDefinition_2.getBusinessTransactionDefinitionName())) .thenReturn(businessTx_2); when(businessContextManagementService.registerBusinessTransaction(application, applicationDefinition.getBusinessTransactionDefinition(0), applicationDefinition.getBusinessTransactionDefinition(0).getBusinessTransactionDefinitionName())).thenReturn(businessTx_unknown); when(businessContextManagementService.registerBusinessTransaction(application_unknown, ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION.getBusinessTransactionDefinition(0), ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION.getBusinessTransactionDefinition(0).getBusinessTransactionDefinitionName())).thenReturn(businessTx_unknown); when(businessContextManagementService.registerApplication(applicationDefinition_empty)).thenReturn(application_empty); when(businessContextManagementService.registerBusinessTransaction(application_empty, applicationDefinition_empty.getBusinessTransactionDefinition(0), applicationDefinition_empty.getBusinessTransactionDefinition(0).getBusinessTransactionDefinitionName())).thenReturn(businessTx_unknown);
@Test(expectedExceptions = { BusinessException.class }) public void moveUnknown() throws BusinessException { applicationDefinition.moveBusinessTransactionDefinition(new BusinessTransactionDefinition(123456789, "unknown", null), 0); } }
@Test public void dynamicNameNotMappedWithUnlimitedSearchDepth() { when(extractionExpression.isSearchNodeInTrace()).thenReturn(true); when(extractionExpression.getMaxSearchDepth()).thenReturn(-1); when(extractionExpression.extractName(isd1, cachedDataService)).thenReturn(null); when(extractionExpression.extractName(isd2, cachedDataService)).thenReturn(null); String businessTransactionName = businessTxDefinition.determineBusinessTransactionName(isd1, cachedDataService); assertThat(businessTransactionName, equalTo(BUSINESS_TX_DEF_NAME + NameExtractionExpression.UNKNOWN_DYNAMIC_BUSINESS_TRANSACTION_POSTFIX)); } }