// Path: core/src/main/java/com/ccoe/build/core/model/Plugin.java
// public class Plugin extends TrackingModel {
// 	private String groupId;
// 	private String artifactId;
// 	private String version;
// 	
// 	private String status;
// 	private String executionId;
// 	
// 	private String phaseName;
// 	private String pluginKey;
// 	
// 	private int id;
// 	
// 	private String payload;
// 
// 	public String getGroupId() {
// 		return groupId;
// 	}
// 
// 	public void setGroupId(String groupId) {
// 		this.groupId = groupId;
// 	}
// 
// 	public String getArtifactId() {
// 		return artifactId;
// 	}
// 
// 	public void setArtifactId(String artifactId) {
// 		this.artifactId = artifactId;
// 	}
// 
// 	public String getVersion() {
// 		return version;
// 	}
// 
// 	public void setVersion(String version) {
// 		this.version = version;
// 	}
// 
// 	public String getStatus() {
// 		return status;
// 	}
// 
// 	public void setStatus(String status) {
// 		this.status = status;
// 	}
// 
// 	public String getExecutionId() {
// 		return executionId;
// 	}
// 
// 	public void setExecutionId(String executionId) {
// 		this.executionId = executionId;
// 	}
// 
// 	public String getPhaseName() {
// 		return phaseName;
// 	}
// 
// 	public void setPhaseName(String phaseName) {
// 		this.phaseName = phaseName;
// 	}
// 
// 	public String getPluginKey() {
// 		return pluginKey;
// 	}
// 
// 	public void setPluginKey(String pluginKey) {
// 		this.pluginKey = pluginKey;
// 	}
// 
// 	public int getId() {
// 		return id;
// 	}
// 
// 	public void setId(int id) {
// 		this.id = id;
// 	}
// 
// 	public String getPayload() {
// 		return payload;
// 	}
// 
// 	public void setPayload(String payload) {
// 		this.payload = payload;
// 	}
// 	
// 	public String toString() {
// 		StringBuffer sBuffer = new StringBuffer();
// 		appendTransactionAtom(sBuffer, 4, "Plugin", getPluginKey(), this.getStatus(), getDuration().toString(), getPayload());
// 		return sBuffer.toString();
// 	}
// }


import com.ccoe.build.core.model.Plugin;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

	// TODO event date
	public int create(final Plugin plugin, final int sessionID, final int projectID) {
		final String SQL = "insert into RBT_RAW_DATA (plugin_id, session_id, " +
				"project_id, duration, event_time, plugin_key) values (?, ?, ?, ?, ?, ?)";

		KeyHolder keyHolder = new GeneratedKeyHolder();
		jdbcTemplateObject.update(new PreparedStatementCreator() {
			public PreparedStatement createPreparedStatement(
					Connection connection) throws SQLException {
				PreparedStatement ps = connection.prepareStatement(SQL,
						new String[] { "id" });
				ps.setInt(1, plugin.getId());
				ps.setInt(2, sessionID);
				ps.setInt(3, projectID);
				ps.setLong(4, plugin.getDuration());
				ps.setTimestamp(5, new java.sql.Timestamp(plugin.getStartTime().getTime()));
				ps.setString(6, plugin.getGroupId() + ":" + plugin.getArtifactId());

				return ps;
			}
		}, keyHolder);
		
		return keyHolder.getKey().intValue();
	}
	
	public int[] batchInsert(final List<Plugin> plugins, final int sessionID, final int projectID) {
		final String SQL = "insert into RBT_RAW_DATA (plugin_id, session_id, " +
				"project_id, duration, event_time, plugin_key) values (?, ?, ?, ?, ?, ?)";
		
// Path: core/src/main/java/com/ccoe/build/core/model/Plugin.java
// public class Plugin extends TrackingModel {
// 	private String groupId;
// 	private String artifactId;
// 	private String version;
// 	
// 	private String status;
// 	private String executionId;
// 	
// 	private String phaseName;
// 	private String pluginKey;
// 	
// 	private int id;
// 	
// 	private String payload;
// 
// 	public String getGroupId() {
// 		return groupId;
// 	}
// 
// 	public void setGroupId(String groupId) {
// 		this.groupId = groupId;
// 	}
// 
// 	public String getArtifactId() {
// 		return artifactId;
// 	}
// 
// 	public void setArtifactId(String artifactId) {
// 		this.artifactId = artifactId;
// 	}
// 
// 	public String getVersion() {
// 		return version;
// 	}
// 
// 	public void setVersion(String version) {
// 		this.version = version;
// 	}
// 
// 	public String getStatus() {
// 		return status;
// 	}
// 
// 	public void setStatus(String status) {
// 		this.status = status;
// 	}
// 
// 	public String getExecutionId() {
// 		return executionId;
// 	}
// 
// 	public void setExecutionId(String executionId) {
// 		this.executionId = executionId;
// 	}
// 
// 	public String getPhaseName() {
// 		return phaseName;
// 	}
// 
// 	public void setPhaseName(String phaseName) {
// 		this.phaseName = phaseName;
// 	}
// 
// 	public String getPluginKey() {
// 		return pluginKey;
// 	}
// 
// 	public void setPluginKey(String pluginKey) {
// 		this.pluginKey = pluginKey;
// 	}
// 
// 	public int getId() {
// 		return id;
// 	}
// 
// 	public void setId(int id) {
// 		this.id = id;
// 	}
// 
// 	public String getPayload() {
// 		return payload;
// 	}
// 
// 	public void setPayload(String payload) {
// 		this.payload = payload;
// 	}
// 	
// 	public String toString() {
// 		StringBuffer sBuffer = new StringBuffer();
// 		appendTransactionAtom(sBuffer, 4, "Plugin", getPluginKey(), this.getStatus(), getDuration().toString(), getPayload());
// 		return sBuffer.toString();
// 	}
// }


// Path: publisher/src/main/java/com/ccoe/build/dal/RawDataJDBCTemplate.java
import com.ccoe.build.core.model.Plugin;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;


	// TODO event date
	public int create(final Plugin plugin, final int sessionID, final int projectID) {
		final String SQL = "insert into RBT_RAW_DATA (plugin_id, session_id, " +
				"project_id, duration, event_time, plugin_key) values (?, ?, ?, ?, ?, ?)";

		KeyHolder keyHolder = new GeneratedKeyHolder();
		jdbcTemplateObject.update(new PreparedStatementCreator() {
			public PreparedStatement createPreparedStatement(
					Connection connection) throws SQLException {
				PreparedStatement ps = connection.prepareStatement(SQL,
						new String[] { "id" });
				ps.setInt(1, plugin.getId());
				ps.setInt(2, sessionID);
				ps.setInt(3, projectID);
				ps.setLong(4, plugin.getDuration());
				ps.setTimestamp(5, new java.sql.Timestamp(plugin.getStartTime().getTime()));
				ps.setString(6, plugin.getGroupId() + ":" + plugin.getArtifactId());

				return ps;
			}
		}, keyHolder);
		
		return keyHolder.getKey().intValue();
	}
	
	public int[] batchInsert(final List<Plugin> plugins, final int sessionID, final int projectID) {
		final String SQL = "insert into RBT_RAW_DATA (plugin_id, session_id, " +
				"project_id, duration, event_time, plugin_key) values (?, ?, ?, ?, ?, ?)";
		
		int[] updateCounts = jdbcTemplateObject.batchUpdate(SQL,