KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > armedbear > lisp > Packages


1 /*
2  * Packages.java
3  *
4  * Copyright (C) 2002-2003 Peter Graves
5  * $Id: Packages.java,v 1.12 2003/12/13 00:28:08 piso Exp $
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */

21
22 package org.armedbear.lisp;
23
24 import java.util.ArrayList JavaDoc;
25 import java.util.HashMap JavaDoc;
26 import java.util.Iterator JavaDoc;
27 import java.util.List JavaDoc;
28
29 public final class Packages extends Lisp
30 {
31     private static final ArrayList JavaDoc packages = new ArrayList JavaDoc();
32     private static final HashMap JavaDoc map = new HashMap JavaDoc();
33
34     public static final synchronized Package JavaDoc createPackage(String JavaDoc name)
35     {
36         return createPackage(name, 0);
37     }
38
39     public static final synchronized Package JavaDoc createPackage(String JavaDoc name, int size)
40     {
41         Package JavaDoc pkg = (Package JavaDoc) map.get(name);
42         if (pkg == null) {
43             pkg = size != 0 ? new Package JavaDoc(name, size) : new Package JavaDoc(name);
44             packages.add(pkg);
45             map.put(name, pkg);
46         } else
47             Debug.trace("package " + name + " already exists");
48         return pkg;
49     }
50
51     public static final synchronized void addPackage(Package JavaDoc pkg)
52         throws ConditionThrowable
53     {
54         final String JavaDoc name = pkg.getName();
55         if (map.get(name) != null) {
56             signal(new LispError("a package named " + name + " already exists"));
57             return;
58         }
59         packages.add(pkg);
60         map.put(name, pkg);
61         List JavaDoc nicknames = pkg.getNicknames();
62         if (nicknames != null) {
63             for (Iterator JavaDoc it = nicknames.iterator(); it.hasNext();) {
64                 String JavaDoc nickname = (String JavaDoc) it.next();
65                 addNickname(pkg, nickname);
66             }
67         }
68     }
69
70     // Returns null if package doesn't exist.
71
public static final synchronized Package JavaDoc findPackage(String JavaDoc name)
72     {
73         return (Package JavaDoc) map.get(name);
74     }
75
76     public static final synchronized Package JavaDoc makePackage(String JavaDoc name)
77         throws ConditionThrowable
78     {
79         if (map.get(name) != null) {
80             signal(new LispError("a package named " + name + " already exists"));
81             // Not reached.
82
return null;
83         }
84         Package JavaDoc pkg = new Package JavaDoc(name);
85         packages.add(pkg);
86         map.put(name, pkg);
87         return pkg;
88     }
89
90     public static final synchronized void addNickname(Package JavaDoc pkg,
91                                                       String JavaDoc nickname)
92         throws ConditionThrowable
93     {
94         if (map.get(nickname) != null) {
95             signal(new PackageError("a package named " + nickname + " already exists"));
96             return;
97         }
98         map.put(nickname, pkg);
99     }
100
101     // Removes name and nicknames from map, removes pkg from packages.
102
public static final synchronized boolean deletePackage(Package JavaDoc pkg)
103     {
104         String JavaDoc name = pkg.getName();
105         if (name != null) {
106             map.remove(name);
107             List JavaDoc nicknames = pkg.getNicknames();
108             if (nicknames != null) {
109                 for (Iterator JavaDoc it = nicknames.iterator(); it.hasNext();) {
110                     String JavaDoc nickname = (String JavaDoc) it.next();
111                     map.remove(nickname);
112                 }
113             }
114             packages.remove(pkg);
115             return true;
116         }
117         return false;
118     }
119
120     public static final synchronized LispObject listAllPackages()
121     {
122         LispObject result = NIL;
123         for (Iterator JavaDoc it = packages.iterator(); it.hasNext();) {
124             Package JavaDoc pkg = (Package JavaDoc) it.next();
125             result = new Cons(pkg, result);
126         }
127         return result;
128     }
129
130     public static final synchronized Package JavaDoc[] getAllPackages()
131     {
132         Package JavaDoc[] array = new Package JavaDoc[packages.size()];
133         packages.toArray(array);
134         return array;
135     }
136 }
137
Popular Tags