java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java
branchv_0
changeset 220 0bc544b38cfa
parent 189 f4d879cbcee1
child 221 e38910065d55
equal deleted inserted replaced
219:3b1733fb3793 220:0bc544b38cfa
    27 import info.globalcode.sql.dk.configuration.ConfigurationException;
    27 import info.globalcode.sql.dk.configuration.ConfigurationException;
    28 import info.globalcode.sql.dk.configuration.DatabaseDefinition;
    28 import info.globalcode.sql.dk.configuration.DatabaseDefinition;
    29 import info.globalcode.sql.dk.configuration.FormatterDefinition;
    29 import info.globalcode.sql.dk.configuration.FormatterDefinition;
    30 import info.globalcode.sql.dk.configuration.Loader;
    30 import info.globalcode.sql.dk.configuration.Loader;
    31 import info.globalcode.sql.dk.configuration.NameIdentified;
    31 import info.globalcode.sql.dk.configuration.NameIdentified;
       
    32 import info.globalcode.sql.dk.configuration.PropertyDeclaration;
    32 import info.globalcode.sql.dk.formatting.Formatter;
    33 import info.globalcode.sql.dk.formatting.Formatter;
    33 import info.globalcode.sql.dk.formatting.FormatterContext;
    34 import info.globalcode.sql.dk.formatting.FormatterContext;
    34 import info.globalcode.sql.dk.formatting.FormatterException;
    35 import info.globalcode.sql.dk.formatting.FormatterException;
    35 import info.globalcode.sql.dk.jmx.ConnectionManagement;
    36 import info.globalcode.sql.dk.jmx.ConnectionManagement;
    36 import info.globalcode.sql.dk.jmx.ManagementUtils;
    37 import info.globalcode.sql.dk.jmx.ManagementUtils;
    39 import java.io.IOException;
    40 import java.io.IOException;
    40 import java.io.PrintStream;
    41 import java.io.PrintStream;
    41 import java.io.PrintWriter;
    42 import java.io.PrintWriter;
    42 import java.sql.SQLException;
    43 import java.sql.SQLException;
    43 import java.util.Collection;
    44 import java.util.Collection;
       
    45 import java.util.Collections;
       
    46 import java.util.List;
    44 import java.util.logging.Level;
    47 import java.util.logging.Level;
    45 import java.util.logging.LogRecord;
    48 import java.util.logging.LogRecord;
    46 import java.util.logging.Logger;
    49 import java.util.logging.Logger;
    47 
    50 
    48 /**
    51 /**
   213 			try {
   216 			try {
   214 				File dir = new File(Constants.DIR, "bash-completion");
   217 				File dir = new File(Constants.DIR, "bash-completion");
   215 				dir.mkdir();
   218 				dir.mkdir();
   216 				writeBashCompletionHelperFile(configuration.getDatabases(), new File(dir, "databases"));
   219 				writeBashCompletionHelperFile(configuration.getDatabases(), new File(dir, "databases"));
   217 				writeBashCompletionHelperFile(configuration.getAllFormatters(), new File(dir, "formatters"));
   220 				writeBashCompletionHelperFile(configuration.getAllFormatters(), new File(dir, "formatters"));
       
   221 				writeBashCompletionHelperFileForFormatterProperties(new File(dir, "formatter-properties"));
   218 			} catch (Exception e) {
   222 			} catch (Exception e) {
   219 				log.log(Level.WARNING, "Unable to generate Bash completion helper files", e);
   223 				log.log(Level.WARNING, "Unable to generate Bash completion helper files", e);
   220 			}
   224 			}
   221 		}
   225 		}
   222 	}
   226 	}
   232 			}
   236 			}
   233 		} else {
   237 		} else {
   234 			log.log(Level.FINER, "Not writing Bash completion helper file: {0} because configuration {1} has not been changed", new Object[]{target, Constants.CONFIG_FILE});
   238 			log.log(Level.FINER, "Not writing Bash completion helper file: {0} because configuration {1} has not been changed", new Object[]{target, Constants.CONFIG_FILE});
   235 		}
   239 		}
   236 	}
   240 	}
       
   241 
       
   242 	private void writeBashCompletionHelperFileForFormatterProperties(File formattersDir) throws ClassNotFoundException {
       
   243 		if (Constants.CONFIG_FILE.lastModified() > formattersDir.lastModified()) {
       
   244 			// TODO: delete old directory
       
   245 			formattersDir.mkdir();
       
   246 			for (FormatterDefinition fd : configuration.getAllFormatters()) {
       
   247 				File formatterDir = new File(formattersDir, fd.getName());
       
   248 				formatterDir.mkdir();
       
   249 
       
   250 				Class<Formatter> formatterClass = (Class<Formatter>) Class.forName(fd.getClassName());
       
   251 				List<Class<? extends Formatter>> hierarchy = Functions.getClassHierarchy(formatterClass, Formatter.class);
       
   252 				Collections.reverse(hierarchy);
       
   253 				hierarchy.stream().forEach((c) -> {
       
   254 					for (PropertyDeclaration p : Functions.getPropertyDeclarations(c)) {
       
   255 						File propertyDir = new File(formatterDir, p.name());
       
   256 						propertyDir.mkdir();
       
   257 					}
       
   258 				});
       
   259 			}
       
   260 			log.log(Level.FINE, "Bash completion helper files was written in: {0}", formattersDir);
       
   261 		} else {
       
   262 			log.log(Level.FINER, "Not writing Bash completion helper directory: {0} because configuration {1} has not been changed", new Object[]{formattersDir, Constants.CONFIG_FILE});
       
   263 		}
       
   264 
       
   265 	}
   237 }
   266 }