public ClusterGroupViewer()

in src/application/org.openjdk.jmc.joverflow.ui/src/main/java/org/openjdk/jmc/joverflow/ui/viewers/ClusterGroupViewer.java [78:244]


	public ClusterGroupViewer(Composite parent, int style) {
		mContainer = new SashForm(parent, style);

		{
			Composite leftContainer = new Composite(mContainer, SWT.BORDER);
			leftContainer.setLayout(new FormLayout());

			mTitle = new Label(leftContainer, SWT.NONE);
			{
				FormData data = new FormData();
				data.top = new FormAttachment(0, 10);
				data.left = new FormAttachment(0, 10);
				mTitle.setLayoutData(data);
			}

			{
				SashForm container = new SashForm(leftContainer, SWT.VERTICAL);
				{
					FormData fd_sashForm = new FormData();
					fd_sashForm.top = new FormAttachment(mTitle, 10);
					fd_sashForm.right = new FormAttachment(100, -10);
					fd_sashForm.bottom = new FormAttachment(100, -10);
					fd_sashForm.left = new FormAttachment(0, 10);
					container.setLayoutData(fd_sashForm);
				}

				mPieChart = new PieChartViewer(container, SWT.NONE);
				mPieChart.setContentProvider(ArrayContentProvider.getInstance());
				ColorIndexedArcAttributeProvider provider = new ColorIndexedArcAttributeProvider() {
					@Override
					public int getWeight(Object element) {
						return (int) ((MemoryStatisticsItem) element).getMemory();
					}
				};
				provider.setMinimumArcAngle(5);
				mPieChart.setArcAttributeProvider(provider);

				mPieChart.setMinimumArcAngle(5);
				mPieChart.getPieChart().setZoomRatio(1.2);
				mPieChart.setComparator(new ViewerComparator() {
					@Override
					public int compare(Viewer viewer, Object e1, Object e2) {
						return (int) (((MemoryStatisticsItem) e2).getMemory()
								- ((MemoryStatisticsItem) e1).getMemory());
					}
				});

				mFilterList = new FilterList<>(container, SWT.NONE);
				mFilterList.addFilterChangedListener(this::notifyFilterChangedListeners);

				container.setWeights(new int[] {3, 2});
			}
		}

		{
			Composite tableContainer = new Composite(mContainer, SWT.BORDER);
			tableContainer.setLayout(new FillLayout(SWT.HORIZONTAL));

			mTableViewer = new MemoryStatisticsTableViewer(tableContainer, SWT.NONE);

			BiConsumer<MemoryStatisticsItem, Boolean> addFilter = (item, exclusion) -> {
				if (item.getId() == null) {
					return;
				}

				mFilterList.addFilter(new Predicate<ObjectCluster>() {

					final String qualifierName = mQualifierName;
					final String itemName = item.getId().toString();
					final boolean excluded = exclusion;

					@Override
					public boolean test(ObjectCluster oc) {
						if (qualifierName == null) {
							return itemName.equals(oc.getClassName()) ^ excluded;
						}

						if (oc.getQualifier() == null) {
							return true;
						}

						return itemName.equals(oc.getQualifier()) ^ excluded;
					}

					@Override
					public String toString() {
						return (qualifierName == null ? "Class" : mQualifierName) + (excluded ? " ≠ " : " = ") //$NON-NLS-1$ //$NON-NLS-2$
								+ item.getId().toString();
					}

					@Override
					public int hashCode() {
						return itemName.hashCode();
					}

					@Override
					public boolean equals(Object obj) {
						if (obj == null) {
							return false;
						}
						if (getClass() != obj.getClass()) {
							return false;
						}

						return hashCode() == obj.hashCode();
					}
				});
			};

			mPieChart.getPieChart().addMouseListener(new MouseListener() {
				@Override
				public void mouseDoubleClick(MouseEvent e) {
					// no op
				}

				@Override
				public void mouseDown(MouseEvent e) {
					// no op
				}

				@Override
				public void mouseUp(MouseEvent e) {
					ArcItem item = mPieChart.getPieChart().getHighlightedItem();
					if (item == null) {
						return;
					}

					if (item.getData() == null) {
						return;
					}

					addFilter.accept((MemoryStatisticsItem) item.getData(), e.button != 1);
				}
			});

			mTableViewer.getTable().addMouseListener(new MouseListener() {
				@Override
				public void mouseDoubleClick(MouseEvent e) {
					// no op
				}

				@Override
				public void mouseDown(MouseEvent e) {
					// no op
				}

				@Override
				public void mouseUp(MouseEvent e) {
					if (e.button != 1 && e.button != 3) {
						return;
					}

					if (mTableViewer.getSelection().isEmpty()) {
						return;
					}
					IStructuredSelection selection = (IStructuredSelection) mTableViewer.getSelection();
					MemoryStatisticsItem item = (MemoryStatisticsItem) selection.getFirstElement();
					addFilter.accept(item, e.button != 1);
				}
			});
		}

		mContainer.setWeights(new int[] {1, 2});

		mTableViewer.setPieChartViewer(mPieChart);
		mPieChart.setTableViewer(mTableViewer);
	}