trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/dialog/FilterPropertyDialog.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/dialog/FilterPropertyDialog.java Wed Jun 23 14:49:59 2010 +0300
@@ -0,0 +1,415 @@
+/*
+ * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ * Filter Property Dialog class
+ *
+ */
+package com.nokia.traceviewer.dialog;
+
+import java.util.List;
+
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+
+import com.nokia.traceviewer.dialog.treeitem.FilterTreeComponentItem;
+import com.nokia.traceviewer.dialog.treeitem.FilterTreeItem;
+import com.nokia.traceviewer.dialog.treeitem.FilterTreeTextItem;
+import com.nokia.traceviewer.dialog.treeitem.TreeItem;
+import com.nokia.traceviewer.dialog.treeitem.TreeItemListener;
+import com.nokia.traceviewer.engine.TraceViewerGlobals;
+import com.nokia.traceviewer.engine.activation.TraceActivationComponentItem;
+import com.nokia.traceviewer.engine.activation.TraceActivationGroupItem;
+
+/**
+ * Filter Property Dialog class
+ */
+public class FilterPropertyDialog extends BasePropertyDialog {
+
+ /**
+ * Text to show when Text rule is selected
+ */
+ private static final String TEXT_RULE_INFORMATION_TEXT = Messages
+ .getString("FilterPropertyDialog.TextRuleInformation"); //$NON-NLS-1$
+
+ /**
+ * Text to show when Component rule is selected
+ */
+ private static final String COMPONENT_RULE_INFORMATION_TEXT = Messages
+ .getString("FilterPropertyDialog.ComponentRuleInfoLine1") //$NON-NLS-1$
+ + WILDCARD_STRING
+ + Messages.getString("FilterPropertyDialog.ComponentRuleInfoLine2"); //$NON-NLS-1$
+
+ /**
+ * Old item used when editing it
+ */
+ private FilterTreeItem oldItem;
+
+ /**
+ * Selected item in tree
+ */
+ private final FilterTreeItem selectedItem;
+
+ /**
+ * TreeItem listener
+ */
+ private final TreeItemListener listener;
+
+ /**
+ * TreeViewer from main filter dialog
+ */
+ private final TreeViewer viewer;
+
+ /**
+ * Constructor
+ *
+ * @param parent
+ * Parent shell
+ * @param newItem
+ * TreeItem to modify, null if creating new one
+ * @param listener
+ * TreeItem listener
+ * @param selected
+ * selected item in tree
+ * @param viewer
+ * tree viewer from filter dialog
+ */
+ public FilterPropertyDialog(Shell parent, FilterTreeItem newItem,
+ TreeItemListener listener, Object selected, TreeViewer viewer) {
+ super(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+ this.newItem = newItem;
+ this.selectedItem = (FilterTreeItem) selected;
+ this.listener = listener;
+ this.viewer = viewer;
+
+ // If edit, save the old item to insert info to fields
+ if (newItem != null) {
+ oldItem = newItem;
+ textFieldTouched = true;
+ nameFieldTouched = true;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.nokia.traceviewer.dialog.BaseDialog#createDialogContents()
+ */
+ @Override
+ protected void createDialogContents() {
+ getShell().setText(
+ Messages.getString("FilterPropertyDialog.ShellTitle")); //$NON-NLS-1$
+ createMainComposite();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.traceviewer.dialog.BasePropertyDialog#insertDataToUpperComposite
+ * ()
+ */
+ @Override
+ protected void insertDataToUpperComposite() {
+ nameLabel.setText(Messages
+ .getString("FilterPropertyDialog.FilterNameText")); //$NON-NLS-1$
+ // Set data from old item
+ if (oldItem != null) {
+ nameText.setText(oldItem.getName());
+ if (oldItem.getRule() == FilterTreeItem.Rule.TEXT_RULE) {
+ selectedRuleLabel.setText(TEXT_RULE_NAME);
+ } else if (oldItem.getRule() == FilterTreeItem.Rule.COMPONENT_RULE) {
+ selectedRuleLabel.setText(COMPONENT_RULE_NAME);
+ } else {
+ selectedRuleLabel.setText(TEXT_RULE_NAME);
+ }
+ } else {
+ selectedRuleLabel.setText(TEXT_RULE_NAME);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.nokia.traceviewer.dialog.BasePropertyDialog#setListSelection()
+ */
+ @Override
+ protected void setListSelection() {
+ ruleList.add(TEXT_RULE_NAME, TEXT_RULE_INDEX);
+ ruleList.add(COMPONENT_RULE_NAME, COMPONENT_RULE_INDEX);
+ // Set list selection
+ if (oldItem != null) {
+ if (oldItem.getRule() == FilterTreeItem.Rule.TEXT_RULE) {
+ ruleList.setSelection(TEXT_RULE_INDEX);
+ } else if (oldItem.getRule() == FilterTreeItem.Rule.COMPONENT_RULE) {
+ ruleList.setSelection(COMPONENT_RULE_INDEX);
+ }
+ } else {
+ ruleList.setSelection(TEXT_RULE_INDEX);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.traceviewer.dialog.BasePropertyDialog#insertDataToTextFields()
+ */
+ @Override
+ protected void insertDataToTextFields() {
+ if (oldItem instanceof FilterTreeTextItem) {
+ FilterTreeTextItem item = (FilterTreeTextItem) oldItem;
+ if (item.getText() != null) {
+ textText.setText(item.getText());
+ }
+ matchCaseCheckBox.setSelection(item.isMatchCase());
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.traceviewer.dialog.BasePropertyDialog#insertDataToComponentFields
+ * ()
+ */
+ @Override
+ protected void insertDataToComponentFields() {
+ // Get component list
+ List<TraceActivationComponentItem> components = null;
+ if (TraceViewerGlobals.getDecodeProvider() != null) {
+ components = TraceViewerGlobals.getDecodeProvider()
+ .getActivationInformation(false);
+ }
+
+ // Insert data to fields
+ if (oldItem instanceof FilterTreeComponentItem) {
+ FilterTreeComponentItem item = (FilterTreeComponentItem) oldItem;
+ if (item.getComponentId() == WILDCARD_INTEGER) {
+ componentTextField.setText(WILDCARD_STRING);
+ } else {
+ componentTextField.setText(HEX_PREFIX
+ + Integer.toHexString(item.getComponentId()));
+ }
+ if (item.getGroupId() == WILDCARD_INTEGER) {
+ groupTextField.setText(WILDCARD_STRING);
+ } else {
+ groupTextField.setText(HEX_PREFIX
+ + Integer.toHexString(item.getGroupId()));
+ }
+
+ // Loop through components
+ if (components != null) {
+ for (int i = 0; i < components.size(); i++) {
+ if (components.get(i).getId() == item.getComponentId()) {
+ componentNameLabel.setText(components.get(i).getName());
+ // Get groups
+ List<TraceActivationGroupItem> groups = components.get(
+ i).getGroups();
+ // Loop through groups
+ for (int j = 0; j < groups.size(); j++) {
+ if (groups.get(j).getId() == item.getGroupId()) {
+ groupNameLabel.setText(groups.get(j).getName());
+ break;
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Disable change component / group buttons if no components are
+ // available
+ if (components == null || components.size() <= 0) {
+ changeComponentButton.setEnabled(false);
+ changeGroupButton.setEnabled(false);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ @Override
+ protected void okPressed() {
+ TraceViewerGlobals.postUiEvent("OkButton", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ // Save the position of this item to set it back after creation
+ // and remove the old child
+ int pos = 0;
+ FilterTreeItem parent = selectedItem;
+ if (oldItem != null) {
+ pos = getOldPosition();
+ parent = (FilterTreeItem) oldItem.getParent();
+ parent.removeChild(oldItem);
+ }
+
+ // Create new FilterTextItem
+ if (ruleList.getSelectionIndex() == TEXT_RULE_INDEX) {
+ newItem = new FilterTreeTextItem(listener, parent, nameText
+ .getText(), FilterTreeItem.Rule.TEXT_RULE, textText
+ .getText(), matchCaseCheckBox.getSelection());
+
+ // Create new FilterTreeComponentItem
+ } else if (ruleList.getSelectionIndex() == COMPONENT_RULE_INDEX) {
+ int componentId = WILDCARD_INTEGER;
+ int groupId = WILDCARD_INTEGER;
+
+ // Get component ID
+ try {
+ String cid = componentTextField.getText();
+ if (cid.substring(0, HEX_PREFIX.length()).equals(HEX_PREFIX)) {
+ cid = cid.substring(HEX_PREFIX.length());
+ }
+ componentId = Integer.parseInt(cid, HEX_RADIX);
+ } catch (Exception e) {
+ }
+
+ // Get group ID
+ try {
+ String gid = groupTextField.getText();
+ if (gid.substring(0, HEX_PREFIX.length()).equals(HEX_PREFIX)) {
+ gid = gid.substring(HEX_PREFIX.length());
+ }
+ groupId = Integer.parseInt(gid, HEX_RADIX);
+ } catch (Exception e) {
+ }
+
+ // Create new FilterTreeComponentItem
+ newItem = new FilterTreeComponentItem(listener, parent, nameText
+ .getText(), FilterTreeItem.Rule.COMPONENT_RULE,
+ componentId, groupId);
+ } else {
+ // No other rules defined yet
+ }
+
+ // Check for possible rule name conflicts
+ checkNameConflict(newItem);
+
+ // Add mode
+ if (parent.equals(selectedItem)) {
+ parent.addChild(newItem);
+
+ // Edit mode
+ } else {
+ parent.addChild(pos, newItem);
+ }
+
+ TraceViewerGlobals.postUiEvent("OkButton", "0"); //$NON-NLS-1$ //$NON-NLS-2$
+ super.okPressed();
+ }
+
+ /**
+ * Check that a item with the same name doesn't already exist
+ *
+ * @param item
+ * item to check
+ */
+ void checkNameConflict(TreeItem item) {
+ String originalName = item.getName();
+
+ // Change spaces to underscores
+ originalName = originalName.replace(' ', '_');
+
+ // Change AND to and and OR to or to not to conflict with logical
+ // operatations
+ originalName = originalName.replace("AND", "and"); //$NON-NLS-1$ //$NON-NLS-2$
+ originalName = originalName.replace("OR", "or"); //$NON-NLS-1$ //$NON-NLS-2$
+ originalName = originalName.replace("NOT", "not"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ // Remove brackets
+ originalName = originalName.replace("(", ""); //$NON-NLS-1$ //$NON-NLS-2$
+ originalName = originalName.replace(")", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+ item.setName(originalName);
+
+ // Check that a item with the same name doesn't already exist
+ org.eclipse.swt.widgets.TreeItem oldItem = findItemWithName(
+ originalName, viewer.getTree().getTopItem());
+ int i = 1;
+
+ // Change the name until it can't be found again
+ while (oldItem != null) {
+ item.setName(originalName + "_" + ++i); //$NON-NLS-1$
+ oldItem = findItemWithName(item.getName(), viewer.getTree()
+ .getTopItem());
+ }
+ }
+
+ /**
+ * Finds item from tree items
+ *
+ * @param name
+ * the name to search for
+ * @param item
+ * item to check for
+ * @return item if found, null otherwise
+ */
+ private org.eclipse.swt.widgets.TreeItem findItemWithName(String name,
+ org.eclipse.swt.widgets.TreeItem item) {
+ org.eclipse.swt.widgets.TreeItem retItem = null;
+
+ // Has children, recurse
+ if (item.getItemCount() > 0) {
+ for (int i = 0; i < item.getItemCount() && retItem == null; i++) {
+ retItem = findItemWithName(name, item.getItems()[i]);
+ }
+
+ // Check the rule
+ } else {
+ if (item.getText().equals(name)) {
+ retItem = item;
+ }
+ }
+
+ return retItem;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.traceviewer.dialog.BasePropertyDialog#setInformationLabel()
+ */
+ @Override
+ protected void setInformationLabel() {
+ if (ruleList.getSelectionIndex() == TEXT_RULE_INDEX) {
+ informationLabel.setText(TEXT_RULE_INFORMATION_TEXT);
+ selectedRuleLabel.setText(TEXT_RULE_NAME);
+ } else if (ruleList.getSelectionIndex() == COMPONENT_RULE_INDEX) {
+ informationLabel.setText(COMPONENT_RULE_INFORMATION_TEXT);
+ selectedRuleLabel.setText(COMPONENT_RULE_NAME);
+ }
+ }
+
+ /**
+ * Gets old position of this item
+ *
+ * @return old position
+ */
+ protected int getOldPosition() {
+ FilterTreeItem item = (FilterTreeItem) oldItem.getParent();
+ Object[] children = item.getChildren();
+ int pos = 0;
+ for (int i = 0; i < children.length; i++) {
+ if (children[i].equals(oldItem)) {
+ pos = i;
+ break;
+ }
+ }
+ return pos;
+ }
+}