package student.web.internal; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Properties; import student.web.internal.TemplateManager.Template.Field; public class TemplateManager { private static TemplateManager TM = new TemplateManager(); private List<Template> templates = new ArrayList<Template>(); private File templateStorageLocation; private String TEMP_EXT = ".template"; private boolean enabled = false; private static String NULLABLE = "nullable"; // private Logger logger = Logger.getLogger(TemplateManager.class); public class Template { public class Field { String name; boolean nullable; public Field( String myName, boolean myNull ) { name = myName; nullable = myNull; } public String getName() { return name; } public boolean isNullable() { return nullable; } public void setNullable( boolean checked ) { nullable = checked; } } private String name; private List<Field> fields = new ArrayList<Field>(); private Field defaultField; public Template( String myName ) { name = myName; defaultField = new Field( "_DEFAULT", true ); } public Template( File persistedTemplate ) { name = persistedTemplate.getName().substring( 0, persistedTemplate.getName().indexOf( ".template" ) ); Properties prop = new Properties(); try { prop.load( new FileReader( persistedTemplate ) ); for ( Object key : prop.keySet() ) { String fieldName = splitFieldName( (String)key ); // String attribute = splitAttribute((String)key); boolean nullable = new Boolean( prop.getProperty( (String)key ) ); if ( fieldName.equals( "_DEFAULT" ) ) { defaultField = new Field( fieldName, nullable ); } else { fields.add( new Field( fieldName, nullable ) ); } } } catch ( FileNotFoundException e ) { // logger.error("Could not find the file specified in the template load "+persistedTemplate.getName(), // e); } catch ( IOException e ) { // logger.error("Could not read the template file "+persistedTemplate.getName(),e); } if ( defaultField == null ) { defaultField = new Field( "_DEFAULT", true ); } } private String splitFieldName( String key ) { return key.substring( 0, key.indexOf( "." ) ); } private String splitAttribute( String key ) { return key.substring( key.indexOf( "." ) ); } public String getName() { return name; } public List<Field> getFields() { return fields; } public void addField( String text, boolean b ) { fields.add( new Field( text, b ) ); persistTemplate(); } public void removeField( Field value ) { fields.remove( value ); persistTemplate(); } public void persistTemplate() { Properties prop = new Properties(); prop.setProperty( defaultField.getName() + "." + NULLABLE, new Boolean( defaultField.isNullable() ).toString() ); for ( Field f : fields ) { prop.setProperty( f.getName() + "." + NULLABLE, new Boolean( f.isNullable() ).toString() ); } try { FileWriter fwrite = new FileWriter( getPersistenceFile() ); prop.store( fwrite, "Template File for " + this.name ); fwrite.close(); } catch ( IOException e ) { // logger.error("Could not persist "+this.name, e); } } private File getPersistenceFile() { return new File( templateStorageLocation, this.name + TEMP_EXT ); } @Override public boolean equals( Object o ) { if ( o instanceof Template ) { if ( ( (Template)o ).name.equals( this.name ) ) { return true; } } return false; } public void removePersistence() { if ( !getPersistenceFile().delete() ) { // logger.error("Could not delete Persisted Template " + // this.name); } } public Field getField( String myField ) { for ( Field temp : this.fields ) { if ( temp.getName().equals( myField ) ) { return temp; } } return null; } public boolean containsKey( String classField ) { for ( Field field : fields ) { if ( field.getName().equals( classField ) ) { return true; } } return false; } public Field getDefault() { return this.defaultField; } public void setDefault( boolean isNullable ) { defaultField.setNullable( isNullable ); } } private TemplateManager() { } public void enableTemplateChecking( File storageLocation ) { templateStorageLocation = storageLocation; enabled = true; rebuildTemplates(); } public boolean isEnabled() { return enabled; } private void rebuildTemplates() { // Rebuild the template list. for ( File tempFile : templateStorageLocation.listFiles() ) { if ( tempFile.getName().endsWith( ".template" ) ) { templates.add( new Template( tempFile ) ); } } } public static TemplateManager getInstance() { return TM; } public Template addTemplate( String text ) { Template toAdd = new Template( text ); if ( templates.contains( toAdd ) ) { return null; } templates.add( toAdd ); toAdd.persistTemplate(); return toAdd; } public List<Template> getTemplates() { return templates; } public void removeTemplate( Template selected ) { templates.remove( selected ); selected.removePersistence(); } public Template getTemplate( String source ) { for ( Template temp : templates ) { if ( temp.getName().equals( source ) ) { return temp; } } return null; } }