package studio.kdb; import studio.core.DefaultAuthenticationMechanism; import java.io.*; import java.util.*; import java.util.List; import java.text.NumberFormat; import java.text.DecimalFormat; import java.awt.*; public class Config { public static String imageBase="/de/skelton/images/"; public static String imageBase2="/de/skelton/utils/"; private static String path; private static String filename="studio.properties"; private static String absoluteFilename; private static String version="1.1"; private Properties p = null; private static Config instance; private static NumberFormat formatter= null; private Config() { init(); } public Font getFont() { Font f= null; if( p != null) { String name= p.getProperty("font.name"); String size= p.getProperty("font.size"); int s= 14; if( size != null) s= Integer.parseInt(size); String n= "Monospaced"; if( name != null) n= name; f= new Font(n, Font.PLAIN, s); if( f == null) f= new Font("Monospaced", Font.PLAIN, 14); setFont(f); } return f; } public String getEncoding() { String s="UTF-8"; if( p != null) s= p.getProperty("encoding","UTF-8"); return s;//"GBK"; } public void setFont(Font f) { if( p != null) { p.setProperty("font.name", f.getFamily()); p.setProperty("font.size", ""+f.getSize()); save(); } } public Color getColorForToken(String tokenType, Color defaultColor) { Color c= Color.black; if( p != null) { String s= p.getProperty("token."+tokenType); if(s != null){ c= new Color(Integer.parseInt(s.substring(0,2),16), Integer.parseInt(s.substring(2,4),16), Integer.parseInt(s.substring(4,6),16)); } else { c= defaultColor; setColorForToken(tokenType,c); } } return c; } public void setColorForToken(String tokenType, Color c) { if( p != null) { p.setProperty("token."+tokenType, Integer.toHexString(c.getRGB()).substring(2)); save(); } } public synchronized NumberFormat getNumberFormat() { String key= null; if( p != null) { key= p.getProperty( "DecimalFormat","#.#######"); } return new DecimalFormat(key); } public static Config getInstance() { if (instance == null) { instance = new Config(); } return instance; } private void init() { path= System.getProperties().getProperty( "user.home"); path= path + "/.studioforkdb"; File f= new File( path); if( ! f.exists()) { if( !f.mkdir()) { // error creating dir } } absoluteFilename= path + "/" + filename; String candidate= absoluteFilename; p = new Properties(); boolean finished= false; while( !finished) { FileInputStream in = null; try { in = new FileInputStream(candidate); try { p.load(in); String v= p.getProperty( "version"); if( (v == null) || (!version.equals( v))) { p.clear(); } } catch (IOException e) { } finally { finished= true; } } catch (FileNotFoundException e) { if( candidate.equals( absoluteFilename)) { candidate= filename; } else { finished= true; } } finally { try { if (in != null) { in.close(); } } catch (IOException e) { } } } } public void save() { FileOutputStream out = null; try { out = new FileOutputStream(absoluteFilename); try { p.put( "version", version); p.store(out, "Auto-generated by Studio for kdb+"); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use Options | File Templates. } } catch (FileNotFoundException e) { e.printStackTrace(); //To change body of catch statement use Options | File Templates. } finally { try { if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use Options | File Templates. } } } public String[] getQKeywords() { String key= null; if( p != null) { key= p.getProperty( "qkeywords"); } Vector keywords= new Vector(); if( key != null) { StringTokenizer t= new StringTokenizer( key, ","); while( t.hasMoreTokens()) { String token= t.nextToken().trim(); if( token.length() > 0) { if( ! keywords.contains( token)) { keywords.add(token); } } } } return (String []) keywords.toArray( new String[0]); } public String getLRUServer() { String key= null; if( p != null) { key= p.getProperty( "lruServer"); } return key; } public void setLRUServer(Server s) { if( s != null) { if( p != null) { p.put("lruServer", s.getName()); } save(); } } public void saveQKeywords( String [] keywords) { StringBuffer key= new StringBuffer(); for( int i=0; i < keywords.length; i++) { if( i > 0) { key.append( ","); } key.append( keywords[i].trim()); } if( p != null) { p.put("qkeywords", key.toString()); } save(); } public void setAcceptedLicense(Date d) { p.put("licenseAccepted", d.toString()); save(); } public boolean getAcceptedLicense() { String s=(String) p.get("licenseAccepted"); if(s == null) return false; if( s.length()==0) return false; if(Lm.buildDate.after(new Date(s))) return false; return true; } public int getOffset( Server server) { if( server != null) { String name= server.getName(); Server [] servers= getServers(); for( int i= 0; i < servers.length; i++) { if( name.equals( servers[i].getName())) { return i; } } } return -1; } public String [] getMRUFiles() { String mru= null; if( p != null) { mru= p.getProperty( "mrufiles"); } Vector mruFiles= new Vector(); if( mru != null) { StringTokenizer t= new StringTokenizer( mru, ","); while( t.hasMoreTokens()) { String token= t.nextToken().trim(); if( token.length() > 0) { if( ! mruFiles.contains( token)) { mruFiles.add(token); } } } } return (String []) mruFiles.toArray( new String[0]); } public void saveMRUFiles( String [] mruFiles) { StringBuffer mru= new StringBuffer(); for( int i=0; i < (mruFiles.length>9?9:mruFiles.length); i++) { if( i > 0) { mru.append( ","); } mru.append( mruFiles[i].trim()); } if( p != null) { p.put("mrufiles", mru.toString()); } save(); } public String getLookAndFeel() { String lf= null; if( p != null) { lf= p.getProperty( "lookandfeel"); } return lf; } public void setLookAndFeel( String lf) { if( p != null) { p.put("lookandfeel", lf); } save(); } public Server getServer( String server) { Server [] servers= getServers(); for( int i= 0; i < servers.length; i++) { if( server.equals( servers[i].getName())) { return servers[i]; } } return null; } public String[] getServerNames() { Server [] servers= getServers(); String [] names= new String[ servers.length]; for( int i=0;i<servers.length;i++) { names[i]=servers[i].getName(); } return names; } public Server[] getServers() { ArrayList list = new ArrayList(); String servers = p.getProperty("Servers"); if (servers != null) { StringTokenizer t = new StringTokenizer(servers, ","); while (t.hasMoreTokens()) { String name = t.nextToken().trim(); String host = p.getProperty( "server."+name + "." + "host"); int port = Integer.parseInt( p.getProperty( "server."+name + "." + "port", "-1")); String username = p.getProperty( "server."+name + "." + "user"); String password = p.getProperty( "server."+name + "." + "password"); String backgroundColor= p.getProperty( "server."+name + "." + "backgroundColor", "FFFFFF"); String authenticationMechanism = p.getProperty( "server."+name + "." + "authenticationMechanism",new DefaultAuthenticationMechanism().getMechanismName()); Color c= new Color(Integer.parseInt(backgroundColor.substring(0,2),16), Integer.parseInt(backgroundColor.substring(2,4),16), Integer.parseInt(backgroundColor.substring(4,6),16)); if( (host != null) || ( port > 0)) { Server server = new Server(name, host, port, username, password,c, authenticationMechanism); list.add(server); } } } return (Server[]) list.toArray(new Server[0]); } public void removeServer(Server server) { Server [] servers=getServers(); ArrayList l= new ArrayList(); for( int i= 0; i < servers.length; i ++) { if( ! server.getName().equals( servers[i].getName())) { l.add( servers[i]); } } p.remove( "server."+server.getName()+"."+"host"); p.remove( "server."+server.getName()+"."+"port"); p.remove( "server."+server.getName()+"."+"k4"); p.remove( "server."+server.getName()+"."+"user"); p.remove( "server."+server.getName()+"."+"password"); p.remove( "server."+server.getName()+ "." + "backgroundColor"); p.remove( "server."+server.getName()+ "." + "authenticationMechanism"); setServers( (Server []) l.toArray( new Server[0])); } public void saveServer(Server server) { Server [] servers=getServers(); ArrayList l= new ArrayList(); for( int i= 0; i < servers.length; i ++) { if( ! server.getName().equals( servers[i].getName())) { l.add( servers[i]); } else { l.add( server); } } setServers( (Server []) l.toArray( new Server[0])); } private void setServerDetails( Server server) { String name = server.getName(); p.setProperty( "server."+name + "." + "host", server.getHost()); p.setProperty( "server."+name + "." + "port", "" + server.getPort()); p.setProperty( "server."+name + "." + "user", "" + server.getUsername()); p.setProperty( "server."+name + "." + "password", "" + server.getPassword()); p.setProperty( "server."+name + "." + "backgroundColor", "" + Integer.toHexString(server.getBackgroundColor().getRGB()).substring(2)); p.setProperty( "server."+name + "." + "authenticationMechanism", server.getAuthenticationMechanism()); } public void addServer(Server server) { setServerDetails( server); List serverNames= new ArrayList(); String servers = p.getProperty("Servers", ""); boolean found = false; StringTokenizer t = new StringTokenizer(servers, ","); while (t.hasMoreTokens()) { String name = t.nextToken().trim(); serverNames.add( name); } if( !serverNames.contains( server.getName())) { serverNames.add( server.getName()); Collections.sort( serverNames); Iterator i= serverNames.iterator(); StringBuffer s= new StringBuffer(); while( i.hasNext()) { s.append( (String) i.next()); if( i.hasNext()) { s.append( ","); } } p.setProperty("Servers", s.toString()); } save(); } public void setServers(Server[] servers) { String names = ""; for (int i = 0; i < servers.length; i++) { setServerDetails( servers[i]); if (i > 0) { names += ","; } names += servers[i].getName().trim(); } p.setProperty("Servers", names); save(); } }