org.chromium.debug.ui/src/org/chromium/debug/ui/DialogUtils.java
author Eugene Ostroukhov <eugeneo@symbian.org>
Mon, 07 Jun 2010 16:51:19 -0700
changeset 355 8726e95bcbba
permissions -rw-r--r--
Initial commit of updated Chrome Java SDK
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
355
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     1
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     2
// Use of this source code is governed by a BSD-style license that can be
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     3
// found in the LICENSE file.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     4
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     5
package org.chromium.debug.ui;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     6
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     7
import java.util.ArrayList;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     8
import java.util.Arrays;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
     9
import java.util.Collections;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    10
import java.util.Comparator;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    11
import java.util.HashMap;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    12
import java.util.LinkedHashMap;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    13
import java.util.LinkedHashSet;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    14
import java.util.List;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    15
import java.util.Map;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    16
import java.util.Set;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    17
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    18
import org.eclipse.jface.dialogs.IMessageProvider;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    19
import org.eclipse.swt.events.SelectionListener;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    20
import org.eclipse.swt.widgets.Button;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    21
import org.eclipse.swt.widgets.Combo;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    22
import org.eclipse.swt.widgets.Shell;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    23
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    24
/**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    25
 * A small set of utility classes that help programming dialog window logic.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    26
 */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    27
