javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 18 Feb 2013 13:03:01 +0100
branchmodel
changeset 761 ade90921ede5
child 887 13dc5ada296b
permissions -rw-r--r--
Changes in String array are properly notified
     1 /**
     2  * Back 2 Browser Bytecode Translator
     3  * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4  *
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, version 2 of the License.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License
    15  * along with this program. Look for COPYING file in the top folder.
    16  * If not, see http://opensource.org/licenses/GPL-2.0.
    17  */
    18 package org.apidesign.bck2brwsr.htmlpage;
    19 
    20 import java.util.ArrayList;
    21 import java.util.Collection;
    22 
    23 /**
    24  *
    25  * @author Jaroslav Tulach <jtulach@netbeans.org>
    26  */
    27 public final class KOList<T> extends ArrayList<T> {
    28     private final String name;
    29     private final String[] deps;
    30     private Knockout model;
    31 
    32     public KOList(String name, String... deps) {
    33         this.name = name;
    34         this.deps = deps;
    35     }
    36     
    37     public void assign(Knockout model) {
    38         this.model = model;
    39     }
    40 
    41     @Override
    42     public boolean add(T e) {
    43         boolean ret = super.add(e);
    44         notifyChange();
    45         return ret;
    46     }
    47 
    48     @Override
    49     public boolean remove(Object o) {
    50         boolean ret = super.remove(o);
    51         notifyChange();
    52         return ret;
    53     }
    54 
    55     @Override
    56     public void clear() {
    57         super.clear();
    58         notifyChange();
    59     }
    60 
    61     @Override
    62     public boolean removeAll(Collection<?> c) {
    63         boolean ret = super.removeAll(c);
    64         notifyChange();
    65         return ret;
    66     }
    67 
    68     @Override
    69     public boolean retainAll(Collection<?> c) {
    70         boolean ret = super.retainAll(c);
    71         notifyChange();
    72         return ret;
    73     }
    74 
    75     @Override
    76     public T set(int index, T element) {
    77         T ret = super.set(index, element);
    78         notifyChange();
    79         return ret;
    80     }
    81 
    82     @Override
    83     public void add(int index, T element) {
    84         super.add(index, element);
    85         notifyChange();
    86     }
    87 
    88     @Override
    89     public T remove(int index) {
    90         T ret = super.remove(index);
    91         notifyChange();
    92         return ret;
    93     }
    94 
    95     private void notifyChange() {
    96         Knockout m = model;
    97         if (m == null) {
    98             return;
    99         }
   100         m.valueHasMutated(name);
   101         for (String dependant : deps) {
   102             m.valueHasMutated(dependant);
   103         }
   104     }
   105     
   106     
   107 }