List of usage examples for com.amazonaws.services.dynamodbv2.document Item getList
public <T> List<T> getList(String attrName)
T's.; or null if the attribute either doesn't exist or the attribute value is null. From source file:com.achow101.bittipaddr.server.addressServiceImpl.java
License:Open Source License
@Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get the id String requestURI = request.getRequestURI(); String id = requestURI.substring(requestURI.lastIndexOf("/") + 1); // Setup the aws dynamo db client AmazonDynamoDBClient client = new AmazonDynamoDBClient(); DynamoDB dynamoDB = new DynamoDB(client); // Setup blockcypher API BlockCypherContext blockCypherContext = new BlockCypherContext("v1", "btc", "main", "4d3109a5c07f426da9ccc2943da39244"); // Lookup ID and get current address, increment index String address = ""; Table table = dynamoDB.getTable("Bittipaddrs"); int currAddrInx = 0; try {/*from w ww. j av a2s. co m*/ Item item = table.getItem("ID", id); currAddrInx = item.getInt("AddrIndex"); int origIndx = currAddrInx; List<String> addresses = item.getList("Addresses"); if (currAddrInx < addresses.size()) { address = addresses.get(currAddrInx); while (blockCypherContext.getAddressService().getAddress(address).getnTx() > 0 && currAddrInx < addresses.size()) { // Increment index and get next address currAddrInx++; address = addresses.get(currAddrInx); // Wait one third of a second to prevent rate limiting Thread.sleep(334); } } else { address = addresses.get(addresses.size() - 1); } // Update index if DB if it has changed if (currAddrInx != origIndx) { UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("ID", id) .withUpdateExpression("set AddrIndex=:i") .withValueMap(new ValueMap().withNumber(":i", currAddrInx)); table.updateItem(updateItemSpec); } } // Deal with rate limiting from BlockCypher catch (BlockCypherException e) { UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("ID", id) .withUpdateExpression("set AddrIndex=:i") .withValueMap(new ValueMap().withNumber(":i", currAddrInx)); table.updateItem(updateItemSpec); } catch (Exception e) { System.out.println("Error in getting item."); } // Send them a redirect to the bitcoin uri if redirect is set if (request.getParameter("redirect") != null) { response.sendRedirect("bitcoin:" + address); } else { // Set response content type response.setContentType("text/html"); // Actual logic goes here. PrintWriter out = response.getWriter(); out.println("<a href=bitcoin:" + address + ">" + address + "</a>"); } }
From source file:com.achow101.bittipaddr.server.bittipaddrServiceImpl.java
License:Open Source License
public String addAddresses(AddrReq req) { // Setup the aws dynamo db client AmazonDynamoDBClient client = new AmazonDynamoDBClient(); DynamoDB dynamoDB = new DynamoDB(client); Table table = dynamoDB.getTable("Bittipaddrs"); // Check that the request is for editing an existing one if (!req.getId().equals("NEW")) { try {/*from w w w . j ava2 s.c o m*/ Item item = table.getItem("ID", req.getId()); // Check the password if (getHash(req.getPassword()).equals(item.getString("passhash"))) { // If the req has been edited, update DB if (req.isEdited()) { // Recalculate addresses if xpub is set if (!req.getXpub().equals("NONE")) { try { // Check Xpub DeterministicKey xpub = DeterministicKey.deserializeB58(req.getXpub(), params); DeterministicKey external = HDKeyDerivation.deriveChildKey(xpub, 0); // Derive 1000 addresses and add to req String[] addrs = new String[1000]; for (int i = 0; i < 1000; i++) { addrs[i] = HDKeyDerivation.deriveChildKey(external, i).toAddress(params) .toBase58(); } req.setAddresses(addrs); } catch (Exception e) { return "<p style=\"color:red;\">Invalid xpub" + req.getXpub() + "</p>"; } } if (req.getAddresses()[0].isEmpty()) return "<p style=\"color:red;\">Must have at least one address</p>"; UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("ID", req.getId()) .withUpdateExpression("set AddrIndex=:i, Addresses=:a, bip32xpub=:x") .withValueMap(new ValueMap().withNumber(":i", 0) .withList(":a", Arrays.asList(req.getAddresses())) .withString(":x", req.getXpub())); table.updateItem(updateItemSpec); return req.getHtml(); } String[] addresses = new String[item.getList("Addresses").size()]; item.getList("Addresses").toArray(addresses); req.setAddresses(addresses); req.setXpub(item.getString("bip32xpub")); if (req.isEditable()) return req.getPlain(); else return req.getHtml(); } else return "<p style=\"color:red;\">Incorrect password</p>"; } catch (Exception e) { return "<p style=\"color:red;\">Could not find unit</p>"; } } // Check validity of addresses else if (req.getXpub().equals("NONE") && req.getAddresses().length != 0) { for (int i = 0; i < req.getAddresses().length; i++) { try { Address addr = Address.fromBase58(params, req.getAddresses()[i]); } catch (AddressFormatException e) { return "<p style=\"color:red;\">Invalid address" + req.getAddresses()[i] + "</p>"; } } } // Check validity of xpub else if (!req.getXpub().equals("NONE") && req.getAddresses().length == 0) { try { // Check Xpub DeterministicKey xpub = DeterministicKey.deserializeB58(req.getXpub(), params); DeterministicKey external = HDKeyDerivation.deriveChildKey(xpub, 0); // Derive 1000 addresses and add to req String[] addrs = new String[1000]; for (int i = 0; i < 1000; i++) { addrs[i] = HDKeyDerivation.deriveChildKey(external, i).toAddress(params).toBase58(); } req.setAddresses(addrs); } catch (Exception e) { return "<p style=\"color:red;\">Invalid xpub" + req.getXpub() + "</p>"; } } // Set the request ID and unique password req.setId(new BigInteger(40, random).toString(32)); req.setPassword(new BigInteger(256, random).toString(32)); // Add request to DynamoDB Item item = null; try { item = new Item().withPrimaryKey("ID", req.getId()).withInt("AddrIndex", 0) .withList("Addresses", Arrays.asList(req.getAddresses())).withString("bip32xpub", req.getXpub()) .withString("passhash", getHash(req.getPassword())); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } table.putItem(item); return req.getHtml(); }
From source file:com.exorath.service.treasurehunt.dynamodb.DynamoDBService.java
License:Apache License
@Override public GetResult getTreasures(UUID playerId) { GetItemSpec spec = new GetItemSpec().withPrimaryKey(PRIM_KEY, playerId.toString()); Item item = table.getItem(spec); logger.info("Retrieved the following treasures for player " + playerId + ": " + item); if (item == null || !item.hasAttribute(TREASURES_FIELD)) { return new GetResult(new Treasure[0]); } else {/*from www .j av a 2s.c o m*/ List list = item.getList(TREASURES_FIELD); Treasure[] treasures = new Treasure[list.size()]; int i = 0; for (Object treasure : list) { treasures[i++] = new Treasure(treasure.toString()); } return new GetResult(treasures); } }
From source file:com.github.fge.jsonpatch.JsonPatchToXSpecReplace.java
License:LGPL
@Test public void test_replace_singlePath_stringSet() throws Exception { // setup/* w ww. j av a 2 s . c om*/ table.putItem(Item.fromMap( ImmutableMap.<String, Object>builder().put(KEY_ATTRIBUTE_NAME, VALUE).put("a", 1L).build())); String patchExpression = "[ { \"op\": \"replace\", \"path\": \"/a\", \"value\": [\"foo\",\"bar\"] } ]"; JsonNode jsonNode = JsonLoader.fromString(patchExpression); JsonPatch jsonPatch = JsonPatch.fromJson(jsonNode); // exercise ExpressionSpecBuilder builder = jsonPatch.get(); UpdateItemExpressionSpec spec = builder.buildForUpdate(); table.updateItem(KEY_ATTRIBUTE_NAME, VALUE, spec); // verify Item item = table.getItem(PK); Assert.assertTrue(item.hasAttribute("key")); Assert.assertEquals(item.getString("key"), "keyValue"); Assert.assertTrue(item.hasAttribute("a")); Assert.assertTrue(item.getList("a").contains("foo")); Assert.assertTrue(item.getList("a").contains("bar")); }
From source file:com.github.fge.jsonpatch.JsonPatchToXSpecReplace.java
License:LGPL
@Test public void test_replace_replaceExisting_singlePath_stringSet() throws Exception { // setup// w ww . j a va 2s. c o m table.putItem(Item.fromMap(ImmutableMap.<String, Object>builder().put(KEY_ATTRIBUTE_NAME, VALUE) .put("a", ImmutableSet.of("foo", "bar")).build())); String patchExpression = "[ { \"op\": \"replace\", \"path\": \"/a\", \"value\": [\"baz\",\"qux\"] } ]"; JsonNode jsonNode = JsonLoader.fromString(patchExpression); JsonPatch jsonPatch = JsonPatch.fromJson(jsonNode); // exercise ExpressionSpecBuilder builder = jsonPatch.get(); UpdateItemExpressionSpec spec = builder.buildForUpdate(); table.updateItem(KEY_ATTRIBUTE_NAME, VALUE, spec); // verify Item item = table.getItem(PK); Assert.assertTrue(item.hasAttribute("key")); Assert.assertEquals(item.getString("key"), "keyValue"); Assert.assertTrue(item.hasAttribute("a")); Assert.assertEquals(item.getList("a").size(), 2); Assert.assertTrue(item.getList("a").contains("baz")); Assert.assertTrue(item.getList("a").contains("qux")); }