public class DialogUtils {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    28
  /*
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    29
   * Part 1. Update graph.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    30
   *
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    31
   * All logical elements of dialog and dependencies between them are modeled as DAG.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    32
   * The data flows from vertices that corresponds to various input fields through
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    33
   * some transformations to the terminal vertices that are in-dialog helper messages and OK button.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    34
   *
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    35
   * A linear data flow (no forks, no merges) is suitable for data transformation and
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    36
   * is programmed manually. Forks and merges are hard to dispatch manually and are managed by
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    37
   * class Updater.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    38
   *
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    39
   * Updater knows about "source" vertices that may have several outgoing edges and about
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    40
   * "consumer" vertices that may have several incoming edges. Based on source vertex changes
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    41
   * updater updates consumer vertices in topological order.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    42
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    43
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    44
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    45
   * Represents source vertex for Updater. Technically updater uses this interface only as a flag
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    46
   * interface, because the only methods it uses are {@link Object#equals}/Object{@link #hashCode}.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    47
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    48
  public interface ValueSource<T> {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    49
    /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    50
     * Method is not used by updater, for convenience only.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    51
     * @return current value of the vertex
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    52
     */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    53
    T getValue();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    54
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    55
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    56
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    57
   * Represents consumer vertex for Updater. Each instance should be explicitly registered in
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    58
   * Updater.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    59
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    60
  public interface ValueConsumer {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    61
    /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    62
     * Called by updater when some linked sources have changed and it's time this vertex
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    63
     * got updated. {@link Updater#reportChanged} may be called if some {@line ValueSource}s have
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    64
     * changed during this update (but this should not break topological order of the graph).
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    65
     */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    66
    void update(Updater updater);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    67
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    68
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    69
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    70
   * Helps to conduct update for vertices in a value graph.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    71
   * Technically Updater does not see a real graph, because it doesn't support vertices
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    72
   * that are simultaneously source and consumer. Programmer helps manage other edges manually by
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    73
   * calling {@link #reportChanged} method.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    74
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    75
  public static class Updater {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    76
    private final LinkedHashMap<ValueConsumer, Boolean> needsUpdateMap =
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    77
        new LinkedHashMap<ValueConsumer, Boolean>();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    78
    private final Map<ValueSource<?>, List<ValueConsumer>> reversedDependenciesMap =
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    79
        new HashMap<ValueSource<?>, List<ValueConsumer>>();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    80
    private boolean alreadyUpdating = false;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    81
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    82
    public void addConsumer(ValueConsumer value, ValueSource<?> ... dependencies) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    83
      addConsumer(value, Arrays.asList(dependencies));
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    84
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    85
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    86
    /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    87
     * Registers a consumer vertex with all its dependencies.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    88
     */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    89
    public void addConsumer(ValueConsumer value, List<? extends ValueSource<?>> dependencies) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    90
      Boolean res = needsUpdateMap.put(value, Boolean.FALSE);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    91
      if (res != null) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    92
        throw new IllegalArgumentException("Already added"); //$NON-NLS-1$
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    93
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    94
      for (ValueSource<?> dep : dependencies) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    95
        List<ValueConsumer> reversedDeps = reversedDependenciesMap.get(dep);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    96
        if (reversedDeps == null) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    97
          reversedDeps = new ArrayList<ValueConsumer>(2);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    98
          reversedDependenciesMap.put(dep, reversedDeps);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
    99
        }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   100
        reversedDeps.add(value);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   101
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   102
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   103
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   104
    /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   105
     * Reports about sources that have been changed and plans future update of consumers. This
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   106
     * method may be called at any time (it is not thread-safe though).
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   107
     */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   108
    public void reportChanged(ValueSource<?> source) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   109
      List<ValueConsumer> reversedDeps = reversedDependenciesMap.get(source);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   110
      if (reversedDeps != null) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   111
        for (ValueConsumer consumer : reversedDeps) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   112
          needsUpdateMap.put(consumer, Boolean.TRUE);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   113
        }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   114
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   115
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   116
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   117
    /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   118
     * Performs update of all vertices that need it. If some sources are reported changed
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   119
     * during the run of this method, their consumers are also updated.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   120
     */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   121
    public void update() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   122
      if (alreadyUpdating) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   123
        return;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   124
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   125
      alreadyUpdating = true;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   126
      try {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   127
        updateImpl();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   128
      } finally {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   129
        alreadyUpdating = false;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   130
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   131
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   132
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   133
    private void updateImpl() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   134
      boolean hasChanges = true;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   135
      while (hasChanges) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   136
        hasChanges = false;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   137
        for (Map.Entry<ValueConsumer, Boolean> en : needsUpdateMap.entrySet()) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   138
          if (en.getValue() == Boolean.TRUE) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   139
            en.setValue(Boolean.FALSE);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   140
            ValueConsumer currentValue = en.getKey();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   141
            currentValue.update(this);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   142
          }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   143
        }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   144
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   145
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   146
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   147
    /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   148
     * Updates all consumer vertices in graph.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   149
     */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   150
    public void updateAll() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   151
      for (Map.Entry<?, Boolean> en : needsUpdateMap.entrySet()) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   152
        en.setValue(Boolean.TRUE);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   153
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   154
      update();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   155
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   156
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   157
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   158
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   159
   * A basic implementation of object that is both consumer and source. Updater will treat
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   160
   * as 2 separate objects.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   161
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   162
  public static abstract class ValueProcessor<T> implements ValueConsumer, ValueSource<T> {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   163
    private T currentValue = null;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   164
    public T getValue() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   165
      return currentValue;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   166
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   167
    protected void setCurrentValue(T currentValue) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   168
      this.currentValue = currentValue;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   169
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   170
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   171
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   172
  /*
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   173
   * Part 2. Optional data type etc
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   174
   *
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   175
   * Since dialog should deal with error user entry, the typical data type is either value or error.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   176
   * This is implemented as Optional interface. Most of data transformations should work only
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   177
   * when all inputs are non-error and generate error in return otherwise. This is implemented in
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   178
   * ExpressionProcessor.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   179
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   180
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   181
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   182
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   183
   * A primitive approach to "optional" algebraic type. This type is T + Set<Message>.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   184
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   185
  public interface Optional<V> {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   186
    V getNormal();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   187
    boolean isNormal();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   188
    Set<? extends Message> errorMessages();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   189
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   190
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   191
  public static <V> Optional<V> createOptional(final V value) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   192
    return new Optional<V>() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   193
      public Set<Message> errorMessages() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   194
        return Collections.emptySet();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   195
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   196
      public V getNormal() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   197
        return value;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   198
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   199
      public boolean isNormal() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   200
        return true;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   201
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   202
    };
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   203
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   204
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   205
  public static <V> Optional<V> createErrorOptional(Message message) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   206
    return createErrorOptional(Collections.singleton(message));
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   207
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   208
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   209
  public static <V> Optional<V> createErrorOptional(final Set<? extends Message> messages) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   210
    return new Optional<V>() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   211
      public Set<? extends Message> errorMessages() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   212
        return messages;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   213
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   214
      public V getNormal() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   215
        throw new UnsupportedOperationException();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   216
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   217
      public boolean isNormal() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   218
        return false;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   219
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   220
    };
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   221
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   222
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   223
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   224
   * A user interface message for dialog window. It has text and priority that helps choosing
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   225
   * the most important message it there are many of them.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   226
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   227
  public static class Message {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   228
    private final String text;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   229
    private final MessagePriority priority;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   230
    public Message(String text, MessagePriority priority) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   231
      this.text = text;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   232
      this.priority = priority;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   233
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   234
    public String getText() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   235
      return text;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   236
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   237
    public MessagePriority getPriority() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   238
      return priority;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   239
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   240
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   241
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   242
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   243
   * Priority of a user interface message.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   244
   * Constants are listed from most important to least important.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   245
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   246
  public enum MessagePriority {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   247
    BLOCKING_PROBLEM(IMessageProvider.ERROR),
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   248
    BLOCKING_INFO(IMessageProvider.NONE),
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   249
    WARNING(IMessageProvider.WARNING);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   250
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   251
    private final int messageProviderType;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   252
    private MessagePriority(int messageProviderType) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   253
      this.messageProviderType = messageProviderType;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   254
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   255
    public int getMessageProviderType() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   256
      return messageProviderType;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   257
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   258
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   259
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   260
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   261
   * A base class for the source-consumer pair that accepts several values as a consumer,
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   262
   * performs a calculation over them and gives it away the result via source interface.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   263
   * Some sources may be of Optional type. If some of sources have error value the corresponding
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   264
   * error value is returned automatically.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   265
   * <p>
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   266
   * The implementation should override a single method {@link #calculateNormal}.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   267
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   268
  public static abstract class ExpressionProcessor<T> extends ValueProcessor<Optional<T>> {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   269
    private final List<ValueSource<? extends Optional<?>>> optionalSources;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   270
    public ExpressionProcessor(List<ValueSource<? extends Optional<?>>> optionalSources) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   271
      this.optionalSources = optionalSources;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   272
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   273
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   274
    protected abstract Optional<T> calculateNormal();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   275
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   276
    private Optional<T> calculateNewValue() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   277
      Set<Message> errors = new LinkedHashSet<Message>(0);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   278
      for (ValueSource<? extends Optional<?>> source : optionalSources) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   279
        if (!source.getValue().isNormal()) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   280
          errors.addAll(source.getValue().errorMessages());
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   281
        }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   282
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   283
      if (errors.isEmpty()) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   284
        return calculateNormal();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   285
      } else {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   286
        return createErrorOptional(errors);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   287
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   288
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   289
    public void update(Updater updater) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   290
      Optional<T> result = calculateNewValue();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   291
      Optional<T> oldValue = getValue();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   292
      setCurrentValue(result);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   293
      if (!result.equals(oldValue)) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   294
        updater.reportChanged(this);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   295
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   296
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   297
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   298
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   299
  /*
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   300
   * Part 3. Various utils.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   301
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   302
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   303
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   304
   * A general-purpose implementation of OK button vertex. It works as a consumer of
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   305
   * 1 result value and several warning sources. From its sources it decides whether
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   306
   * OK button should be enabled and also provides dialog messages (errors, warnings, infos).
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   307
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   308
  public static class OkButtonControl implements ValueConsumer {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   309
    private final ValueSource<? extends Optional<?>> resultSource;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   310
    private final List<? extends ValueSource<String>> warningSources;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   311
    private final DialogElements dialogElements;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   312
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   313
    public OkButtonControl(ValueSource<? extends Optional<?>> resultSource,
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   314
        List<? extends ValueSource<String>> warningSources, DialogElements dialogElements) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   315
      this.resultSource = resultSource;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   316
      this.warningSources = warningSources;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   317
      this.dialogElements = dialogElements;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   318
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   319
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   320
    /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   321
     * Returns a list of dependencies for updater -- a convenience method.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   322
     */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   323
    public List<? extends ValueSource<?>> getDependencies() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   324
      ArrayList<ValueSource<?>> result = new ArrayList<ValueSource<?>>();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   325
      result.add(resultSource);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   326
      result.addAll(warningSources);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   327
      return result;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   328
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   329
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   330
    public void update(Updater updater) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   331
      Optional<?> result = resultSource.getValue();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   332
      List<Message> messages = new ArrayList<Message>();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   333
      for (ValueSource<String> warningSource : warningSources) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   334
        if (warningSource.getValue() != null) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   335
          messages.add(new Message(warningSource.getValue(), MessagePriority.WARNING));
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   336
        }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   337
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   338
      boolean enabled;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   339
      if (result.isNormal()) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   340
        enabled = true;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   341
      } else {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   342
        enabled = false;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   343
        messages.addAll(result.errorMessages());
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   344
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   345
      dialogElements.getOkButton().setEnabled(enabled);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   346
      String errorMessage;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   347
      int type;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   348
      if (messages.isEmpty()) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   349
        errorMessage = null;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   350
        type = IMessageProvider.NONE;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   351
      } else {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   352
        Message visibleMessage = Collections.max(messages, messageComparatorBySeverity);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   353
        errorMessage = visibleMessage.getText();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   354
        type = visibleMessage.getPriority().getMessageProviderType();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   355
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   356
      dialogElements.setMessage(errorMessage, type);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   357
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   358
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   359
    private static final Comparator<Message> messageComparatorBySeverity =
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   360
        new Comparator<Message>() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   361
      public int compare(Message o1, Message o2) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   362
        int ordinal1 = o1.getPriority().ordinal();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   363
        int ordinal2 = o2.getPriority().ordinal();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   364
        if (ordinal1 < ordinal2) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   365
          return +1;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   366
        } else if (ordinal1 == ordinal2) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   367
          return 0;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   368
        } else {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   369
          return -1;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   370
        }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   371
      }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   372
    };
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   373
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   374
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   375
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   376
   * A basic interface to elements of the dialog window from dialog logic part. The user may extend
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   377
   * this interface with more elements.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   378
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   379
  public interface DialogElements {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   380
    Shell getShell();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   381
    Button getOkButton();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   382
    void setMessage(String message, int type);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   383
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   384
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   385
  /**
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   386
   * A wrapper around Combo that provides logic-level data-oriented access to the control.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   387
   * This is not a simply convenience wrapper, because Combo itself does not keep a real data,
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   388
   * but only its string representation.
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   389
   */
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   390
  public static abstract class ComboWrapper<E> {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   391
    private final Combo combo;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   392
    public ComboWrapper(Combo combo) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   393
      this.combo = combo;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   394
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   395
    public Combo getCombo() {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   396
      return combo;
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   397
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   398
    public void addSelectionListener(SelectionListener listener) {
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   399
      combo.addSelectionListener(listener);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   400
    }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   401
    public abstract E getSelected();
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   402
    public abstract void setSelected(E element);
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   403
  }
8726e95bcbba Initial commit of updated Chrome Java SDK
Eugene Ostroukhov <eugeneo@symbian.org>
parents:
diff changeset
   404
}