Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'dsf/org.eclipse.cdt.examples.dsf/src_preprocess/org/eclipse/cdt/examples/dsf/dataviewer/SyncDataViewer.java')
-rw-r--r--dsf/org.eclipse.cdt.examples.dsf/src_preprocess/org/eclipse/cdt/examples/dsf/dataviewer/SyncDataViewer.java328
1 files changed, 160 insertions, 168 deletions
diff --git a/dsf/org.eclipse.cdt.examples.dsf/src_preprocess/org/eclipse/cdt/examples/dsf/dataviewer/SyncDataViewer.java b/dsf/org.eclipse.cdt.examples.dsf/src_preprocess/org/eclipse/cdt/examples/dsf/dataviewer/SyncDataViewer.java
index b5ffa387273..0e671d5f62c 100644
--- a/dsf/org.eclipse.cdt.examples.dsf/src_preprocess/org/eclipse/cdt/examples/dsf/dataviewer/SyncDataViewer.java
+++ b/dsf/org.eclipse.cdt.examples.dsf/src_preprocess/org/eclipse/cdt/examples/dsf/dataviewer/SyncDataViewer.java
@@ -14,6 +14,7 @@
//#ifdef exercises
package org.eclipse.cdt.examples.dsf.dataviewer;
//#else
+
//#package org.eclipse.cdt.examples.dsf.dataviewer.answers;
//#endif
@@ -46,183 +47,174 @@ import org.eclipse.swt.widgets.Shell;
* {@link Query} object.
* </p>
*/
-public class SyncDataViewer
- implements IStructuredContentProvider, IDataGenerator.Listener
-{
- // The viewer and generator that this content provider using.
- final private TableViewer fViewer;
- final private IDataGenerator fDataGenerator;
-
- public SyncDataViewer(TableViewer viewer, IDataGenerator generator) {
- fViewer = viewer;
- fDataGenerator = generator;
- fDataGenerator.addListener(this);
- }
-
- @Override
+public class SyncDataViewer implements IStructuredContentProvider, IDataGenerator.Listener {
+ // The viewer and generator that this content provider using.
+ final private TableViewer fViewer;
+ final private IDataGenerator fDataGenerator;
+
+ public SyncDataViewer(TableViewer viewer, IDataGenerator generator) {
+ fViewer = viewer;
+ fDataGenerator = generator;
+ fDataGenerator.addListener(this);
+ }
+
+ @Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- // Not used
- }
-
+ // Not used
+ }
- @Override
+ @Override
public Object[] getElements(Object inputElement) {
- // Create the query object for reading data count.
- Query<Integer> countQuery = new Query<Integer>() {
- @Override
- protected void execute(DataRequestMonitor<Integer> rm) {
- fDataGenerator.getCount(rm);
- }
- };
-
- // Submit the query to be executed. A query implements a runnable
- // interface and it has to be executed in order to do its work.
- ImmediateExecutor.getInstance().execute(countQuery);
- int count = 0;
-
- // Block until the query completes, which will happen when the request
- // monitor of the execute() method is marked done.
- try {
- count = countQuery.get();
- } catch (Exception e) {
- // InterruptedException and ExecutionException can be thrown here.
- // ExecutionException containing a CoreException will be thrown
- // if an error status is set to the Query's request monitor.
- return new Object[0];
- }
-
- final int finalCount = count;
- Query<List<Integer>> valueQuery = new Query<List<Integer>>() {
- @Override
- protected void execute(final DataRequestMonitor<List<Integer>> rm) {
- final Integer[] retVal = new Integer[finalCount];
- final CountingRequestMonitor crm = new CountingRequestMonitor(
- ImmediateExecutor.getInstance(), rm)
- {
- @Override
- protected void handleSuccess() {
- rm.setData(Arrays.asList(retVal));
- rm.done();
- };
- };
- for (int i = 0; i < finalCount; i++) {
- final int finalI = i;
- fDataGenerator.getValue(
- i,
- new DataRequestMonitor<Integer>(
- ImmediateExecutor.getInstance(), crm)
- {
- @Override
- protected void handleSuccess() {
- retVal[finalI] = getData();
- crm.done();
- }
- });
- }
- crm.setDoneCount(finalCount);
- }
- };
- ImmediateExecutor.getInstance().execute(valueQuery);
- try {
- return valueQuery.get().toArray(new Integer[0]);
- } catch (Exception e) {
- }
- return new Object[0];
- }
-
- @Override
+ // Create the query object for reading data count.
+ Query<Integer> countQuery = new Query<Integer>() {
+ @Override
+ protected void execute(DataRequestMonitor<Integer> rm) {
+ fDataGenerator.getCount(rm);
+ }
+ };
+
+ // Submit the query to be executed. A query implements a runnable
+ // interface and it has to be executed in order to do its work.
+ ImmediateExecutor.getInstance().execute(countQuery);
+ int count = 0;
+
+ // Block until the query completes, which will happen when the request
+ // monitor of the execute() method is marked done.
+ try {
+ count = countQuery.get();
+ } catch (Exception e) {
+ // InterruptedException and ExecutionException can be thrown here.
+ // ExecutionException containing a CoreException will be thrown
+ // if an error status is set to the Query's request monitor.
+ return new Object[0];
+ }
+
+ final int finalCount = count;
+ Query<List<Integer>> valueQuery = new Query<List<Integer>>() {
+ @Override
+ protected void execute(final DataRequestMonitor<List<Integer>> rm) {
+ final Integer[] retVal = new Integer[finalCount];
+ final CountingRequestMonitor crm = new CountingRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+ @Override
+ protected void handleSuccess() {
+ rm.setData(Arrays.asList(retVal));
+ rm.done();
+ };
+ };
+ for (int i = 0; i < finalCount; i++) {
+ final int finalI = i;
+ fDataGenerator.getValue(i, new DataRequestMonitor<Integer>(ImmediateExecutor.getInstance(), crm) {
+ @Override
+ protected void handleSuccess() {
+ retVal[finalI] = getData();
+ crm.done();
+ }
+ });
+ }
+ crm.setDoneCount(finalCount);
+ }
+ };
+ ImmediateExecutor.getInstance().execute(valueQuery);
+ try {
+ return valueQuery.get().toArray(new Integer[0]);
+ } catch (Exception e) {
+ }
+ return new Object[0];
+ }
+
+ @Override
public void dispose() {
- fDataGenerator.removeListener(this);
- }
+ fDataGenerator.removeListener(this);
+ }
- @Override
+ @Override
public void countChanged() {
- // For any event from the generator, refresh the whole viewer.
- refreshViewer();
- }
+ // For any event from the generator, refresh the whole viewer.
+ refreshViewer();
+ }
- @Override
+ @Override
public void valuesChanged(Set<Integer> indexes) {
- // For any event from the generator, refresh the whole viewer.
- refreshViewer();
- }
-
- private void refreshViewer() {
- //#ifdef exercises
- // TODO Exercise 5 - Add a call to getElements() to force a deadlock.
- //#else
-//# getElements(null);
- //#endif
-
- // This method may be called on any thread, switch to the display
- // thread before calling the viewer.
- Display display = fViewer.getControl().getDisplay();
- display.asyncExec( new Runnable() {
- @Override
+ // For any event from the generator, refresh the whole viewer.
+ refreshViewer();
+ }
+
+ private void refreshViewer() {
+ //#ifdef exercises
+ // TODO Exercise 5 - Add a call to getElements() to force a deadlock.
+ //#else
+ //# getElements(null);
+ //#endif
+
+ // This method may be called on any thread, switch to the display
+ // thread before calling the viewer.
+ Display display = fViewer.getControl().getDisplay();
+ display.asyncExec(new Runnable() {
+ @Override
public void run() {
- if (!fViewer.getControl().isDisposed()) {
- fViewer.refresh();
- }
- }
- });
- }
-
- /**
- * The entry point for the example.
- * @param args Program arguments.
- */
- public static void main(String[] args) {
- // Create the shell to hold the viewer.
- Display display = new Display();
- Shell shell = new Shell(display, SWT.SHELL_TRIM);
- shell.setLayout(new GridLayout());
- GridData data = new GridData(GridData.FILL_BOTH);
- shell.setLayoutData(data);
- Font font = new Font(display, "Courier", 10, SWT.NORMAL);
-
- // Create the table viewer.
- TableViewer tableViewer = new TableViewer(shell, SWT.BORDER);
- tableViewer.getControl().setLayoutData(data);
-
- // Create the data generator.
- //#ifdef exercises
- // TODO Exercise 5 - Use the DataGeneratorWithExecutor() instead.
- final IDataGenerator generator = new DataGeneratorWithThread();
- //#else
-//# final IDataGenerator generator = new DataGeneratorWithExecutor();
- //#endif
-
- // Create the content provider which will populate the viewer.
- SyncDataViewer contentProvider =
- new SyncDataViewer(tableViewer, generator);
- tableViewer.setContentProvider(contentProvider);
- tableViewer.setInput(new Object());
-
- // Open the shell and service the display dispatch loop until user
- // closes the shell.
- shell.open();
- while (!shell.isDisposed()) {
- if (!display.readAndDispatch())
- display.sleep();
- }
-
- // The IDataGenerator.shutdown() method is asynchronous, this requires
- // using a query again in order to wait for its completion.
- Query<Object> shutdownQuery = new Query<Object>() {
- @Override
- protected void execute(DataRequestMonitor<Object> rm) {
- generator.shutdown(rm);
- }
- };
- ImmediateExecutor.getInstance().execute(shutdownQuery);
- try {
- shutdownQuery.get();
- } catch (Exception e) {}
-
- // Shut down the display.
- font.dispose();
- display.dispose();
- }
+ if (!fViewer.getControl().isDisposed()) {
+ fViewer.refresh();
+ }
+ }
+ });
+ }
+
+ /**
+ * The entry point for the example.
+ * @param args Program arguments.
+ */
+ public static void main(String[] args) {
+ // Create the shell to hold the viewer.
+ Display display = new Display();
+ Shell shell = new Shell(display, SWT.SHELL_TRIM);
+ shell.setLayout(new GridLayout());
+ GridData data = new GridData(GridData.FILL_BOTH);
+ shell.setLayoutData(data);
+ Font font = new Font(display, "Courier", 10, SWT.NORMAL);
+
+ // Create the table viewer.
+ TableViewer tableViewer = new TableViewer(shell, SWT.BORDER);
+ tableViewer.getControl().setLayoutData(data);
+
+ // Create the data generator.
+ //#ifdef exercises
+ // TODO Exercise 5 - Use the DataGeneratorWithExecutor() instead.
+ final IDataGenerator generator = new DataGeneratorWithThread();
+ //#else
+ //# final IDataGenerator generator = new DataGeneratorWithExecutor();
+ //#endif
+
+ // Create the content provider which will populate the viewer.
+ SyncDataViewer contentProvider = new SyncDataViewer(tableViewer, generator);
+ tableViewer.setContentProvider(contentProvider);
+ tableViewer.setInput(new Object());
+
+ // Open the shell and service the display dispatch loop until user
+ // closes the shell.
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+
+ // The IDataGenerator.shutdown() method is asynchronous, this requires
+ // using a query again in order to wait for its completion.
+ Query<Object> shutdownQuery = new Query<Object>() {
+ @Override
+ protected void execute(DataRequestMonitor<Object> rm) {
+ generator.shutdown(rm);
+ }
+ };
+ ImmediateExecutor.getInstance().execute(shutdownQuery);
+ try {
+ shutdownQuery.get();
+ } catch (Exception e) {
+ }
+
+ // Shut down the display.
+ font.dispose();
+ display.dispose();
+ }
}

Back to the top