KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > editor > structure > DocumentModelProviderFactory


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
20 package org.netbeans.modules.editor.structure;
21 import java.util.Collection JavaDoc;
22 import java.util.Map JavaDoc;
23 import java.util.WeakHashMap JavaDoc;
24 import org.netbeans.api.editor.mimelookup.MimeLookup;
25 import org.netbeans.modules.editor.structure.spi.DocumentModelProvider;
26 import org.openide.ErrorManager;
27 import org.openide.util.Lookup;
28
29 /**
30  * Document model factory that obtains the DocumentModel instancies
31  * by reading the xml layer.
32  * <br>
33  * The registration are read from the following folder in the system FS:
34  * <pre>
35  * Editors/&lt;mime-type&gt;/DocumentModel
36  * </pre>
37  *
38  * @author Marek Fukala
39  */

40 public class DocumentModelProviderFactory {
41     
42     static final String JavaDoc FOLDER_NAME = "DocumentModel"; //NOI18N
43

44     private Map JavaDoc<String JavaDoc, DocumentModelProvider> mime2provider;
45     
46     private static DocumentModelProviderFactory defaultProvider = null;
47     
48     public static DocumentModelProviderFactory getDefault() {
49         if(defaultProvider == null) {
50             defaultProvider = new DocumentModelProviderFactory();
51         }
52         return defaultProvider;
53     }
54     
55     private DocumentModelProviderFactory() {
56         mime2provider = new WeakHashMap JavaDoc<String JavaDoc, DocumentModelProvider>();
57     }
58     
59     /* returns a DocumentModelFactory according to the layer */
60     public DocumentModelProvider getDocumentModelProvider(String JavaDoc mimeType) {
61         DocumentModelProvider provider = null; // result
62
if(mimeType != null) {
63             provider = mime2provider.get(mimeType);
64             if (provider == null) { // not cached yet
65
MimeLookup mimeLookup = MimeLookup.getMimeLookup(mimeType);
66                 Collection JavaDoc<? extends DocumentModelProvider> providers =
67                         mimeLookup.lookup(new Lookup.Template<DocumentModelProvider>(DocumentModelProvider.class)).allInstances();
68                 if(providers.size() > 1)
69                     ErrorManager.getDefault().log(ErrorManager.INFORMATIONAL, "Only one DocumentModelProvider can be registered for one mimetype!");
70                 
71                 if(providers.size() == 0)
72                     ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, new IllegalStateException JavaDoc("There isn't any DocumentModelProvider registered for " + mimeType + " mimetype!"));
73                 
74                 provider = providers.size() > 0 ? (DocumentModelProvider)providers.iterator().next() : null;
75                 mime2provider.put(mimeType, provider);
76                 
77             } else return provider;
78         } else
79             ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, new NullPointerException JavaDoc("mimeType cannot be null!"));
80         
81         return provider;
82     }
83     
84     
85 }
86
Popular Tags