001 /*
002 // $Id: //open/util/resgen/src/org/eigenbase/resgen/AbstractJavaGenerator.java#3 $
003 // Package org.eigenbase.resgen is an i18n resource generator.
004 // Copyright (C) 2005-2005 The Eigenbase Project
005 // Copyright (C) 2005-2005 Disruptive Tech
006 // Copyright (C) 2005-2005 LucidEra, Inc.
007 // Portions Copyright (C) 2001-2005 Kana Software, Inc. and others.
008 //
009 // This library is free software; you can redistribute it and/or modify it
010 // under the terms of the GNU Lesser General Public License as published by the
011 // Free Software Foundation; either version 2 of the License, or (at your
012 // option) any later version approved by The Eigenbase Project.
013 //
014 // This library is distributed in the hope that it will be useful,
015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
017 // GNU Lesser General Public License for more details.
018 //
019 // You should have received a copy of the GNU Lesser General Public License
020 // along with this library; if not, write to the Free Software
021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
022 */
023 package org.eigenbase.resgen;
024
025 import java.io.PrintWriter;
026 import java.io.File;
027
028 /**
029 * Abstract base for all generators which generate Java code.
030 *
031 * @author jhyde
032 * @since 19 September, 2005
033 * @version $Id: //open/util/resgen/src/org/eigenbase/resgen/AbstractJavaGenerator.java#3 $
034 */
035 abstract class AbstractJavaGenerator extends AbstractGenerator
036 {
037 protected final String className;
038 protected final ResourceDef.ResourceBundle resourceBundle;
039 protected final String baseClassName;
040
041 private static final String JAVA_STRING = "String";
042 private static final String JAVA_NUMBER = "Number";
043 private static final String JAVA_DATE_TIME = "java.util.Date";
044 private static final String[] JAVA_TYPE_NAMES =
045 {JAVA_STRING, JAVA_NUMBER, JAVA_DATE_TIME, JAVA_DATE_TIME};
046
047 AbstractJavaGenerator(
048 File srcFile,
049 File file,
050 String className,
051 ResourceDef.ResourceBundle resourceBundle,
052 String baseClassName)
053 {
054 super(srcFile, file);
055 this.className = className;
056 this.baseClassName = baseClassName;
057 this.resourceBundle = resourceBundle;
058 }
059
060 /**
061 * Returns the type of error which is to be thrown by this resource.
062 * Result is null if this is not an error.
063 */
064 protected String getErrorClass(
065 ResourceDef.Exception exception) {
066 if (exception.className != null) {
067 return exception.className;
068 } else if (resourceBundle.exceptionClassName != null) {
069 return resourceBundle.exceptionClassName;
070 } else {
071 return "java.lang.RuntimeException";
072 }
073 }
074
075 protected String getPackageName()
076 {
077 int lastDot = className.lastIndexOf('.');
078 if (lastDot < 0) {
079 return null;
080 } else {
081 return className.substring(0,lastDot);
082 }
083 }
084
085 protected String[] getArgTypes(String message) {
086 return ResourceDefinition.getArgTypes(message, JAVA_TYPE_NAMES);
087 }
088
089 protected void generateHeader(PrintWriter pw) {
090 generateDoNotModifyHeader(pw);
091 String packageName = getPackageName();
092 if (packageName != null) {
093 pw.println("package " + packageName + ";");
094 }
095 pw.println("import java.io.IOException;");
096 pw.println("import java.util.Locale;");
097 pw.println("import java.util.ResourceBundle;");
098 pw.println("import org.eigenbase.resgen.*;");
099 pw.println();
100 generateGeneratedByBlock(pw);
101 }
102
103 protected void generateFooter(PrintWriter pw, String className) {
104 pw.println("// End " + className + ".java");
105 }
106
107 protected String getClassName()
108 {
109 return className;
110 }
111
112 protected String getBaseClassName()
113 {
114 return baseClassName;
115 }
116 }
117
118 // End AbstractJavaGenerator.java