/** * Copyright (c) 2014 - 2017 Frank Appel * 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 * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Frank Appel - initial API and implementation */ package com.codeaffine.eclipse.ui.progress; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Item; import org.eclipse.ui.IWorkbenchPartSite; abstract class StructuredViewerAdapterHelper<T extends StructuredViewer> { protected final ViewerAdapter adapter; protected final JobHelper jobHelper; protected final T viewer; private DeferredContentManager contentManager; StructuredViewerAdapterHelper( Composite parent ) { viewer = createViewer( parent ); adapter = createAdapter( viewer ); jobHelper = new JobHelper(); } abstract T createViewer( Composite parent ); abstract ViewerAdapter createAdapter( T viewer ); abstract int getItemCount(); abstract Item getItem( int index ); ViewerAdapter getViewerAdapter() { return adapter; } T getViewer() { return viewer; } DeferredContentManager getContentManager() { return contentManager; } void setInput( Object input ) { viewer.setInput( input ); } void initializeViewer( IWorkbenchPartSite site ) { contentManager = createManager( site ); viewer.setUseHashlookup( true ); viewer.setContentProvider( new TestItemContentProvider( contentManager ) ); viewer.setLabelProvider( new TestItemLabelProvider() ); } void initializeViewer() { initializeViewer( null ); } void waitTillJobHasFinished() { jobHelper.waitTillJobHasFinished(); } private DeferredContentManager createManager( IWorkbenchPartSite site ) { DeferredContentManager result = new DeferredContentManager( adapter, site ); result.addUpdateCompleteListener( jobHelper ); return result; } void cancel() { contentManager.cancel( viewer.getInput() ); } }