KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > wsdl > model > TestCatalogModel


1 package org.netbeans.modules.xml.wsdl.model;
2 /*
3  * TestCatalogModel.java
4  *
5  * Created on April 2, 2006, 10:41 AM
6  *
7  * To change this template, choose Tools | Template Manager
8  * and open the template in the editor.
9  */

10
11 import java.io.File JavaDoc;
12 import java.io.FileInputStream JavaDoc;
13 import java.io.IOException JavaDoc;
14 import java.net.URI JavaDoc;
15 import java.util.HashMap JavaDoc;
16 import java.util.Map JavaDoc;
17 import java.util.logging.Logger JavaDoc;
18 import javax.swing.text.Document JavaDoc;
19 import org.netbeans.modules.xml.retriever.catalog.impl.CatalogFileWrapperDOMImpl;
20 import org.netbeans.modules.xml.retriever.catalog.impl.CatalogWriteModelImpl;
21 import org.netbeans.modules.xml.schema.model.SchemaModel;
22 import org.netbeans.modules.xml.schema.model.SchemaModelFactory;
23 import org.netbeans.modules.xml.xam.locator.CatalogModel;
24 import org.netbeans.modules.xml.xam.locator.CatalogModelException;
25 import org.netbeans.modules.xml.xam.ModelSource;
26 import org.openide.filesystems.FileObject;
27 import org.openide.filesystems.FileUtil;
28 import org.openide.loaders.DataObject;
29 import org.openide.loaders.DataObjectNotFoundException;
30 import org.openide.util.Lookup;
31 import org.openide.util.lookup.Lookups;
32
33 /**
34  *
35  * @author girix
36  */

