KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > lexer > gen > GenerateLanguageSource


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-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.lexer.gen;
21
22 import java.io.File JavaDoc;
23 import java.io.FileWriter JavaDoc;
24 import java.io.IOException JavaDoc;
25
26 import org.apache.tools.ant.BuildException;
27 import org.apache.tools.ant.Task;
28 import org.xml.sax.SAXException JavaDoc;
29
30 /**
31  * Abstract class for supporting a language source generation.
32  *
33  * @author Miloslav Metelka
34  */

35 public abstract class GenerateLanguageSource extends Task {
36
37     private String JavaDoc languageClassName;
38
39     private String JavaDoc lexerClassName;
40
41     private String JavaDoc tokenTypesClassName;
42
43     private File JavaDoc languageDescriptionFile;
44     
45     private File JavaDoc languageSourceFile;
46     
47     private boolean ignoreTokenTypes;
48     
49     private boolean ignoreLanguageDescriptionFile;
50     
51     public GenerateLanguageSource() {
52     }
53
54     public String JavaDoc getLanguageClassName() {
55         return languageClassName;
56     }
57     
58     public void setLanguageClassName(String JavaDoc languageClassName) {
59         this.languageClassName = languageClassName;
60     }
61     
62     public String JavaDoc getLexerClassName() {
63         return lexerClassName;
64     }
65     
66     public void setLexerClassName(String JavaDoc lexerClassName) {
67         this.lexerClassName = lexerClassName;
68     }
69     
70     public String JavaDoc getTokenTypesClassName() {
71         return tokenTypesClassName;
72     }
73     
74     public void setTokenTypesClassName(String JavaDoc tokenTypesClassName) {
75         this.tokenTypesClassName = tokenTypesClassName;
76     }
77     
78     public File JavaDoc getLanguageDescriptionFile() {
79         return languageDescriptionFile;
80     }
81     
82     public void setLanguageDescriptionFile(File JavaDoc languageDescriptionFile) {
83         this.languageDescriptionFile = languageDescriptionFile;
84     }
85
86     public File JavaDoc getLanguageSourceFile() {
87         return languageSourceFile;
88     }
89     
90     public void setLanguageSourceFile(File JavaDoc languageSourceFile) {
91         this.languageSourceFile = languageSourceFile;
92     }
93     
94     public boolean getIgnoreTokenTypes() {
95         return ignoreTokenTypes;
96     }
97     
98     public void setIgnoreTokenTypes(boolean ignoreTokenTypes) {
99         this.ignoreTokenTypes = ignoreTokenTypes;
100     }
101     
102     public boolean getIgnoreLanguageDescriptionFile() {
103         return ignoreLanguageDescriptionFile;
104     }
105     
106     public void setIgnoreLanguageDescriptionFile(boolean ignoreLanguageDescriptionFile) {
107         this.ignoreLanguageDescriptionFile = ignoreLanguageDescriptionFile;
108     }
109
110     public void execute() throws BuildException {
111         String JavaDoc langClassName = getLanguageClassName();
112         String JavaDoc lexerClassName = getLexerClassName();
113         String JavaDoc tokenTypesClassName = getTokenTypesClassName();
114         File JavaDoc langDescFile = getLanguageDescriptionFile();
115         File JavaDoc langSrcFile = getLanguageSourceFile();
116         
117         if (getIgnoreTokenTypes()) {
118             tokenTypesClassName = null;
119         }
120         if (getIgnoreLanguageDescriptionFile()) {
121             langDescFile = null;
122         }
123
124         if (langClassName == null || "".equals(langClassName)) {
125             throw new BuildException("languageClassName attribute must be set");
126         }
127         if (lexerClassName == null || "".equals(lexerClassName)) {
128             throw new BuildException("lexerClassName attribute must be set");
129         }
130         if (langSrcFile == null) {
131             throw new BuildException("languageSourceFile attribute must be set");
132         }
133         
134         // Check if file exists
135
if (langDescFile != null && !langDescFile.exists()) {
136             langDescFile = null;
137         }
138
139         String JavaDoc output;
140         try {
141             output = generate(langClassName, lexerClassName,
142                 tokenTypesClassName, langDescFile);
143         } catch (SAXException JavaDoc e) {
144             e.printStackTrace();
145             if (e.getException() != null) {
146                 System.err.println("Nested exception:");
147                 e.getException().printStackTrace();
148             }
149             throw new BuildException(e);
150         } catch (IOException JavaDoc e) {
151             throw new BuildException(e);
152         } catch (ClassNotFoundException JavaDoc e) {
153             throw new BuildException(e);
154         }
155         
156         try {
157             FileWriter JavaDoc langSrcWriter = new FileWriter JavaDoc(langSrcFile);
158             langSrcWriter.write(output);
159             langSrcWriter.close();
160         } catch (IOException JavaDoc e) {
161             throw new BuildException("IOException occurred", e);
162         }
163         
164         String JavaDoc msg = "Generated language source " + langSrcFile
165             + " based on information from ";
166         if (tokenTypesClassName != null) {
167             msg += "class " + tokenTypesClassName;
168         }
169         if (langDescFile != null) {
170             if (tokenTypesClassName != null) {
171                 msg += " and ";
172             }
173             msg += "description in " + langDescFile;
174         }
175
176         log(msg);
177     }
178     
179     protected abstract String JavaDoc generate(String JavaDoc langClassName, String JavaDoc lexerClassName,
180     String JavaDoc tokenTypesClassName, File JavaDoc langDescFile)
181     throws ClassNotFoundException JavaDoc, SAXException JavaDoc, IOException JavaDoc;
182             
183 }
184
Popular Tags