// ********************************************************************** // // <copyright> // // BBN Technologies // 10 Moulton Street // Cambridge, MA 02138 // (617) 873-8000 // // Copyright (C) BBNT Solutions LLC. All rights reserved. // // </copyright> // ********************************************************************** // // $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/graphicLoader/netmap/LineCache.java,v $ // $RCSfile: LineCache.java,v $ // $Revision: 1.4 $ // $Date: 2004/10/14 18:05:46 $ // $Author: dietrick $ // // ********************************************************************** package com.bbn.openmap.graphicLoader.netmap; import java.util.Enumeration; import java.util.Hashtable; /** * The holder for Lines on the map. This cache is smart enough to * add/delete/modify Lines as needed based on line labels and nodes. */ public class LineCache { private Hashtable lineTable = null; public LineCache() { this.lineTable = new Hashtable(); } public LineCache(int initialCapacity) { this.lineTable = new Hashtable(initialCapacity); } public void flush() { for (Enumeration list = elements(); list.hasMoreElements();) delete((Line) list.nextElement()); } public Enumeration elements() { return lineTable.elements(); } public Line add(String label, int index, int shape, int color, Node node1, Node node2) { del(index); Line line = new Line(label, index, shape, color, node1, node2); lineTable.put(label, (Object) line); return line; } public void move(Node atNode) { Line[] lines = get(atNode); if (lines == null) return; for (int i = 0; i < lines.length; i++) lines[i].setPos(atNode); } public void move(Node atNode1, Node atNode2) { move(atNode1); move(atNode2); } public Line[] get(Node atNode) { int count = 0; Line[] lines = null; Enumeration list = lineTable.elements(); if (list == null) return null; while (list.hasMoreElements()) { Line line = (Line) list.nextElement(); if ((line.getNode1() == atNode) || (line.getNode2() == atNode)) { if (lines == null) lines = new Line[1]; else { Line[] newLines = new Line[lines.length + 1]; System.arraycopy(lines, 0, newLines, 0, lines.length); lines = newLines; } lines[count++] = line; } } return lines; } public Line get(Node atNode1, Node atNode2) { Enumeration list = lineTable.elements(); if (list == null) return null; while (list.hasMoreElements()) { Line line = (Line) list.nextElement(); if (((line.getNode1() == atNode1) || (line.getNode2() == atNode1)) && ((line.getNode1() == atNode2) || (line.getNode2() == atNode2))) { return line; } } return null; } public Line get(String label) { return ((Line) lineTable.get(label)); } public Line get(int index) { Enumeration list = lineTable.elements(); if (list == null) return null; while (list.hasMoreElements()) { Line line = (Line) list.nextElement(); if (line.getIndex() == index) return line; } return null; } public void del(Node atNode) { Line[] lines = get(atNode); if (lines == null) return; for (int i = 0; i < lines.length; i++) delete(lines[i]); } public void del(Line[] lines) { for (int i = 0; i < lines.length; i++) delete(lines[i]); } public void del(Node atNode1, Node atNode2) { delete(get(atNode1, atNode2)); } public void del(int index) { delete(get(index)); } public void del(String label) { delete(get(label)); } private void delete(Line line) { if (line == null) return; lineTable.remove(line.getLabel()); } }