1 11 package org.eclipse.jface.internal.databinding.internal.swt; 12 13 import org.eclipse.core.databinding.BindingException; 14 import org.eclipse.core.databinding.observable.Diffs; 15 import org.eclipse.core.databinding.observable.ObservableTracker; 16 import org.eclipse.core.databinding.observable.Realm; 17 import org.eclipse.core.databinding.observable.list.AbstractObservableList; 18 19 26 public abstract class SWTObservableList extends AbstractObservableList { 27 28 31 public SWTObservableList() { 32 super(); 33 } 34 35 38 public SWTObservableList(Realm realm) { 39 super(realm); 40 } 41 42 public void add(int index, Object element) { 43 int size = doGetSize(); 44 if (index < 0 || index > size) 45 index = size; 46 String [] newItems = new String [size + 1]; 47 System.arraycopy(getItems(), 0, newItems, 0, index); 48 newItems[index] = (String ) element; 49 System.arraycopy(getItems(), index, newItems, index + 1, size - index); 50 setItems(newItems); 51 fireListChange(Diffs.createListDiff(Diffs.createListDiffEntry(index, 52 true, element))); 53 } 54 55 public int doGetSize() { 56 return getItemCount(); 57 } 58 59 public Object get(int index) { 60 getterCalled(); 61 return getItem(index); 62 } 63 64 public Object getElementType() { 65 return String .class; 66 } 67 68 72 protected abstract String getItem(int index); 73 74 77 protected abstract int getItemCount(); 78 79 82 protected abstract String [] getItems(); 83 84 private void getterCalled() { 85 ObservableTracker.getterCalled(this); 86 } 87 88 public Object remove(int index) { 89 getterCalled(); 90 int size = doGetSize(); 91 if (index < 0 || index > size - 1) 92 throw new BindingException( 93 "Request to remove an element out of the collection bounds"); 95 String [] newItems = new String [size - 1]; 96 String oldElement = getItem(index); 97 if (newItems.length > 0) { 98 System.arraycopy(getItems(), 0, newItems, 0, index); 99 if (size - 1 > index) { 100 System.arraycopy(getItems(), index + 1, newItems, index, size 101 - index - 1); 102 } 103 } 104 setItems(newItems); 105 fireListChange(Diffs.createListDiff(Diffs.createListDiffEntry(index, 106 false, oldElement))); 107 return oldElement; 108 } 109 110 public Object set(int index, Object element) { 111 String oldElement = getItem(index); 112 setItem(index, (String ) element); 113 fireListChange(Diffs.createListDiff(Diffs.createListDiffEntry(index, 114 false, oldElement), Diffs.createListDiffEntry(index, true, 115 element))); 116 return oldElement; 117 } 118 119 123 protected abstract void setItem(int index, String string); 124 125 128 protected abstract void setItems(String [] newItems); 129 130 } 131 | Popular Tags |