// Path: src/main/java/com/stacksync/syncservice/db/DAOUtil.java
// public static PreparedStatement prepareStatement(Connection connection, String sql, boolean returnGeneratedKeys,
// 		Object... values) throws SQLException {
// 	PreparedStatement preparedStatement = connection.prepareStatement(sql,
// 			returnGeneratedKeys ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
// 	setValues(preparedStatement, values);
// 	return preparedStatement;
// }
// 
// Path: src/main/java/com/stacksync/syncservice/db/DAOError.java
// public enum DAOError {
// 
// 	// These errors codes correspond to HTTP codes
// 	// Users
// 	USER_NOT_FOUND(400, "User not found."), USER_NOT_AUTHORIZED(401,
// 			"The user is not authorized to access to this resource."),
// 
// 	// Workspaces
// 	WORKSPACES_NOT_FOUND(410, "Workspaces not found."),
// 			
// 	// Files
// 	FILE_NOT_FOUND(404, "File or folder not found."),
// 
// 	// Server
// 	INTERNAL_SERVER_ERROR(500, "Internal Server Error");
// 
// 	private final int code;
// 	private final String message;
// 
// 	DAOError(int code, String message) {
// 		this.code = code;
// 		this.message = message;
// 	}
// 
// 	public int getCode() {
// 		return code;
// 	}
// 
// 	public String getMessage() {
// 		return message;
// 	}
// }
// 
// Path: src/main/java/com/stacksync/syncservice/exceptions/dao/DAOException.java
// public class DAOException extends Exception {
// 
// 	private static final long serialVersionUID = 1L;
// 	private DAOError error;
// 	/**
//      * Constructs a DAOException with the given detail message.
//      * @param message The detail message of the DAOException.
//      */
//     public DAOException(DAOError error) {
//         super(error.getMessage());
//         this.error = error;
//     }
//     
//     public DAOException(Exception e, DAOError error) {
//         super(e);
//         this.error = error;
//     }
// 
//     public DAOException(String message) {
//         super(message);
//     }
//     
//     public DAOError getError(){
//     	return this.error;
//     }
//     /**
//      * Constructs a DAOException with the given root cause.
//      * @param cause The root cause of the DAOException.
//      */
//     public DAOException(Throwable cause) {
//         super(cause);
//     }
// 
//     /**
//      * Constructs a DAOException with the given detail message and root cause.
//      * @param message The detail message of the DAOException.
//      * @param cause The root cause of the DAOException.
//      */
//     public DAOException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
// }
// 
// Path: src/main/java/com/stacksync/syncservice/exceptions/dao/NoRowsAffectedDAOException.java
// public class NoRowsAffectedDAOException extends DAOException {
// 
// 	private static final long serialVersionUID = 356684827372558709L;
// 
//     public NoRowsAffectedDAOException(DAOError error) {
//         super(error);
//     }
//     
//     public NoRowsAffectedDAOException(Exception e, DAOError error) {
//         super(e, error);
//     }
// 
//     public NoRowsAffectedDAOException(String message) {
//         super(message);
//     }
// 
//     public NoRowsAffectedDAOException(Throwable cause) {
//         super(cause);
//     }
// 
//     public NoRowsAffectedDAOException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
// }


