Example usage for com.amazonaws.services.dynamodbv2.document.spec UpdateItemSpec UpdateItemSpec

List of usage examples for com.amazonaws.services.dynamodbv2.document.spec UpdateItemSpec UpdateItemSpec

Introduction

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

Prototype

public UpdateItemSpec() 

Source Link

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   ww w.j a  v a 2 s.com*/
        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   ww  w . ja  va  2s .  co  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.eho.dynamodb.DynamoDBConnection.java

public static UpdateItemOutcome update_resource(String resource) throws Exception {
    String id;/*from w w  w  .j  av a2s  .c om*/
    JSONObject json_resource = new JSONObject(resource);
    //does the resource have a primary key?
    if (json_resource.has(PRIMARY_KEY))//if it does not have a primary key, create one using uuid
        id = json_resource.getString(PRIMARY_KEY);
    else
        id = UUID.randomUUID().toString();

    DynamoDB dynamoDB = new DynamoDB(dynamoDBClient);
    Table table = dynamoDB.getTable(PATIENT_TABLE);

    //lets retreive based on the key. if key invalid (not assigned yet) nullis returned.
    Item retreived_item = table.getItem(PRIMARY_KEY, id);
    if (retreived_item == null)//if null instantiate it
    {
        retreived_item = new Item();
        retreived_item.withPrimaryKey(PRIMARY_KEY, id);
    }

    Integer new_version = retreived_item.getInt("version") + 1;
    retreived_item.withInt("version", new_version);
    String new_version_str = new_version.toString();

    UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey(PRIMARY_KEY, id)
            .withUpdateExpression("SET " + new_version_str + "= :newval")
            .withValueMap(new ValueMap().withString(":newval", resource)).withReturnValues(ReturnValue.ALL_NEW);

    return table.updateItem(updateItemSpec);
}

From source file:com.exorath.service.lastserver.dynamodb.DynamoDBService.java

License:Apache License

@Override
public PutResult setLastServer(UUID playerId, String gameId, String requestBody) {
    if (gameId == null) {
        return new PutResult("gameId can't be null.");
    }//from   w w  w  . ja  v  a  2 s . c  o  m

    Map<String, String> body;
    try {
        body = Gson.fromJson(requestBody, MapStringStringType);
    } catch (JsonSyntaxException ex) {
        return new PutResult(ex.getMessage());
    }

    UpdateItemSpec spec = new UpdateItemSpec().withPrimaryKey(PRIM_KEY, playerId.toString())
            .withAttributeUpdate(new AttributeUpdate(GAMEID_ATTR).put(gameId),
                    new AttributeUpdate(MAPID_ATTR).put(body.get(MAPID_ATTR)),
                    new AttributeUpdate(FLAVORID_ATTR).put(body.get(FLAVORID_ATTR)));
    try {
        UpdateItemOutcome outcome = table.updateItem(spec);
        logger.info("Successfully set last server data for player " + playerId + ": gameId(" + gameId
                + ") mapId(" + body.get(MAPID_ATTR) + ") flavorId(" + body.get(FLAVORID_ATTR) + ")");
        return new PutResult();
    } catch (ConditionalCheckFailedException ex) {
        logger.warn("Failed to set last server data for player" + playerId + ": gameId(" + gameId + ") mapId("
                + body.get(MAPID_ATTR) + ") flavorId(" + body.get(FLAVORID_ATTR) + ")\n:" + ex.getMessage());
        return new PutResult(ex.getMessage());
    }
}

From source file:com.exorath.service.lobbymsg.impl.DynamoDBService.java

License:Apache License

public static UpdateItemSpec getCheckMsgsMapExistsSpec() {
    return new UpdateItemSpec().withPrimaryKey(getPrimaryKey())
            .withUpdateExpression("SET " + MSGS_FIELD + " = if_not_exists(" + MSGS_FIELD + ", :empty)")
            .withValueMap(new ValueMap().withMap(":empty", new HashMap<>()));
}

From source file:com.exorath.service.lobbymsg.impl.DynamoDBService.java

License:Apache License

public static UpdateItemSpec getCheckMsgMapInMsgsMapExistsSpec(String gameId) {
    return new UpdateItemSpec()
            .withPrimaryKey(getPrimaryKey()).withUpdateExpression("SET " + MSGS_FIELD + "." + gameId
                    + " = if_not_exists(" + MSGS_FIELD + "." + gameId + ", :empty)")
            .withValueMap(new ValueMap().withMap(":empty", new HashMap<>()));
}

From source file:com.exorath.service.lobbymsg.impl.DynamoDBService.java

License:Apache License

