KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > javacore > jmiimpl > javamodel > ArrayClassImpl


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.modules.javacore.jmiimpl.javamodel;
20
21 import java.util.Collection JavaDoc;
22 import java.util.Collections JavaDoc;
23 import javax.jmi.reflect.ConstraintViolationException;
24 import org.netbeans.jmi.javamodel.*;
25 import org.netbeans.mdr.handlers.ClassProxyHandler;
26 import org.netbeans.mdr.persistence.MOFID;
27 import org.netbeans.mdr.persistence.StorageException;
28 import org.netbeans.mdr.storagemodel.StorableBaseObject;
29 import org.netbeans.mdr.storagemodel.StorableClass;
30 import org.netbeans.mdr.util.DebugException;
31
32 /**
33  *
34  * @author Martin Matula
35  */

36 public abstract class ArrayClassImpl extends ClassProxyHandler implements ArrayClass {
37     private static final String JavaDoc MOFID_PREFIX = "array:"; // NOI18N
38
private static final InstanceMap allInstances = new InstanceMap();
39     
40     public ArrayClassImpl(StorableClass s) {
41         super(s);
42     }
43     
44     public Array createArray() {
45         throw new ConstraintViolationException(this, refMetaObject(), "Cannot create instance of Array directly - use resolveArray instead."); // NOI18N
46
}
47     
48     public Array createArray(String JavaDoc name, java.util.List JavaDoc contents, org.netbeans.jmi.javamodel.MultipartId superClassName, java.util.List JavaDoc interfaceNames) {
49         throw new ConstraintViolationException(this, refMetaObject(), "Cannot create instance of Array directly - use resolveArray instead."); // NOI18N
50
}
51     
52     public Array resolveArray(Type type) {
53         if (type == null) return null;
54         _lock(false);
55         try {
56             ArrayImpl result = (ArrayImpl) allInstances.get(type);
57             if (result == null) {
58                 try {
59                     // [TODO] better unify immediate package and class proxy
60
StorableBaseObject s = _getDelegate();
61                     MOFID mofId = new MOFID(type.hashCode(), MOFID_PREFIX + type.refMofId());
62                     DeferredObject o = new DeferredObject(mofId, s.getMdrStorage(), s.getImmediatePackageId(), s.getOutermostPackageId(), s.getMetaObject(), (StorableClass) s, null);
63                     result = (ArrayImpl) _getRepository().getHandler(o);
64                     result.type = type;
65                     allInstances.put(type, result);
66                 } catch (StorageException e) {
67                     throw new DebugException();
68                 }
69             }
70             return result;
71         } finally {
72             _unlock();
73         }
74     }
75     
76     public org.netbeans.jmi.javamodel.Type resolve(java.lang.String JavaDoc name) {
77         JavaModelPackage pkg = (JavaModelPackage) refImmediatePackage();
78         return pkg.getType().resolve(name);
79     }
80
81     protected Collection JavaDoc _allOfClass(boolean recursive) {
82         return Collections.unmodifiableCollection(allInstances.values());
83     }
84 }
85
Popular Tags