Example usage for com.amazonaws.services.dynamodbv2.document Item getList

List of usage examples for com.amazonaws.services.dynamodbv2.document Item getList

Introduction

In this page you can find the example usage for com.amazonaws.services.dynamodbv2.document Item getList.

Prototype

public <T> List<T> getList(String attrName) 

Source Link

Document

Returns the value of the specified attribute in the current item as a set of T's.; or null if the attribute either doesn't exist or the attribute value is null.

Usage

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"));
}