import static com.stacksync.syncservice.db.DAOUtil.prepareStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import com.stacksync.syncservice.db.DAOError;
import com.stacksync.syncservice.exceptions.dao.DAOException;
import com.stacksync.syncservice.exceptions.dao.NoRowsAffectedDAOException;
		}

		return resultSet;
	}

	protected Object executeUpdate(String query, Object[] values) throws DAOException {

		Object key = null;
		PreparedStatement preparedStatement = null;
		ResultSet generatedKeys = null;

		try {
			preparedStatement = prepareStatement(connection, query, true, values);
			int affectedRows = preparedStatement.executeUpdate();
			if (affectedRows == 0) {
				throw new NoRowsAffectedDAOException("Execute update error: no rows affected.");
			}

			if (query.startsWith("INSERT")) {
				generatedKeys = preparedStatement.getGeneratedKeys();

				if (generatedKeys.next()) {
					key = generatedKeys.getObject(1);
				} else {
					throw new DAOException("Creating object failed, no generated key obtained.");
				}
			}

		} catch (SQLException e) {
			logger.error(e);
// Path: src/main/java/com/stacksync/syncservice/db/DAOUtil.java
// public static PreparedStatement prepareStatement(Connection connection, String sql, boolean returnGeneratedKeys,
// 		Object... values) throws SQLException {
// 	PreparedStatement preparedStatement = connection.prepareStatement(sql,
// 			returnGeneratedKeys ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
// 	setValues(preparedStatement, values);
// 	return preparedStatement;
// }
// 
// Path: src/main/java/com/stacksync/syncservice/db/DAOError.java
// public enum DAOError {
// 
// 	// These errors codes correspond to HTTP codes
// 	// Users
// 	USER_NOT_FOUND(400, "User not found."), USER_NOT_AUTHORIZED(401,
// 			"The user is not authorized to access to this resource."),
// 
// 	// Workspaces
// 	WORKSPACES_NOT_FOUND(410, "Workspaces not found."),
// 			
// 	// Files
// 	FILE_NOT_FOUND(404, "File or folder not found."),
// 
// 	// Server
// 	INTERNAL_SERVER_ERROR(500, "Internal Server Error");
// 
// 	private final int code;
// 	private final String message;
// 
// 	DAOError(int code, String message) {
// 		this.code = code;
// 		this.message = message;
// 	}
// 
// 	public int getCode() {
// 		return code;
// 	}
// 
// 	public String getMessage() {
// 		return message;
// 	}
// }
// 
// Path: src/main/java/com/stacksync/syncservice/exceptions/dao/DAOException.java
// public class DAOException extends Exception {
// 
// 	private static final long serialVersionUID = 1L;
// 	private DAOError error;
// 	/**
//      * Constructs a DAOException with the given detail message.
//      * @param message The detail message of the DAOException.
//      */
//     public DAOException(DAOError error) {
//         super(error.getMessage());
//         this.error = error;
//     }
//     
//     public DAOException(Exception e, DAOError error) {
//         super(e);
//         this.error = error;
//     }
// 
//     public DAOException(String message) {
//         super(message);
//     }
//     
//     public DAOError getError(){
//     	return this.error;
//     }
//     /**
//      * Constructs a DAOException with the given root cause.
//      * @param cause The root cause of the DAOException.
//      */
//     public DAOException(Throwable cause) {
//         super(cause);
//     }
// 
//     /**
//      * Constructs a DAOException with the given detail message and root cause.
//      * @param message The detail message of the DAOException.
//      * @param cause The root cause of the DAOException.
//      */
//     public DAOException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
// }
// 
// Path: src/main/java/com/stacksync/syncservice/exceptions/dao/NoRowsAffectedDAOException.java
// public class NoRowsAffectedDAOException extends DAOException {
// 
// 	private static final long serialVersionUID = 356684827372558709L;
// 
//     public NoRowsAffectedDAOException(DAOError error) {
//         super(error);
//     }
//     
//     public NoRowsAffectedDAOException(Exception e, DAOError error) {
//         super(e, error);
//     }
// 
//     public NoRowsAffectedDAOException(String message) {
//         super(message);
//     }
// 
//     public NoRowsAffectedDAOException(Throwable cause) {
//         super(cause);
//     }
// 
//     public NoRowsAffectedDAOException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
// }


// Path: src/main/java/com/stacksync/syncservice/db/postgresql/PostgresqlDAO.java
import static com.stacksync.syncservice.db.DAOUtil.prepareStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import com.stacksync.syncservice.db.DAOError;
import com.stacksync.syncservice.exceptions.dao.DAOException;
import com.stacksync.syncservice.exceptions.dao.NoRowsAffectedDAOException;

		}

		return resultSet;
	}

	protected Object executeUpdate(String query, Object[] values) throws DAOException {

		Object key = null;
		PreparedStatement preparedStatement = null;
		ResultSet generatedKeys = null;

		try {
			preparedStatement = prepareStatement(connection, query, true, values);
			int affectedRows = preparedStatement.executeUpdate();
			if (affectedRows == 0) {
				throw new NoRowsAffectedDAOException("Execute update error: no rows affected.");
			}

			if (query.startsWith("INSERT")) {
				generatedKeys = preparedStatement.getGeneratedKeys();

				if (generatedKeys.next()) {
					key = generatedKeys.getObject(1);
				} else {
					throw new DAOException("Creating object failed, no generated key obtained.");
				}
			}

		} catch (SQLException e) {
			logger.error(e);
			throw new DAOException(e, DAOError.INTERNAL_SERVER_ERROR);