[270065] duplications in Flash DOM view
diff --git a/plugins/org.eclipse.actf.visualization.flash/src/org/eclipse/actf/visualization/flash/ui/views/FlashDOMView.java b/plugins/org.eclipse.actf.visualization.flash/src/org/eclipse/actf/visualization/flash/ui/views/FlashDOMView.java
index 33b9c4f..fdd01fc 100644
--- a/plugins/org.eclipse.actf.visualization.flash/src/org/eclipse/actf/visualization/flash/ui/views/FlashDOMView.java
+++ b/plugins/org.eclipse.actf.visualization.flash/src/org/eclipse/actf/visualization/flash/ui/views/FlashDOMView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and Others
+ * Copyright (c) 2007, 2009 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,9 +68,6 @@
 
 public class FlashDOMView extends ViewPart implements IFlashDOMView,
 		IFlashConst {
-	public static final String ID = FlashDOMView.class.getName();
-
-	private static final String ON_RELEASE = "onRelease"; //$NON-NLS-1$
 
 	private TreeViewer viewer;
 	private Action expandAction;
@@ -137,38 +134,49 @@
 	}
 
 	public void findRectangle(Rectangle flashRect, Object objUnknown) {
+		// assumes AccessibleObject
 		viewer.setInput(new Object[] { objUnknown });
-		String strMessage = Messages.flash_error_no_element; 
+		String strMessage = Messages.flash_error_no_element;
 		RectangleFinder finder = new RectangleFinder(flashRect);
 		try {
 			finder.find(viewer.getTree().getItems());
 		} catch (Error e) {
-			e.printStackTrace();
+			// e.printStackTrace();
 		}
 		if (finder.foundCount > 0) {
-			strMessage = MessageFormat
-					.format(
-							Messages.flash_element_found, new Object[] { new Integer(finder.foundCount) }); 
+			strMessage = MessageFormat.format(Messages.flash_element_found,
+					new Object[] { new Integer(finder.foundCount) });
 		}
-		MessageDialog.openInformation(viewer.getControl().getShell(), Messages.flash_flash_dom, 
-				strMessage);
+		MessageDialog.openInformation(viewer.getControl().getShell(),
+				Messages.flash_flash_dom, strMessage);
 	}
 
 	public void addWindowlessElement(final Object objUnknown) {
-		if (!scanWindowlessAction.isChecked()) {
+		if (!scanWindowlessAction.isChecked()
+				&& objUnknown instanceof AccessibleObject) {
 			Display.getCurrent().asyncExec(new Runnable() {
 				public void run() {
 					Object currentInput = viewer.getInput();
-					if (currentInput instanceof Object[]) {
-						List<Object> list = Arrays
-								.asList((Object[]) currentInput);
-						if (!list.contains(objUnknown)) {
-							ArrayList<Object> newList = new ArrayList<Object>(
-									list);
-							newList.add(objUnknown);
-							viewer.setInput(newList.toArray());
+					IFlashPlayer player = FlashPlayerFactory
+							.getPlayerFromPtr(((AccessibleObject) objUnknown)
+									.getPtr());
+					if (currentInput instanceof IFlashPlayer[]) {
+						List<IFlashPlayer> list = Arrays
+								.asList((IFlashPlayer[]) currentInput);
+
+						for (IFlashPlayer target : list) {
+							if (target == player
+									|| target.getAccessible().getPtr() == target
+											.getAccessible().getPtr()) {
+								return;
+							}
 						}
+						ArrayList<IFlashPlayer> newList = new ArrayList<IFlashPlayer>(
+								list);
+						newList.add(player);
+						viewer.setInput(newList.toArray());
 					}
+					// else
 				}
 			});
 		}
@@ -193,10 +201,11 @@
 				try {
 					IASNode flashNode = (IASNode) item.getData();
 					if (flashNode.getLevel() >= 40) {
-						throw new Error(
-								MessageFormat
-										.format(
-												Messages.flash_error_target_length, new Object[] { new Integer(flashNode.getLevel()) }) + "\n" + flashNode.getTarget()); //$NON-NLS-1$ 
+						throw new Error(MessageFormat
+								.format(Messages.flash_error_target_length,
+										new Object[] { new Integer(flashNode
+												.getLevel()) })
+								+ "\n" + flashNode.getTarget()); //$NON-NLS-1$ 
 					}
 					double x = flashNode.getX();
 					if (x >= flashRight + MARGIN) {
@@ -328,11 +337,11 @@
 			}
 		};
 		expandAllAction
-				.setToolTipText(org.eclipse.actf.visualization.gui.internal.util.Messages.msaa_expand_all); 
+				.setToolTipText(org.eclipse.actf.visualization.gui.internal.util.Messages.msaa_expand_all);
 		expandAllAction.setImageDescriptor(GuiImages.IMAGE_EXPAND_ALL);
 
 		collapseAllAction = new Action(
-				org.eclipse.actf.visualization.gui.internal.util.Messages.msaa_collapse_all) { 
+				org.eclipse.actf.visualization.gui.internal.util.Messages.msaa_collapse_all) {
 			public void run() {
 				try {
 					viewer.collapseAll();
@@ -342,12 +351,13 @@
 			}
 		};
 		collapseAllAction
-				.setToolTipText(org.eclipse.actf.visualization.gui.internal.util.Messages.msaa_collapse_all); 
+				.setToolTipText(org.eclipse.actf.visualization.gui.internal.util.Messages.msaa_collapse_all);
 		collapseAllAction.setImageDescriptor(GuiImages.IMAGE_COLLAPSE_ALL);
 
 		refreshAction = new RefreshRootAction();
 
-		informativeTreeAction = new Action(Messages.flash_filter_noninformative, Action.AS_CHECK_BOX) { 
+		informativeTreeAction = new Action(
+				Messages.flash_filter_noninformative, Action.AS_CHECK_BOX) {
 			public void run() {
 				FlashDOMContentProvider provider = (FlashDOMContentProvider) viewer
 						.getContentProvider();
@@ -356,8 +366,8 @@
 			}
 		};
 
-		visualTreeAction = new Action(
-				Messages.flash_show_visual, Action.AS_CHECK_BOX) { 
+		visualTreeAction = new Action(Messages.flash_show_visual,
+				Action.AS_CHECK_BOX) {
 			public void run() {
 				FlashDOMContentProvider provider = (FlashDOMContentProvider) viewer
 						.getContentProvider();
@@ -366,8 +376,8 @@
 			}
 		};
 
-		debugTreeAction = new Action(
-				Messages.flash_debugMode, Action.AS_CHECK_BOX) { 
+		debugTreeAction = new Action(Messages.flash_debugMode,
+				Action.AS_CHECK_BOX) {
 			public void run() {
 				debugMode = debugTreeAction.isChecked();
 				FlashNodePropertySource.setDebugMode(debugMode);
@@ -375,7 +385,8 @@
 			}
 		};
 
-		scanWindowlessAction = new Action(Messages.flash_scanWindowless, Action.AS_CHECK_BOX) { 
+		scanWindowlessAction = new Action(Messages.flash_scanWindowless,
+				Action.AS_CHECK_BOX) {
 			public void run() {
 				FlashMSAAUtil.setScanAll(scanWindowlessAction.isChecked());
 				MSAAViewRegistory.refreshRootObject();
@@ -429,17 +440,14 @@
 								if (null == node.getText()
 										&& !ASNODE_TYPE_MOVIECLIP.equals(node
 												.getType())
-										&& 
-										!ASNODE_CLASS_BUTTON.equals(node
+										&& !ASNODE_CLASS_BUTTON.equals(node
 												.getClassName())
-										&& 
-										!ACC_PROPS.equals(node.getObjectName())
-										&& 
-										!ACC_IMPL.equals(node.getObjectName())
-										&& 
-										!ON_RELEASE
-												.equals(node.getObjectName())) 
-								{
+										&& !ACC_PROPS.equals(node
+												.getObjectName())
+										&& !ACC_IMPL.equals(node
+												.getObjectName())
+										&& !M_ON_RELEASE.equals(node
+												.getObjectName())) {
 									continue;
 								}
 								tmpV.add(node);
@@ -582,8 +590,9 @@
 					return FlashImages.OVER_RED;
 				}
 			}
-			boolean shouldWarn = "movieclip".equals(flashNode.getType()) || //$NON-NLS-1$
-					"Button".equals(flashNode.getClassName()); //$NON-NLS-1$
+			boolean shouldWarn = ASNODE_TYPE_MOVIECLIP.equals(flashNode
+					.getType())
+					|| ASNODE_CLASS_BUTTON.equals(flashNode.getClassName());
 			if (shouldWarn && null != accInfo && accInfo.isSilent()) {
 				return FlashImages.OVER_BLACK;
 			}
@@ -593,15 +602,14 @@
 			if (shouldWarn && (null == accInfo || null == accInfo.getName())) {
 				return FlashImages.OVER_RED;
 			}
-			if ("Button".equals(flashNode.getClassName())) { //$NON-NLS-1$
+			if (ASNODE_CLASS_BUTTON.equals(flashNode.getClassName())) {
 				return FlashImages.OVER_YELLOW;
 			}
 			String objectName = flashNode.getObjectName();
-			if ("onRelease".equals(objectName)) { //$NON-NLS-1$
+			if (M_ON_RELEASE.equals(objectName)) {
 				return FlashImages.OVER_YELLOW;
 			}
-			if ("_accProps".equals(objectName) || //$NON-NLS-1$
-					"_accImpl".equals(objectName)) { //$NON-NLS-1$
+			if (ACC_PROPS.equals(objectName) || ACC_IMPL.equals(objectName)) {
 				return FlashImages.OVER_GREEN;
 			}
 		} else if (element instanceof IFlashPlayer) {