AMADEUS html plain
/**
/**
* This class deals with converter source and class file generation
*/
import java . io . BufferedReader ;
import java . io . BufferedWriter ;
import java . io . File ;
import java . io . FileNotFoundException ;
import java . io . FileOutputStream ;
import java . io . FileReader ;
import java . io . FileWriter ;
import java . io . IOException ;
import java . io . PrintStream ;
import javax . swing . JFrame ;
import javax . swing . JOptionPane ;
class ConverterGenerator
public
class ConverterGenerator
/**
/**
* List of supported languages
*/
static String [ ] items = BaseLanguage . items ;
/**
/**
* Source base language is set by user
*/
private byte sourceBaseLanguageType ;
/**
/**
* Model base language comes from model file
*/
private byte modelBaseLanguageType ;
/**
/**
* String representation of source base language
*/
private String sourceBaseLanguage ;
/**
/**
* String representation of model base language
*/
private String modelBaseLanguage ;
/**
/**
* Indicates directory in filesystem where converter is generated
*/
private String resultsDir ;
/**
/**
* Declarations for converter template
*/
private String importDeclarations ;
private String classDeclaration ;
private String sourceBaseLanguageDeclaration ;
private String converterFileName ;
/**
/**
* Constructor
*
* @param sourceBaseLanguageType
* @param resultsDir
*/
ConverterGenerator
public
ConverterGenerator ( byte sourceBaseLanguageType , String resultsDir )
this . sourceBaseLanguage = items [ sourceBaseLanguageType ] ;
this . sourceBaseLanguageType = sourceBaseLanguageType ;
this . resultsDir = resultsDir ;
importDeclarations = "import java . awt . * ; import java . io . * ;" ;
sourceBaseLanguageDeclaration = "static final byte sourceBaseLanguageType = " + this . sourceBaseLanguageType + ";" ;
/**
/**
* Initializes resultsDir
*
* @param dir
*/
void setResultsDir
public
void setResultsDir ( String dir )
this . resultsDir = dir ;
/**
/**
* Sets model base language
*
* @param modelBase
*/
void setModelBaseLanguageType
public
void setModelBaseLanguageType ( byte modelBase )
this . modelBaseLanguageType = modelBase ;
this . modelBaseLanguage = items [ modelBaseLanguageType ] ;
classDeclaration = "public class Converter" + this . sourceBaseLanguage . replaceAll ( "\\s" , "" ) + "to" + this . modelBaseLanguage . replaceAll ( "\\s" , "" ) + " { " ;
/**
/**
* Creates root folder and class, model subfolders for converter
*
*/
void createOutputFolders
private
void createOutputFolders ( ) throws Exception
String resultsDirectory = null ;
..if
? ! ( resultsDir . endsWith ( System . getProperty ( "file.separator" ) ) )
resultsDirectory = resultsDir + System . getProperty ( "file.separator" ) ;
<======
resultsDirectory = resultsDir ;
resultsDir = resultsDirectory ;
String converterName = this . converterFileName . substring ( 0 , converterFileName . length ( ) - 5 ) ;
String converterDir = resultsDirectory + converterName ;
File creator = new File ( converterDir ) ;
creator . mkdirs ( ) ;
String modelsDir = converterDir + System . getProperty ( "file.separator" ) + "models" ;
File modelCreator = new File ( modelsDir ) ;
modelCreator . mkdirs ( ) ;
String classDir = converterDir + System . getProperty ( "file.separator" ) + "class" ;
File classCreator = new File ( classDir ) ;
classCreator . mkdirs ( ) ;
/**
/**
* Calls source and class file generation routines
*
* @throws Exception
*/
void generate
public
void generate ( ) throws Exception
generateSourceFile ( ) ;
..try
!!
createOutputFolders ( ) ;
String m = generateClassFile ( ) ;
..catch
! Exception e
e . printStackTrace ( ) ;
this . showErrorMessage ( "Generation error: " + e . getMessage ( ) , new JFrame ( ) ) ;
throw e ;
System . out . println ( "ConverterGenerator@: Converter generated" ) ;
/**
/**
* Generates converter source
*
* @throws Exception
*/
void generateSourceFile
public
void generateSourceFile ( ) throws Exception
String newLine = System . getProperty ( "line.separator" ) ;
FileOutputStream out ;
PrintStream p ;
..try
!!
out = new FileOutputStream ( "Converter" + this . sourceBaseLanguage . replaceAll ( "\\s" , "" ) + "to" + this . modelBaseLanguage . replaceAll ( "\\s" , "" ) + ".java" ) ;
p = new PrintStream ( out ) ;
String headerInfo = this . importDeclarations + newLine + this . classDeclaration + newLine + this . sourceBaseLanguageDeclaration ;
p . println ( headerInfo ) ;
p . close ( ) ;
..catch
! Exception e
throw new Exception ( "Error generating source file: " + e . getMessage ( ) ) ;
BufferedReader r = new BufferedReader ( new FileReader ( "ConverterTemplate" ) ) ;
BufferedWriter w = new BufferedWriter ( new FileWriter ( "Converter" + this . sourceBaseLanguage . replaceAll ( "\\s" , "" ) + "to" + this . modelBaseLanguage . replaceAll ( "\\s" , "" ) + ".java" , true ) ) ;
copyTemplate ( r , w ) ;
converterFileName = "Converter" + this . sourceBaseLanguage . replaceAll ( "\\s" , "" ) + "to" + this . modelBaseLanguage . replaceAll ( "\\s" , "" ) + ".java" ;
System . out . println ( "ConverterGenerator@: Source file generated" ) ;
/**
/**
* Generates converter class file
*
* @return
* @throws Exception
*/
String generateClassFile
public
String generateClassFile ( ) throws Exception
String runPath , tulemus ;
String q = "\"" ;
JK
..if
? ! ( resultsDir . endsWith ( System . getProperty ( "file.separator" ) ) )
resultsDir += System . getProperty ( "file.separator" ) ;
System . out . println ( "ConverterGenerator@: Before class file generation. resultsdir = " + this . resultsDir ) ;
converterFileName = "Converter" + this . sourceBaseLanguage . replaceAll ( "\\s" , "" ) + "to" + this . modelBaseLanguage . replaceAll ( "\\s" , "" ) + ".java" ;
String res = this . resultsDir + converterFileName . substring ( 0 , converterFileName . length ( ) - 5 ) + System . getProperty ( "file.separator" ) + "class" ;
runPath = "\"" + q + Default . JsdkDirectory + "javac" + q + " -cp \"" + Default . AmadeusDirectory + "class" + "\" -d \"" + res + "\" " + converterFileName + "\"" ;
System . out . println ( "CoverterGenerator:kompileerida::kompileerida:runPath: " + runPath ) ;
CommandLine cmdLine = new CommandLine ( ) ;
tulemus = cmdLine . exec ( CommandLine . toArray ( runPath ) ) ;
? tulemus . trim ( ) . endsWith ( "ExitValue: 0" )
System . out . println ( "ConverterGenerator@: Class file generated" ) ;
<======( tulemus )
throw new Exception ( "Error generating classfile: " + tulemus ) ;
/**
/**
* Copies converter template to converter source
*
* @param r
* @param w
* @throws Exception
*/
void copyTemplate
private
void copyTemplate ( BufferedReader r , BufferedWriter w ) throws Exception
BufferedReader br = null ;
BufferedWriter bw = null ;
File source = null ;
..try
!!
br = r ;
bw = w ;
source = new File ( "ConverterTemplate" ) ;
..if
? source . exists ( ) == false
throw new Exception ( "Error during converter template copying: Converter template source not found" ) ;
int fileLength = ( int ) source . length ( ) ;
char charBuff [ ] = new char [ fileLength ] ;
..for
* ; br . read ( charBuff , 0 , fileLength ) != - 1 ;
bw . write ( charBuff , 0 , fileLength ) ;
..catch
! FileNotFoundException fnfe
throw new Exception ( "Error during converter template copying: Converter template source not found" ) ;
..catch
! IOException ioe
throw new Exception ( "Error during converter template copying: " + ioe . getMessage ( ) ) ;
..finally
!
..try
!!
..if
? br != null
br . close ( ) ;
? bw != null
bw . close ( ) ;
..catch
! IOException ioe
System . out . println ( "ConverterGenerator@: Source template copied" ) ;
void showErrorMessage
private
void showErrorMessage ( String message , JFrame frame )
JOptionPane . showMessageDialog ( frame , message , "Error!" , JOptionPane . ERROR_MESSAGE ) ;
String getSourceBaseLanguage
public
String getSourceBaseLanguage ( )
<======( this . sourceBaseLanguage )
String getModelBaseLanguage
public
String getModelBaseLanguage ( )
<======( this . modelBaseLanguage )
String getResultsDir
public
String getResultsDir ( )
<======( this . resultsDir )
String getConverterFileName
public
String getConverterFileName ( )
<======( this . converterFileName )