KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > yworks > yguard > obf > Pk


1 /**
2  * YGuard -- an obfuscation library for Java(TM) classfiles.
3  *
4  * Original Copyright (c) 1999 Mark Welsh (markw@retrologic.com)
5  * Modifications Copyright (c) 2002 yWorks GmbH (yguard@yworks.com)
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library 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 GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  * The author may be contacted at yguard@yworks.com
22  *
23  * Java and all Java-based marks are trademarks or registered
24  * trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
25  */

26 package com.yworks.yguard.obf;
27
28 import java.io.*;
29 import java.lang.reflect.*;
30 import java.util.*;
31 import com.yworks.yguard.obf.classfile.*;
32
33 /**
34  * Tree item representing a package.
35  *
36  * @author Mark Welsh
37  */

38 public class Pk extends PkCl
39 {
40     // Constants -------------------------------------------------------------
41

42
43     // Fields ----------------------------------------------------------------
44
private Hashtable pks = new Hashtable(); // Owns a list of sub-package levels
45

46
47     // Class Methods ---------------------------------------------------------
48
/** Create the root entry for a tree. */
49     public static Pk createRoot(ClassTree classTree) {return new Pk(classTree);}
50
51
52     // Instance Methods ------------------------------------------------------
53
/** Constructor for default package level. */
54     public Pk(ClassTree classTree)
55     {
56         this(null, "");
57         this.classTree = classTree;
58     }
59
60     /** Constructor for regular package levels. */
61     public Pk(TreeItem parent, String JavaDoc name)
62     {
63         super(parent, name);
64         if (parent == null && !name.equals(""))
65         {
66           throw new IllegalArgumentException JavaDoc("Internal error: only the default package has no parent");
67         }
68         else if (parent != null && name.equals(""))
69         {
70           throw new IllegalArgumentException JavaDoc("Internal error: the default package cannot have a parent");
71         }
72     }
73
74     /** Get a package level by name. */
75     public Pk getPackage(String JavaDoc name) {return (Pk)pks.get(name);}
76
77     /** Get an Enumeration of packages. */
78     public Enumeration getPackageEnum() {return pks.elements();}
79
80     /** Return number of packages. */
81     public int getPackageCount() {return pks.size();}
82
83     /** Add a sub-package level. */
84     public Pk addPackage(String JavaDoc name)
85     {
86         Pk pk = getPackage(name);
87         if (pk == null)
88         {
89             pk = new Pk(this, name);
90             pks.put(name, pk);
91         }
92         return pk;
93     }
94
95     /** Add a class. */
96     public Cl addClass(String JavaDoc name, String JavaDoc superName, String JavaDoc[] interfaceNames, int modifiers)
97     {
98         return addClass(false, name, superName, interfaceNames, modifiers);
99     }
100
101     /** Add a placeholder class. */
102     public Cl addPlaceholderClass(String JavaDoc name)
103     {
104         return addPlaceholderClass(false, name);
105     }
106
107     /** Generate unique obfuscated names for this namespace. */
108     public void generateNames()
109     {
110         super.generateNames();
111         generateNames(pks);
112     }
113 }
114
115
Popular Tags