All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dmd.util.codegen.ImportManager Maven / Gradle / Ivy

Go to download

The dark-matter project provides mechanism to define concepts associated with Domain Specific Languages (DSLs) and generate code that can be extended with business logic that supports the given DSL purpose.

There is a newer version: 3.1.15
Show newest version
package org.dmd.util.codegen;

import java.util.TreeMap;

import org.dmd.util.exceptions.DebugInfo;
import org.dmd.util.formatting.PrintfFormat;

public class ImportManager {
	
	TreeMap	imports;
	int								longestImport;

	static TreeMap	staticImports;
	
	static int staticLongestImport;
	
	static {
		staticImports = new TreeMap();
	}
	
	static public void resetStatic(){
		staticImports = new TreeMap();
		staticLongestImport = 0;
	}
	
	static public void addImportStatic(String cn, String reason){
		staticImports.put(cn, new ImportStatement(cn, reason));
		if (cn.length() > staticLongestImport)
			staticLongestImport = cn.length();
	}
	
	static public String getFormattedImportsStatic(){
		StringBuffer 	sb 		= new StringBuffer();
		int 			padding = staticLongestImport+17;
		PrintfFormat 	format 	= new PrintfFormat("%-" + padding + "s");
		
		sb.append("// Generated from: " + DebugInfo.getWhereWeAreNow() + "\n");
		sb.append("// " + DebugInfo.getWhereWeWereCalledFrom() + "\n");
		
		for(ImportStatement i: staticImports.values()){
			sb.append(format.sprintf("import " + i.className + ";") + "// " + i.reason + "\n");			
		}
		
		return(sb.toString());
	}
	
	public ImportManager(){
		imports = new TreeMap();
		longestImport = 0;
	}
	
	public void reset(){
		imports = new TreeMap();
		longestImport = 0;
	}
	
	public void addImportsFrom(ImportManager im){
		for(ImportStatement is: im.imports.values()){
			if (is.className.length() > longestImport)
				longestImport = is.className.length();
			imports.put(is.className, is);
		}
	}
	
	public void addImport(String cn, String reason){
		// We take the first import we get
		if (imports.get(cn) != null){
//			DebugInfo.debug("Warning: duplicate import - " + cn + " - " + reason);
			return;
		}
		
		imports.put(cn, new ImportStatement(cn, reason + " - " + DebugInfo.getShortWhereWeWereCalledFrom()));
		if (cn.length() > longestImport)
			longestImport = cn.length();
	}
	
	public String getFormattedImports(){
		StringBuffer 	sb 		= new StringBuffer();
		int 			padding = longestImport+17;
		PrintfFormat 	format 	= new PrintfFormat("%-" + padding + "s");
		
		sb.append("// Generated from: " + DebugInfo.getWhereWeAreNow() + "\n");
		sb.append("// " + DebugInfo.getWhereWeWereCalledFrom() + "\n");
		
		for(ImportStatement i: imports.values()){
			sb.append(format.sprintf("import " + i.className + ";") + "// " + i.reason + "\n");			
		}
		
		sb.append("\n");
		
		return(sb.toString());
	}
	
	

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy