/*
* Copyright 2003-2010 Tufts University Licensed under the
* Educational Community License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may
* obtain a copy of the License at
*
* http://www.osedu.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS"
* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
/*
* MapMetadataModel.java
*
* Created on February 14, 2004, 2:40 PM
*/
package tufts.vue.filter;
/**
*
* @author akumar03
*/
import java.util.*;
import javax.swing.table.*;
public class MapFilterModel extends AbstractTableModel{
/** Creates a new instance of MapMetadataModel */
public interface Listener extends java.util.EventListener {
public void mapFilterModelChanged(MapFilterModelEvent e);
}
private Vector keyVector;
boolean editable;
private List listeners = new ArrayList();
public MapFilterModel(boolean editable) {
this();
this.editable = editable;
}
public MapFilterModel() {
keyVector = new Vector();
}
public synchronized void add(Key key) {
keyVector.add(key);
notifyListeners(new MapFilterModelEvent(this,key,MapFilterModelEvent.KEY_ADDED));
}
public synchronized void remove(Key key) {
int i = keyVector.indexOf(key);
keyVector.remove(keyVector.indexOf(key));
Iterator iter = tufts.vue.VUE.getActiveMap().getAllDescendents().iterator();
while(iter.hasNext())
((tufts.vue.LWComponent)iter.next()).getNodeFilter().removeStatements(key);
tufts.vue.VUE.getActiveMap().getLWCFilter().removeStatements(key);
notifyListeners(new MapFilterModelEvent(this,key,MapFilterModelEvent.KEY_DELETED));
}
public synchronized void remove(int i) {
remove(get(i));
}
/** adds the listeners if it doesn't exitst **/
public synchronized void addListener(Listener l){
if(listeners.indexOf(l) < 0)
listeners.add(l);
}
public synchronized void removeListener(Listener l) {
listeners.remove(l);
}
private synchronized void notifyListeners(MapFilterModelEvent e) {
Iterator i = listeners.iterator();
while (i.hasNext()) {
Listener l = (Listener) i.next();
try {
l.mapFilterModelChanged(e);
} catch (Exception ex) {
System.err.println(this + " notifyListeners: exception during selection change notification:"
+ "\n\tselection: " + this
+ "\n\tfailing listener: " + l);
ex.printStackTrace();
//java.awt.Toolkit.getDefaultToolkit().beep();
}
}
}
/** for Actions.java */
public ArrayList getListeners() {
return (ArrayList)listeners;
}
public void setListeners(ArrayList listeners) {
this.listeners = listeners;
}
public void addAll(MapFilterModel keys) {
keyVector.addAll(keys.getKeyVector());
}
public void removeAll(MapFilterModel keys) {
keyVector.removeAll(keys.getKeyVector());
}
public void removeAllElements() {
keyVector.removeAllElements();
}
public int size() {
return keyVector.size();
}
public Key get(int i) {
return (Key)keyVector.get(i);
}
public void setKeyVector(Vector keyVector) {
this.keyVector = keyVector;
}
public void addKey(Key key) {
this.add(key);
}
public boolean isEditable() {
return editable;
}
public String getColumnName(int col) {
if (col==0) {
return "Field";
} else {
return "Type";
}
}
public int getRowCount() {
return this.size();
}
public int getColumnCount() {
return 2;
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public Object getValueAt(int row, int col) {
Key key=(Key) this.get(row);
if (col==0)
return key.getKey().toString();
else
return key.getType().getDisplayName();
}
public void setValueAt(Object value, int row, int col) {
Key key = (Key)this.get(row);
if(col == 0)
key.setKey((String)value);
// row = -1 adds new condions else replace the existing one.
fireTableCellUpdated(row, col);
}
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
// return editable;
if(col == 0)
return true;
else
return false;
}
public Vector getKeyVector() {
return keyVector;
}
public boolean add(Object o) {
throw new RuntimeException(this + " can't add " + o.getClass() + ": " + o);
}
}