Java to Sql - Sql to Java Transform

The Java to Sql and vice versa transform help take Java code which has SQL embedded in it and extracts into sql and vice versa. Below is the code which shows how these plugins work but more importantly it shows a real example of a plugin.

SqlTransformPlugin.java

package superquail.plugins.rudster.sqltransform;

import javax.swing.JPanel;

import superquail.model.application.ApplicationContext;
import superquail.plugin.IPluginAction;
import superquail.plugin.IPluginMultipleActions;
import superquail.plugin.PluginInfoPanel;

/**
 * Sql Transform plugin.  Takes java code
 * and transforms it into sql and vice versa
 * @author Rudster
 *
 */
public class SqlTransformPlugin implements IPluginMultipleActions {

	private IPluginAction[] pluginActions;
	public IPluginAction[] getIPluginActions() {
		if (pluginActions == null){
			pluginActions = new IPluginAction[]{
					new SqlToJavaTransformAction(), 
					new JavaToSqlTransformAction()};
		}
		return pluginActions;
	}

	public String getName() {
		return "Sql Transform";
	}

	public JPanel[] getSettingsPanel(ApplicationContext context) {
		JPanel[] panels = new JPanel[1];
		panels[0] = new PluginInfoPanel("Rudy Yeung", "March 2007", "1", getName());
		return panels;
	}

	public void initialize(ApplicationContext context) {
		// do nothing
	}

	public void unInitialize(ApplicationContext context) {
		// do nothing
	}

}

JavaToSqlTransformAction.java

package superquail.plugins.rudster.sqltransform;

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

import superquail.model.application.ApplicationContext;
import superquail.plugin.IPluginAction;
import superquail.view.SqlTabPanel;

public class JavaToSqlTransformAction implements IPluginAction {

	public void run(ApplicationContext context) {
		SqlTabPanel currentSqlTabPanel = context.getViews().getCurrentSqlTabPanel();
		String sql = currentSqlTabPanel.getEditor().getText();
		if (sql.indexOf("\"") == -1) { //simple check
			JOptionPane.showMessageDialog(context.getViews().getMainFrame(), "Sql is not transformable.");
			return;
		}
		String transformSql = convertJavaToSql(sql);
		currentSqlTabPanel.getEditor().setText(transformSql);
	}

	public String convertJavaToSql(String sql) {
		StringBuffer buffer = new StringBuffer();
		boolean startIndexFound = true;
		int quoteIndex = sql.indexOf("\""); //starting string
		int startIndex = quoteIndex;
		int endIndex = 0;
		while (quoteIndex != -1) {
			int fakeQuoteIndex = sql.indexOf("\\\"", quoteIndex + 1) + 1; //trying to find quote within string
			quoteIndex = sql.indexOf("\"", quoteIndex + 1); //trying to find end of start of string
			if (fakeQuoteIndex == quoteIndex) {
				quoteIndex += 1;
				continue;
			}
			if (quoteIndex == -1) {
				break;
			}
			if (startIndexFound) { //found end index
				endIndex = quoteIndex;
				String subSqlString = sql.substring(startIndex + 1, endIndex) + " ";
				buffer.append(subSqlString.replaceAll("\\\\\"", "\""));
				startIndexFound = false;
				startIndex = quoteIndex;
			} else if (quoteIndex != -1){ //found start index
				startIndex = quoteIndex;
				startIndexFound = true;
				String gap = sql.substring(endIndex + 1, startIndex); //look at gap and remove + sign
				buffer.append(gap.replaceAll("\\+", ""));
			} 
		}
		return buffer.toString();
	}

	public String getName() {
		return "Java to Sql";
	}

	public JPanel[] getSettingsPanel(ApplicationContext context) {
		return null;
	}

	public void initialize(ApplicationContext context) {
		//do nothing
	}

	public String getMenuPath() {
		return "/Plugins/Sql Transform/Java To Sql";
	}

	public void unInitialize(ApplicationContext context) {
		//do nothing
	}

	public KeyStroke getShortCut() {
		return null;
	}

}

SqlToJavaTransformAction.java

package superquail.plugins.rudster.sqltransform;

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;

import superquail.constants.ApplicationConstants;
import superquail.model.application.ApplicationContext;
import superquail.plugin.IPluginAction;
import superquail.view.SqlTabPanel;
import superquail.view.SyntaxHighlightTextArea;

/**
 * Takes a sql statement and creates a Java like string out of it.
 * 
 * @author Rudster
 *
 */
public class SqlToJavaTransformAction implements IPluginAction, ApplicationConstants {

	public void run(ApplicationContext context) {
		SqlTabPanel panel = context.getViews().getCurrentSqlTabPanel();
		if (panel != null) {
			String sql = panel.getSqlTabData().getSql();
			String transformedSql = convertSqlToJava(sql);
			
			JScrollPane sp = new JScrollPane();
			SyntaxHighlightTextArea textPane = 
				new SyntaxHighlightTextArea(context, SyntaxHighlightTextArea.SYNTAX_JAVA, sp);
			textPane.setText(transformedSql);
			sp.setViewportView(textPane);
			
			JOptionPane.showMessageDialog(context.getViews().getMainFrame(), sp);
		} else {
			String message = "Must select a sql tab";
			JOptionPane.showMessageDialog(context.getViews().getMainFrame(), message);
		}
	}

	public String convertSqlToJava(String sql) {
		String firstWord = sql.trim().split(SPACE)[0].toLowerCase().trim();
		
		StringBuffer transformedSql = new StringBuffer();
		transformedSql.append("String " + firstWord  + "Sql = " + NEW_LINE);
		
		String[] lines = sql.split("\\n|\\r");
		for (int i = 0; i < lines.length; i++) {
			String line = lines[i];
			//empty line
			if (line.trim().length() == 0) {
				transformedSql.append(NEW_LINE);
			} else { //regular line
				//indent
				transformedSql.append(SPACE+SPACE+SPACE+SPACE);
				
				//do spaces
				char[] val = line.toCharArray();    
				int len = val.length;
				int st = 0;

				while ((st < len) && (val[st] <= ' ')) {
					transformedSql.append(SPACE);
				    st++;
				}
				StringBuffer wordsBuffer = new StringBuffer();
				while (st < len) {
					wordsBuffer.append(val[st]);
					st++;
				}
				transformedSql.append("\" " + wordsBuffer.toString().trim() + " \"");
				if (i == lines.length - 1) {
					transformedSql.append(SEMICOLON);	
				} else {
					transformedSql.append(" + " + NEW_LINE);	
				}
			}
		}
		
		return transformedSql.toString();
	}

	public String getName() {
		return "Sql to Java";
	}

	public JPanel[] getSettingsPanel(ApplicationContext context) {
		return null;
	}

	public void initialize(ApplicationContext context) {
		//do nothing
	}
	
	public String getMenuPath() {
		return "/Plugins/Sql Transform/Sql To Java";
	}

	public void unInitialize(ApplicationContext context) {
		//do nothing
	}

	public KeyStroke getShortCut() {
		return null;
	}
}
SourceForge.net Logo