SQLite post working.
							parent
							
								
									58c1816324
								
							
						
					
					
						commit
						d3af34d046
					
				|  | @ -9,3 +9,4 @@ out | ||||||
| *.prefs | *.prefs | ||||||
| *.project | *.project | ||||||
| *.classpath | *.classpath | ||||||
|  | bulletin-board-server/local-instances/meerkat.db | ||||||
|  |  | ||||||
|  | @ -9,8 +9,10 @@ apply plugin: 'java' | ||||||
| apply plugin: 'eclipse' | apply plugin: 'eclipse' | ||||||
| apply plugin: 'idea' | apply plugin: 'idea' | ||||||
| 
 | 
 | ||||||
|  | //apply plugin: 'application' | ||||||
|  | 
 | ||||||
| //apply plugin: 'jetty' | //apply plugin: 'jetty' | ||||||
| //mainClassName = 'Demo' | //mainClassName = 'SQLiteIntegrationTest' | ||||||
| 
 | 
 | ||||||
| apply plugin: 'maven-publish' | apply plugin: 'maven-publish' | ||||||
| 
 | 
 | ||||||
|  | @ -42,6 +44,8 @@ dependencies { | ||||||
| 
 | 
 | ||||||
|     // Jersey for RESTful API |     // Jersey for RESTful API | ||||||
|     compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.22.+' |     compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.22.+' | ||||||
|  |     compile 'org.xerial:sqlite-jdbc:3.7.+' | ||||||
|  |      | ||||||
| 
 | 
 | ||||||
|     // Logging |     // Logging | ||||||
|     compile 'org.slf4j:slf4j-api:1.7.7' |     compile 'org.slf4j:slf4j-api:1.7.7' | ||||||
|  | @ -68,6 +72,8 @@ task integrationTest(type: Test) { | ||||||
| 
 | 
 | ||||||
| gretty { | gretty { | ||||||
|     httpPort = 8081 |     httpPort = 8081 | ||||||
|  |     contextPath = '/' | ||||||
|  |     servletContainer = 'jetty9' | ||||||
|     integrationTestTask = 'integrationTest' |     integrationTestTask = 'integrationTest' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,6 +2,9 @@ package meerkat.bulletinboard.sqlserver; | ||||||
| 
 | 
 | ||||||
| import java.util.List; | import java.util.List; | ||||||
| 
 | 
 | ||||||
|  | import javax.ws.rs.POST; | ||||||
|  | import javax.ws.rs.Path; | ||||||
|  | 
 | ||||||
| import com.google.protobuf.ProtocolStringList; | import com.google.protobuf.ProtocolStringList; | ||||||
| 
 | 
 | ||||||
| import java.sql.Connection; | import java.sql.Connection; | ||||||
|  | @ -11,7 +14,7 @@ import java.sql.SQLException; | ||||||
| import java.sql.Statement; | import java.sql.Statement; | ||||||
| 
 | 
 | ||||||
| import meerkat.bulletinboard.BulletinBoardServer; | import meerkat.bulletinboard.BulletinBoardServer; | ||||||
| import meerkat.bulletinboard.MessageFilter; | import meerkat.protobuf.Voting.MessageFilterList; | ||||||
| import meerkat.comm.CommunicationException; | import meerkat.comm.CommunicationException; | ||||||
| import meerkat.protobuf.Crypto.SignatureVerificationKey; | import meerkat.protobuf.Crypto.SignatureVerificationKey; | ||||||
| import meerkat.protobuf.Voting.BulletinBoardMessage; | import meerkat.protobuf.Voting.BulletinBoardMessage; | ||||||
|  | @ -19,6 +22,7 @@ import meerkat.crypto.Digest; | ||||||
| import meerkat.crypto.concrete.SHA256Digest; | import meerkat.crypto.concrete.SHA256Digest; | ||||||
| import meerkat.protobuf.Voting.MessageID; | import meerkat.protobuf.Voting.MessageID; | ||||||
| 
 | 
 | ||||||
|  | @Path("/SQLServer") | ||||||
| public abstract class BulletinBoardSQLServer implements BulletinBoardServer{ | public abstract class BulletinBoardSQLServer implements BulletinBoardServer{ | ||||||
| 	 | 	 | ||||||
| 	protected Connection connection; | 	protected Connection connection; | ||||||
|  | @ -53,6 +57,7 @@ public abstract class BulletinBoardSQLServer implements BulletinBoardServer{ | ||||||
| 	 * @return TRUE if the message is authenticated and FALSE otherwise. | 	 * @return TRUE if the message is authenticated and FALSE otherwise. | ||||||
| 	 */ | 	 */ | ||||||
| 	private boolean verifyMessage(BulletinBoardMessage msg) { | 	private boolean verifyMessage(BulletinBoardMessage msg) { | ||||||
|  | 		//TODO: Replace with actual verification.
 | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|  | @ -60,8 +65,9 @@ public abstract class BulletinBoardSQLServer implements BulletinBoardServer{ | ||||||
| 	 * This procedure makes sure that all tags in the given list have an entry in the tags list.  | 	 * This procedure makes sure that all tags in the given list have an entry in the tags list.  | ||||||
| 	 * @param tagIterator | 	 * @param tagIterator | ||||||
| 	 */ | 	 */ | ||||||
| 	protected abstract void insertNewTags(String[] tags) throws CommunicationException; | 	protected abstract void insertNewTags(String[] tags) throws SQLException; | ||||||
| 	 | 	 | ||||||
|  | 	@POST | ||||||
| 	@Override | 	@Override | ||||||
| 	public boolean postMessage(BulletinBoardMessage msg) throws CommunicationException { | 	public boolean postMessage(BulletinBoardMessage msg) throws CommunicationException { | ||||||
| 		if (!verifyMessage(msg)) { | 		if (!verifyMessage(msg)) { | ||||||
|  | @ -85,17 +91,29 @@ public abstract class BulletinBoardSQLServer implements BulletinBoardServer{ | ||||||
| 			sql = "INSERT INTO MsgTable (Id, Data, Signature) VALUES(?,?,?)"; | 			sql = "INSERT INTO MsgTable (Id, Data, Signature) VALUES(?,?,?)"; | ||||||
| 		    pstmt = connection.prepareStatement(sql); | 		    pstmt = connection.prepareStatement(sql); | ||||||
| 		    pstmt.setBytes(1, msgID); | 		    pstmt.setBytes(1, msgID); | ||||||
| 		    pstmt.setBytes(2,msg.getMsg().getData().toByteArray()); | 		    pstmt.setBytes(2, msg.getMsg().getData().toByteArray()); | ||||||
| 		    pstmt.setBytes(3,msg.getSig().toByteArray()); | 		    pstmt.setBytes(3, msg.getSig().toByteArray()); | ||||||
| 		    pstmt.executeUpdate(); | 		    pstmt.executeUpdate(); | ||||||
| 		    pstmt.close(); | 		    pstmt.close(); | ||||||
| 		     | 		     | ||||||
|  | 		} catch (SQLException e) { | ||||||
|  | 			throw new CommunicationException("Error inserting into MsgTable: " + e.getMessage()); | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		try { | ||||||
|  | 			 | ||||||
| 		    tagList = msg.getMsg().getTagsList(); | 		    tagList = msg.getMsg().getTagsList(); | ||||||
| 		    tags = new String[tagList.size()]; | 		    tags = new String[tagList.size()]; | ||||||
|  | 		    tags = tagList.toArray(tags); | ||||||
| 		     | 		     | ||||||
| 		    insertNewTags(tags); | 		    insertNewTags(tags); | ||||||
| 		     | 		     | ||||||
| 		    sql = "INSERT INTO MsgTagTable (MsgId, TagId) SELECT (?, TagId) FROM TagTable WHERE tag=?"; | 		} catch (SQLException e) { | ||||||
|  | 			throw new CommunicationException(e.getMessage()); | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		try{ | ||||||
|  | 		    sql = "INSERT INTO MsgTagTable (TagId, MsgId) SELECT TagTable.Id, ? AS MsgId FROM TagTable WHERE tag = ?"; | ||||||
| 	    	pstmt = connection.prepareStatement(sql); | 	    	pstmt = connection.prepareStatement(sql); | ||||||
| 		     | 		     | ||||||
| 		    for (String tag : tags){ | 		    for (String tag : tags){ | ||||||
|  | @ -108,19 +126,21 @@ public abstract class BulletinBoardSQLServer implements BulletinBoardServer{ | ||||||
| 		    pstmt.close(); | 		    pstmt.close(); | ||||||
| 			 | 			 | ||||||
| 		} catch (SQLException e) { | 		} catch (SQLException e) { | ||||||
| 			throw new CommunicationException("Error accessing DB: " + e.getMessage()); | 			throw new CommunicationException("Error Linking tags: " + e.getMessage()); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	public List<BulletinBoardMessage> readMessages(MessageFilter filter, int max) { | 	public List<BulletinBoardMessage> readMessages(MessageFilterList filterList, int max) { | ||||||
| 		// TODO Auto-generated method stub
 | 		// TODO Auto-generated method stub
 | ||||||
| 		return null; | 		return null; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	public void testPrint(){ | 	public String testPrint(){ | ||||||
|  | 		 | ||||||
|  | 		String s = ""; | ||||||
| 		 | 		 | ||||||
| 		try { | 		try { | ||||||
| 	     | 	     | ||||||
|  | @ -128,20 +148,30 @@ public abstract class BulletinBoardSQLServer implements BulletinBoardServer{ | ||||||
| 			ResultSet rs = statement.executeQuery("select * from MsgTable"); | 			ResultSet rs = statement.executeQuery("select * from MsgTable"); | ||||||
| 			while (rs.next()) { | 			while (rs.next()) { | ||||||
| 				// read the result set
 | 				// read the result set
 | ||||||
| 				System.out.println("data = " + rs.getString("Data")); | 				s += "entry = " + rs.getInt("EntryNum") + " \n"; | ||||||
| 				System.out.println("id = " + rs.getInt("Id")); | 				s += "id = " + new String(rs.getBytes("Id")) + " \n"; | ||||||
|  | 				s += "data = " + new String(rs.getBytes("Data")) + " \n"; | ||||||
|  | 				s += "signature = " + new String(rs.getBytes("Signature")) + "\t\n<BR>"; | ||||||
|  | 			} | ||||||
|  | 			 | ||||||
|  | 			rs = statement.executeQuery("select * from TagTable"); | ||||||
|  | 			while (rs.next()) { | ||||||
|  | 				// read the result set
 | ||||||
|  | 				s += "Tag = " + rs.getString("Tag") + " \n"; | ||||||
|  | 				s += "TagId = " + rs.getInt("Id") + "\t\n<BR>"; | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			rs = statement.executeQuery("select * from MsgTagTable"); | 			rs = statement.executeQuery("select * from MsgTagTable"); | ||||||
| 			while (rs.next()) { | 			while (rs.next()) { | ||||||
| 				// read the result set
 | 				// read the result set
 | ||||||
| 				System.out.println("MsgId = " + rs.getInt("MsgId")); | 				s += "MsgId = " + new String(rs.getBytes("MsgId")) + " \n"; | ||||||
| 				System.out.println("TagId = " + rs.getString("TagId")); | 				s += "TagId = " + rs.getInt("TagId") + "\t\n<BR>"; | ||||||
| 			} | 			} | ||||||
| 		} catch(SQLException e){ | 		} catch(SQLException e){ | ||||||
| 			System.out.println("Error reading from DB"); | 			s += "Error reading from DB"; | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
|  | 		return s; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ import java.sql.SQLException; | ||||||
| import java.sql.Statement; | import java.sql.Statement; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| 
 | 
 | ||||||
| import meerkat.bulletinboard.MessageFilter; | import meerkat.protobuf.Voting.MessageFilterList; | ||||||
| import meerkat.bulletinboard.sqlserver.BulletinBoardSQLServer; | import meerkat.bulletinboard.sqlserver.BulletinBoardSQLServer; | ||||||
| import meerkat.comm.CommunicationException; | import meerkat.comm.CommunicationException; | ||||||
| import meerkat.protobuf.Voting.BulletinBoardMessage; | import meerkat.protobuf.Voting.BulletinBoardMessage; | ||||||
|  | @ -27,13 +27,13 @@ public class SQLiteBulletinBoardServer extends BulletinBoardSQLServer { | ||||||
| 		 | 		 | ||||||
| 		try{ | 		try{ | ||||||
| 			 | 			 | ||||||
| 			connection = DriverManager.getConnection("jdbc:sqlite:./local-instances/meerkat.db"); | 			connection = DriverManager.getConnection("jdbc:sqlite:local-instances/meerkat.db"); | ||||||
| 			Statement statement = connection.createStatement(); | 			Statement statement = connection.createStatement(); | ||||||
| 			statement.setQueryTimeout(TIMEOUT); | 			statement.setQueryTimeout(TIMEOUT); | ||||||
| 	 | 	 | ||||||
| 			statement.executeUpdate("CREATE TABLE IF NOT EXISTS MsgTable (EntryNum INTEGER, Id varbinary(1000) UNIQUE, Data varbinary(1000), Signature varbinary(1000), PRIMARY KEY (EntryNum ASC))"); | 			statement.executeUpdate("CREATE TABLE IF NOT EXISTS MsgTable (EntryNum INTEGER PRIMARY KEY, Id BLOB UNIQUE, Data BLOB, Signature BLOB)"); | ||||||
| 			statement.executeUpdate("CREATE TABLE IF NOT EXISTS TagTable (Id int, Tag v	archar(50) UNIQUE, PRIMARY KEY (Id ASC))"); | 			statement.executeUpdate("CREATE TABLE IF NOT EXISTS TagTable (Id INTEGER PRIMARY KEY, Tag varchar(50) UNIQUE)"); | ||||||
| 			statement.executeUpdate("CREATE TABLE IF NOT EXISTS MsgTagTable (MsgId varbinary(1000), TagId int, FOREIGN KEY (MsgId) REFERENCES MsgTable(Id), FOREIGN KEY (TagId) REFERENCES TagTable(Id))"); | 			statement.executeUpdate("CREATE TABLE IF NOT EXISTS MsgTagTable (MsgId BLOB, TagId INTEGER, FOREIGN KEY (MsgId) REFERENCES MsgTable(Id), FOREIGN KEY (TagId) REFERENCES TagTable(Id))"); | ||||||
| 			 | 			 | ||||||
| 			statement.close(); | 			statement.close(); | ||||||
| 			 | 			 | ||||||
|  | @ -41,7 +41,7 @@ public class SQLiteBulletinBoardServer extends BulletinBoardSQLServer { | ||||||
| 				 | 				 | ||||||
| 		} catch (SQLException e) { | 		} catch (SQLException e) { | ||||||
| 			 | 			 | ||||||
| 			throw new CommunicationException("Couldn't form a connection with the database"); | 			throw new CommunicationException("Couldn't form a connection with the database" + e.getMessage()); | ||||||
| 			 | 			 | ||||||
| 		} | 		} | ||||||
| 				 | 				 | ||||||
|  | @ -49,7 +49,7 @@ public class SQLiteBulletinBoardServer extends BulletinBoardSQLServer { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	public List<BulletinBoardMessage> readMessages(MessageFilter filter, int max) { | 	public List<BulletinBoardMessage> readMessages(MessageFilterList filterList, int max) { | ||||||
| 		// TODO Auto-generated method stub
 | 		// TODO Auto-generated method stub
 | ||||||
| 		return null; | 		return null; | ||||||
| 	} | 	} | ||||||
|  | @ -68,7 +68,7 @@ public class SQLiteBulletinBoardServer extends BulletinBoardSQLServer { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	protected void insertNewTags(String[] tags) throws CommunicationException { | 	protected void insertNewTags(String[] tags) throws SQLException { | ||||||
| 		 | 		 | ||||||
| 		PreparedStatement pstmt; | 		PreparedStatement pstmt; | ||||||
| 		String sql; | 		String sql; | ||||||
|  | @ -87,7 +87,7 @@ public class SQLiteBulletinBoardServer extends BulletinBoardSQLServer { | ||||||
| 		    pstmt.close(); | 		    pstmt.close(); | ||||||
| 		     | 		     | ||||||
| 		} catch (SQLException e){ | 		} catch (SQLException e){ | ||||||
| 			throw new CommunicationException("Error adding new tags to table"); | 			throw new SQLException("Error adding new tags to table: " + e.getMessage()); | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -1,22 +1,54 @@ | ||||||
| package meerkat.bulletinboard.webapp; | package meerkat.bulletinboard.webapp; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | import com.google.protobuf.ByteString; | ||||||
| import com.google.protobuf.Message; | import com.google.protobuf.Message; | ||||||
| import meerkat.bulletinboard.service.HelloProtoBuf; | import meerkat.bulletinboard.service.HelloProtoBuf; | ||||||
|  | import meerkat.protobuf.Crypto.Signature; | ||||||
|  | import meerkat.protobuf.Crypto.SignatureType; | ||||||
|  | import meerkat.protobuf.Voting.BulletinBoardMessage; | ||||||
|  | import meerkat.protobuf.Voting.UnsignedBulletinBoardMessage; | ||||||
| import meerkat.rest.Constants; | import meerkat.rest.Constants; | ||||||
| import service.HelloWorldService; |  | ||||||
| 
 | 
 | ||||||
|  | import javax.annotation.PostConstruct; | ||||||
| import javax.ws.rs.GET; | import javax.ws.rs.GET; | ||||||
| import javax.ws.rs.Path; | import javax.ws.rs.Path; | ||||||
| import javax.ws.rs.Produces; | import javax.ws.rs.Produces; | ||||||
| 
 | 
 | ||||||
| @Path("/proto") | @Path("/proto") | ||||||
| public class HelloProtoWebApp { | public class HelloProtoWebApp { | ||||||
|     private static HelloProtoBuf helloProtoBuf = new HelloProtoBuf(); |     private HelloProtoBuf helloProtoBuf; | ||||||
|  |      | ||||||
|  |     @PostConstruct | ||||||
|  |     public void init(){ | ||||||
|  |     	//helloProtoBuf = new HelloProtoBuf();
 | ||||||
|  |     } | ||||||
|      |      | ||||||
|     @GET |     @GET | ||||||
|     @Produces(Constants.MEDIATYPE_PROTOBUF) |     @Produces(Constants.MEDIATYPE_PROTOBUF) | ||||||
|     public Message hello() { |     public Message hello() { | ||||||
|         return helloProtoBuf.sayHello(); |     	byte[] b1 = {(byte) 1, (byte)2, (byte) 3, (byte) 4}; | ||||||
|  | 		byte[] b2 = {(byte) 11, (byte)12, (byte) 13, (byte) 14}; | ||||||
|  |     	 | ||||||
|  |     	Message msg; | ||||||
|  |     	 | ||||||
|  |     	if (helloProtoBuf != null){ | ||||||
|  |     		 msg = helloProtoBuf.sayHello(); | ||||||
|  |     	} | ||||||
|  |     	else{ | ||||||
|  |     		msg = BulletinBoardMessage.newBuilder() | ||||||
|  | 					.setMsg(UnsignedBulletinBoardMessage.newBuilder() | ||||||
|  | 							.addTags("signature") | ||||||
|  | 							.addTags("Trustee") | ||||||
|  | 							.setData(ByteString.copyFrom(b1)) | ||||||
|  | 							.build()) | ||||||
|  | 					.setSig(Signature.newBuilder() | ||||||
|  | 							.setType(SignatureType.DSA) | ||||||
|  | 							.setData(ByteString.copyFrom(b2)) | ||||||
|  | 							.build()) | ||||||
|  | 					.build(); | ||||||
|  |     	} | ||||||
|  |     	 | ||||||
|  |         return msg; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,57 @@ | ||||||
|  | package meerkat.bulletinboard.webapp; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import javax.ws.rs.GET; | ||||||
|  | import javax.ws.rs.Path; | ||||||
|  | import javax.ws.rs.core.Response; | ||||||
|  | import javax.ws.rs.core.Response.Status; | ||||||
|  | 
 | ||||||
|  | import com.google.protobuf.ByteString; | ||||||
|  | 
 | ||||||
|  | import meerkat.bulletinboard.sqlserver.SQLiteBulletinBoardServer; | ||||||
|  | import meerkat.comm.CommunicationException; | ||||||
|  | import meerkat.protobuf.Crypto.*; | ||||||
|  | import meerkat.protobuf.Voting.*; | ||||||
|  | 
 | ||||||
|  | @Path("/test") | ||||||
|  | public class SQLiteServerTest { | ||||||
|  | 	 | ||||||
|  | 	@GET | ||||||
|  | 	public Response main(){ | ||||||
|  | 		byte[] b1 = {(byte) 1, (byte)2, (byte) 3, (byte) 4}; | ||||||
|  | 		byte[] b2 = {(byte) 11, (byte)12, (byte) 13, (byte) 14}; | ||||||
|  | 		 | ||||||
|  | 		Response response; | ||||||
|  | 		 | ||||||
|  | 		BulletinBoardMessage msg; | ||||||
|  | 		try{ | ||||||
|  | 			msg = BulletinBoardMessage.newBuilder() | ||||||
|  | 					.setMsg(UnsignedBulletinBoardMessage.newBuilder() | ||||||
|  | 							.addTags("Signature") | ||||||
|  | 							.addTags("Trustee") | ||||||
|  | 							.setData(ByteString.copyFrom(b1)) | ||||||
|  | 							.build()) | ||||||
|  | 					.setSig(Signature.newBuilder() | ||||||
|  | 							.setType(SignatureType.DSA) | ||||||
|  | 							.setData(ByteString.copyFrom(b2)) | ||||||
|  | 							.build()) | ||||||
|  | 					.build(); | ||||||
|  | 			 | ||||||
|  | 			SQLiteBulletinBoardServer bbs = new SQLiteBulletinBoardServer(); | ||||||
|  | 		 | ||||||
|  | 		 | ||||||
|  | 			bbs.init(); | ||||||
|  | 			 | ||||||
|  | 			bbs.postMessage(msg); | ||||||
|  | 			response = Response.status(Status.OK).entity(bbs.testPrint()).build(); | ||||||
|  | 			 | ||||||
|  | 			bbs.close(); | ||||||
|  | 			 | ||||||
|  | 		} catch(CommunicationException e){ | ||||||
|  | 			response = Response.status(Status.OK).entity(e.getMessage()).build();; | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		return response; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | } | ||||||
|  | @ -8,7 +8,7 @@ import org.junit.Test; | ||||||
| public class HelloIntegrationTest { | public class HelloIntegrationTest { | ||||||
| 
 | 
 | ||||||
|     private static String PROP_GETTY_URL = "gretty.httpBaseURI"; |     private static String PROP_GETTY_URL = "gretty.httpBaseURI"; | ||||||
|     private static String BASE_URL =  System.getProperty(PROP_GETTY_URL); |     private static String BASE_URL = System.getProperty(PROP_GETTY_URL); | ||||||
|     private static String HELLO_URL = BASE_URL + "/hello"; |     private static String HELLO_URL = BASE_URL + "/hello"; | ||||||
| 
 | 
 | ||||||
|     @Test |     @Test | ||||||
|  |  | ||||||
|  | @ -1,41 +0,0 @@ | ||||||
| package meerkat.bulletinboard; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import com.google.protobuf.ByteString; |  | ||||||
| 
 |  | ||||||
| import meerkat.bulletinboard.sqlserver.SQLiteBulletinBoardServer; |  | ||||||
| import meerkat.comm.CommunicationException; |  | ||||||
| import meerkat.protobuf.Crypto.*; |  | ||||||
| import meerkat.protobuf.Voting.*; |  | ||||||
| 
 |  | ||||||
| public class SQLiteIntegrationTest { |  | ||||||
| 	public static void main(){ |  | ||||||
| 		byte[] b1 = {(byte) 1, (byte)2, (byte) 3, (byte) 4}; |  | ||||||
| 		byte[] b2 = {(byte) 11, (byte)12, (byte) 13, (byte) 14}; |  | ||||||
| 		 |  | ||||||
| 		BulletinBoardMessage msg = BulletinBoardMessage.newBuilder() |  | ||||||
| 									.setMsg(UnsignedBulletinBoardMessage.newBuilder() |  | ||||||
| 											.setTags(0, "signature") |  | ||||||
| 											.setTags(1, "Trustee") |  | ||||||
| 											.setData(ByteString.copyFrom(b1)) |  | ||||||
| 											.build()) |  | ||||||
| 									.setSig(Signature.newBuilder() |  | ||||||
| 											.setType(SignatureType.DSA) |  | ||||||
| 											.setData(ByteString.copyFrom(b2)) |  | ||||||
| 											.build()) |  | ||||||
| 									.build(); |  | ||||||
| 		 |  | ||||||
| 		SQLiteBulletinBoardServer bbs = new SQLiteBulletinBoardServer(); |  | ||||||
| 		 |  | ||||||
| 		try{ |  | ||||||
| 			bbs.init(); |  | ||||||
| 			 |  | ||||||
| 			bbs.postMessage(msg); |  | ||||||
| 			bbs.testPrint(); |  | ||||||
| 			 |  | ||||||
| 			bbs.close(); |  | ||||||
| 		} catch(CommunicationException e){ |  | ||||||
| 			System.out.println(e.getMessage()); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  | @ -4,6 +4,7 @@ import java.util.List; | ||||||
| 
 | 
 | ||||||
| import meerkat.comm.CommunicationException; | import meerkat.comm.CommunicationException; | ||||||
| import meerkat.protobuf.Voting.BulletinBoardMessage; | import meerkat.protobuf.Voting.BulletinBoardMessage; | ||||||
|  | import meerkat.protobuf.Voting.MessageFilterList; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Created by Arbel on 07/11/15. |  * Created by Arbel on 07/11/15. | ||||||
|  | @ -35,7 +36,7 @@ public interface BulletinBoardServer{ | ||||||
| 	  * @param max maximum number of messages to return (0=no limit) | 	  * @param max maximum number of messages to return (0=no limit) | ||||||
| 	  * @return | 	  * @return | ||||||
| 	  */ | 	  */ | ||||||
| 	 List<BulletinBoardMessage> readMessages(MessageFilter filter, int max); | 	 List<BulletinBoardMessage> readMessages(MessageFilterList filterList, int max); | ||||||
| 	  | 	  | ||||||
| 	 /** | 	 /** | ||||||
| 	 * This method closes the connection to the DB. | 	 * This method closes the connection to the DB. | ||||||
|  |  | ||||||
|  | @ -1,27 +0,0 @@ | ||||||
| package meerkat.bulletinboard; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Created by talm on 25/10/15. |  | ||||||
|  * |  | ||||||
|  * A filter for messages (run on the BB server side). |  | ||||||
|  * |  | ||||||
|  * TODO: define a limited filter language (e.g., by tag, by signer, by time, etc.) that can |  | ||||||
|  * be efficiently run on the BB database. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| public abstract class MessageFilter { |  | ||||||
| 	public enum FilterType{ |  | ||||||
| 		ENTRY_NUM, |  | ||||||
| 		ID, |  | ||||||
| 		TAG, |  | ||||||
| 		SIGNER, |  | ||||||
| 		TIME |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	FilterType filterType; |  | ||||||
| 	 |  | ||||||
| 	public MessageFilter(FilterType filterType){ |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
|  | @ -28,6 +28,30 @@ message BulletinBoardMessage { | ||||||
|     meerkat.Signature sig = 2; |     meerkat.Signature sig = 2; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | enum FilterType { | ||||||
|  |     ID = 0;				// Match exact message ID | ||||||
|  |     EXACT_ENTRY = 1;	// Match exact entry number in database (chronological) | ||||||
|  |     MAX_ENTRY = 2;		// Find all entries in database up to specified entry number (chronological) | ||||||
|  |     SIGNATURE = 3;		// Find all entries in database that correspond to specific signature (signer) | ||||||
|  |     TAG = 4;			// Find all entries in database that have a specific tag | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message MessageFilter { | ||||||
|  | 	 | ||||||
|  | 	FilterType type = 1; | ||||||
|  | 	 | ||||||
|  | 	// Concrete data input to filter | ||||||
|  | 	bytes filter = 2; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message MessageFilterList { | ||||||
|  | 	 | ||||||
|  | 	// Combination of filters. | ||||||
|  | 	// To be implemented using intersection ("AND") operations. | ||||||
|  | 	repeated MessageFilter filters = 1; | ||||||
|  | 	 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // A ballot question. This is an opaque | // A ballot question. This is an opaque | ||||||
| // data type that is parsed by the UI to display | // data type that is parsed by the UI to display | ||||||
| // the question. | // the question. | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue