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