| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.netbeans.modules.xml.axi; |
| |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| import java.net.URI; |
| import java.util.HashMap; |
| import java.util.Map; |
| import javax.swing.text.Document; |
| import org.netbeans.editor.BaseDocument; |
| import org.netbeans.editor.BaseKit; |
| import org.netbeans.modules.xml.retriever.catalog.impl.CatalogFileWrapperDOMImpl; |
| import org.netbeans.modules.xml.retriever.catalog.impl.CatalogWriteModelImpl; |
| import org.netbeans.modules.xml.schema.model.SchemaModel; |
| import org.netbeans.modules.xml.schema.model.SchemaModelFactory; |
| import org.netbeans.modules.xml.xam.locator.CatalogModelException; |
| import org.netbeans.modules.xml.xam.ModelSource; |
| import org.netbeans.modules.xml.xam.locator.CatalogModel; |
| import org.openide.filesystems.FileObject; |
| import org.openide.filesystems.FileUtil; |
| import org.openide.loaders.DataObject; |
| import org.openide.loaders.DataObjectNotFoundException; |
| import org.openide.util.Lookup; |
| import org.openide.util.lookup.Lookups; |
| |
| /** |
| * |
| * @author girix |
| */ |
| |
| public class TestCatalogModel extends CatalogWriteModelImpl { |
| |
| private TestCatalogModel(File file) throws IOException { |
| super(file); |
| } |
| |
| static TestCatalogModel singletonCatMod = null; |
| public static TestCatalogModel getDefault(){ |
| if (singletonCatMod == null){ |
| CatalogFileWrapperDOMImpl.TEST_ENVIRONMENT = true; |
| try { |
| singletonCatMod = new TestCatalogModel(new File(System.getProperty("java.io.tmpdir"))); |
| FileObject catalogFO = singletonCatMod.getCatalogFileObject(); |
| File catFile = FileUtil.toFile(catalogFO); |
| catFile.deleteOnExit(); |
| //initCatalogFile(); |
| } catch (Exception ex) { |
| ex.printStackTrace(); |
| return null; |
| } |
| } |
| return singletonCatMod; |
| } |
| |
| |
| /** |
| * This method could be overridden by the Unit testcase to return a special |
| * ModelSource object for a FileObject with custom impl of classes added to the lookup. |
| * This is optional if both getDocument(FO) and createCatalogModel(FO) are overridden. |
| */ |
| protected ModelSource createModelSource(final FileObject thisFileObj, boolean editable) throws CatalogModelException{ |
| assert thisFileObj != null : "Null file object."; |
| final CatalogModel catalogModel = createCatalogModel(thisFileObj); |
| final DataObject dobj; |
| try { |
| dobj = DataObject.find(thisFileObj); |
| } catch (DataObjectNotFoundException ex) { |
| throw new CatalogModelException(ex); |
| } |
| Lookup proxyLookup = Lookups.proxy( |
| new Lookup.Provider() { |
| public Lookup getLookup() { |
| return Lookups.fixed(new Object[] { |
| FileUtil.toFile(thisFileObj), |
| thisFileObj, |
| getDocument(dobj.getPrimaryFile()), |
| dobj, |
| catalogModel |
| }); |
| } |
| } |
| ); |
| return new ModelSource(proxyLookup, editable); |
| } |
| |
| private Document getDocument(FileObject fo){ |
| Document result = null; |
| if (documentPooling) { |
| result = documentPool().get(fo); |
| } |
| if (result != null) return result; |
| try { |
| |
| File file = FileUtil.toFile(fo); |
| FileInputStream fis = new FileInputStream(file); |
| byte buffer[] = new byte[fis.available()]; |
| result = new BaseDocument(true, "text/xml"); //NOI18N |
| result.remove(0, result.getLength()); |
| fis.read(buffer); |
| fis.close(); |
| String str = new String(buffer); |
| result.insertString(0,str,null); |
| |
| } catch (Exception dObjEx) { |
| return null; |
| } |
| if (documentPooling) { |
| documentPool().put(fo, result); |
| } |
| return result; |
| } |
| |
| protected CatalogModel createCatalogModel(FileObject fo) throws CatalogModelException{ |
| return getDefault(); |
| } |
| |
| public ModelSource createTestModelSource(FileObject fo, boolean editable) throws CatalogModelException{ |
| final DataObject dobj; |
| final CatalogModel catalogModel = createCatalogModel(fo); |
| try { |
| dobj = DataObject.find(fo); |
| } catch (DataObjectNotFoundException ex) { |
| throw new CatalogModelException(ex); |
| } |
| Lookup lookup = Lookups.proxy(new Lookup.Provider() { |
| public Lookup getLookup() { |
| return Lookups.fixed(new Object[] { |
| dobj.getPrimaryFile(), |
| getDocument(dobj.getPrimaryFile()), |
| dobj, |
| catalogModel |
| }); |
| } |
| } ); |
| return new ModelSource(lookup, editable); |
| } |
| |
| // public void addNamespace(NamespaceLocation nl) throws Exception { |
| // this.addURI(nl.getLocationURI(), nl.getResourceURI()); |
| // } |
| // |
| |
| public SchemaModel getSchemaModel(URI lcationURI) throws Exception { |
| SchemaModel model = SchemaModelFactory.getDefault().getModel( |
| singletonCatMod.getModelSource(lcationURI)); |
| if (! documentPooling) { |
| model.sync(); // resync to restored to origin content |
| } |
| return model; |
| } |
| |
| private Map<FileObject,Document> fileToDocumentMap; |
| private Map<FileObject,Document> documentPool() { |
| if (fileToDocumentMap == null) { |
| fileToDocumentMap = new HashMap<FileObject,Document>(); |
| } |
| return fileToDocumentMap; |
| } |
| private boolean documentPooling = true; |
| |
| public void setDocumentPooling(boolean v) { |
| documentPooling = v; |
| if (! documentPooling) { |
| clearDocumentPool(); |
| } |
| } |
| |
| public void clearDocumentPool() { |
| fileToDocumentMap = null; |
| } |
| |
| public String toString(){ |
| return "TestCatalogModel"+super.toString(); |
| } |
| |
| public AXIModel getAXIModel(FileObject thisFileObj) throws CatalogModelException, IOException { |
| ModelSource source = createModelSource(thisFileObj, true); |
| SchemaModel model = SchemaModelFactory.getDefault().getModel(source); |
| return AXIModelFactory.getDefault().getModel(model); |
| } |
| } |
| |