37
38 public class TestCatalogModel extends CatalogWriteModelImpl{
39     private TestCatalogModel(File JavaDoc file) throws IOException JavaDoc{
40         super(file);
41     }
42     
43     static TestCatalogModel singletonCatMod = null;
44     public static TestCatalogModel getDefault(){
45         if (singletonCatMod == null){
46             CatalogFileWrapperDOMImpl.TEST_ENVIRONMENT = true;
47             try {
48                 singletonCatMod = new TestCatalogModel(new File JavaDoc(System.getProperty("java.io.tmpdir")));
49                 FileObject catalogFO = singletonCatMod.getCatalogFileObject();
50                 File JavaDoc catFile = FileUtil.toFile(catalogFO);
51                 catFile.deleteOnExit();
52                 initCatalogFile();
53             } catch (Exception JavaDoc ex) {
54                 ex.printStackTrace();
55                 return null;
56             }
57         }
58         return singletonCatMod;
59     }
60     
61     
62     
63     /**
64      * This method could be overridden by the Unit testcase to return a special
65      * ModelSource object for a FileObject with custom impl of classes added to the lookup.
66      * This is optional if both getDocument(FO) and createCatalogModel(FO) are overridden.
67      */

68     protected ModelSource createModelSource(final FileObject thisFileObj, boolean editable) throws CatalogModelException{
69         assert thisFileObj != null : "Null file object.";
70         final CatalogModel catalogModel = createCatalogModel(thisFileObj);
71         final DataObject dobj;
72         try {
73             dobj = DataObject.find(thisFileObj);
74         } catch (DataObjectNotFoundException ex) {
75             throw new CatalogModelException(ex);
76         }
77         Lookup proxyLookup = Lookups.proxy(
78                 new Lookup.Provider() {
79             public Lookup getLookup() {
80                 Document JavaDoc document = null;
81                 Logger JavaDoc l = Logger.getLogger(getClass().getName());
82                 document = getDocument(thisFileObj);
83                 return Lookups.fixed(new Object JavaDoc[] {
84                     thisFileObj,
85                     document,
86                     dobj,
87                     catalogModel
88                 });
89             }
90         }
91         );
92         return new ModelSource(proxyLookup, editable);
93     }
94     
95     private Document JavaDoc getDocument(FileObject fo){
96         Document JavaDoc result = null;
97         if (documentPooling) {
98             result = documentPool().get(fo);
99         }
100         if (result != null) return result;
101         try {
102             
103             File JavaDoc file = FileUtil.toFile(fo);
104             FileInputStream JavaDoc fis = new FileInputStream JavaDoc(file);
105             byte buffer[] = new byte[fis.available()];
106             result = new org.netbeans.editor.BaseDocument(
107                     org.netbeans.modules.xml.text.syntax.XMLKit.class, false);
108             result.remove(0, result.getLength());
109             fis.read(buffer);
110             fis.close();
111             String JavaDoc str = new String JavaDoc(buffer);
112             result.insertString(0,str,null);
113             
114         } catch (Exception JavaDoc dObjEx) {
115             return null;
116         }
117         if (documentPooling) {
118             documentPool().put(fo, result);
119         }
120         return result;
121     }
122     
123     protected CatalogModel createCatalogModel(FileObject fo) throws CatalogModelException{
124         return getDefault();
125     }
126     
127     public ModelSource createTestModelSource(FileObject fo, boolean editable) throws CatalogModelException{
128         final DataObject dobj;
129         final CatalogModel catalogModel = createCatalogModel(fo);
130         try {
131             dobj = DataObject.find(fo);
132         } catch (DataObjectNotFoundException ex) {
133             throw new CatalogModelException(ex);
134         }
135         Lookup lookup = Lookups.proxy(new Lookup.Provider() {
136             public Lookup getLookup() {
137                         return Lookups.fixed(new Object JavaDoc[] {
138                             dobj.getPrimaryFile(),
139                             getDocument(dobj.getPrimaryFile()),
140                             dobj,
141                             catalogModel
142                         });
143
144             }
145         } );
146         return new ModelSource(lookup, editable);
147     }
148     
149     public void addNamespace(NamespaceLocation nl) throws Exception JavaDoc {
150         this.addURI(nl.getLocationURI(), nl.getResourceURI());
151     }
152     
153     public SchemaModel getSchemaModel(NamespaceLocation nl) throws Exception JavaDoc {
154         return getSchemaModel(nl.getLocationURI());
155     }
156     
157     public SchemaModel getSchemaModel(URI JavaDoc lcationURI) throws Exception JavaDoc {
158         SchemaModel model = SchemaModelFactory.getDefault().getModel(
159                 singletonCatMod.getModelSource(lcationURI));
160         return model;
161     }
162     
163     private Map JavaDoc<FileObject,Document JavaDoc> fileToDocumentMap;
164     private Map JavaDoc<FileObject,Document JavaDoc> documentPool() {
165         if (fileToDocumentMap == null) {
166             fileToDocumentMap = new HashMap JavaDoc<FileObject,Document JavaDoc>();
167         }
168         return fileToDocumentMap;
169     }
170     private boolean documentPooling = true;
171     
172     public void setDocumentPooling(boolean v) {
173         documentPooling = v;
174         if (! documentPooling) {
175             clearDocumentPool();
176         }
177     }
178
179     public void clearDocumentPool() {
180         fileToDocumentMap = null;
181     }
182     
183     private static void initCatalogFile() throws Exception JavaDoc {
184         TestCatalogModel instance = singletonCatMod;
185         for (NamespaceLocation nl:NamespaceLocation.values()) {
186             instance.addNamespace(nl);
187         }
188     }
189     
190     public WSDLModel getWSDLModel(URI JavaDoc locationURI) throws Exception JavaDoc {
191         ModelSource source = getDefault().getModelSource(locationURI);
192         WSDLModel model = WSDLModelFactory.getDefault().getModel(source);
193         return model;
194     }
195     
196     public WSDLModel getWSDLModel(NamespaceLocation nl) throws Exception JavaDoc {
197         nl.refreshResourceFile();
198         return getWSDLModel(nl.getLocationURI());
199     }
200     
201     public String JavaDoc toString(){
202         return "TestCatalogModel"+super.toString();
203     }
204 }
205
206
Popular Tags