public static UpdateItemSpec getUpdateItemSpec(String gameId, Message message) {
    String updateExpression;//from   ww  w .  j a  v  a 2  s  .c  o  m
    ValueMap valueMap = new ValueMap();
    if (message.getMsg() == null)
        updateExpression = "REMOVE " + MSGS_FIELD + "." + gameId;
    else {
        updateExpression = "SET " + MSGS_FIELD + "." + gameId + "=:msgMap";
        ValueMap msgMap = new ValueMap().withString(MSG_FIELD, message.getMsg());
        if (message.getFormat() != null)
            msgMap.withString(FORMAT_FIELD, message.getFormat());
        valueMap.withMap(":msgMap", msgMap);
    }

    if (valueMap.isEmpty())
        valueMap = null;
    System.out.println(updateExpression);
    return new UpdateItemSpec().withPrimaryKey(getPrimaryKey()).withUpdateExpression(updateExpression)
            .withValueMap(valueMap);
}

From source file:com.exorath.service.party.service.DynamoDatabaseProvider.java

License:Apache License

/**
 * Get an update item spec for the given party argument
 * This does not call the update, just returns an object that can be used to update the party
 *
 * @param party Generate the update spec based on this party
 * @return Update spec with all the information to update the party
 *//* w  w  w  . jav  a  2  s  . co m*/
private UpdateItemSpec getUpdateItemSpec(Party party) {
    UpdateItemSpec update = new UpdateItemSpec();
    update.withPrimaryKey(new KeyAttribute(PARTY_UUID, party.getPartyUuid()));
    //update.addAttributeUpdate(new AttributeUpdate(PARTY_UUID).put(party.getPartyUuid()));
    update.addAttributeUpdate(new AttributeUpdate(OWNER_UUID).put(party.getOwnerUuid()));
    update.addAttributeUpdate(new AttributeUpdate(SERVER_ID).put(party.getServerId()));
    update.addAttributeUpdate(new AttributeUpdate(MEMBERS).put(party.getMembers()));
    update.addAttributeUpdate(new AttributeUpdate(EXPIRE).put(party.getExpiry()));
    return update;
}

From source file:com.exorath.service.treasurehunt.dynamodb.DynamoDBService.java

License:Apache License

@Override
public PutResult setTreasure(UUID playerId, String treasureId) {
    UpdateItemSpec spec = new UpdateItemSpec().withPrimaryKey(PRIM_KEY, playerId.toString())
            .withAttributeUpdate(new AttributeUpdate(TREASURES_FIELD).addElements(treasureId))
            .withReturnValues(ReturnValue.UPDATED_OLD);
    try {//  w  w w. jav  a2  s  .c o  m
        UpdateItemOutcome outcome = table.updateItem(spec);
        if (!outcome.getUpdateItemResult().toString().contains(treasureId)) {
            logger.info("Successfully set treasure " + treasureId + " for player " + playerId);
            return new PutResult();
        } else {
            logger.warn(
                    "Attempted to set treasure " + treasureId + " for player " + playerId + " a second time");
            return new PutResult("Treasure " + treasureId + " already set for player " + playerId);
        }
    } catch (ConditionalCheckFailedException ex) {
        logger.warn(
                "Updated treasure " + treasureId + " for player " + playerId + " failed\n:" + ex.getMessage());
        return new PutResult(ex.getMessage());
    }
}

From source file:com.github.fge.jsonpatch.JsonPatchToXSpecReplace.java

License:LGPL

@Test
public void testReplaceSinglePathNumberExtant() throws Exception {
    // setup/*from   w  ww. j ava2 s.  c o m*/
    table.putItem(Item.fromMap(ImmutableMap.<String, Object>builder().put(KEY_ATTRIBUTE_NAME, VALUE)
            .put("a", "peekaboo").build()));
    String patchExpression = "[ { \"op\": \"replace\", \"path\": \"/a\", \"value\": 1 } ]";
    JsonNode jsonNode = JsonLoader.fromString(patchExpression);
    JsonPatch jsonPatch = JsonPatch.fromJson(jsonNode);
    // exercise
    ExpressionSpecBuilder builder = jsonPatch.get();
    UpdateItemExpressionSpec spec = builder.buildForUpdate();
    UpdateItemOutcome out = table.updateItem(new UpdateItemSpec().withPrimaryKey(KEY_ATTRIBUTE_NAME, VALUE)
            .withExpressionSpec(spec).withReturnValues(ReturnValue.ALL_OLD));

    Item oldItem = Item.fromMap(InternalUtils.toSimpleMapValue(out.getUpdateItemResult().getAttributes()));
    Assert.assertTrue(oldItem.hasAttribute("a"));
    Assert.assertEquals(oldItem.getString("a"), "peekaboo");
    // 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.getNumber("a").longValue(), 1L);
}