List of usage examples for com.amazonaws.services.simpledb.model ReplaceableAttribute ReplaceableAttribute
public ReplaceableAttribute()
From source file:com.amazon.aws.demo.anonymous.sdb.SimpleDB.java
License:Open Source License
public static void createItem(String domainName, String itemName) { List<ReplaceableAttribute> attributes = new ArrayList<ReplaceableAttribute>(1); attributes.add(new ReplaceableAttribute().withName("Name").withValue("Value")); getInstance().putAttributes(new PutAttributesRequest(domainName, itemName, attributes)); }
From source file:com.amazon.aws.demo.anonymous.sdb.SimpleDB.java
License:Open Source License
public static void createAttributeForItem(String domainName, String itemName, String attributeName, String attributeValue) {/*from www .j a v a 2s .c o m*/ List<ReplaceableAttribute> attributes = new ArrayList<ReplaceableAttribute>(1); attributes.add( new ReplaceableAttribute().withName(attributeName).withValue(attributeValue).withReplace(true)); getInstance().putAttributes(new PutAttributesRequest(domainName, itemName, attributes)); }
From source file:com.amazon.aws.demo.anonymous.sdb.SimpleDB.java
License:Open Source License
public static void updateAttributesForItem(String domainName, String itemName, HashMap<String, String> attributes) { List<ReplaceableAttribute> replaceableAttributes = new ArrayList<ReplaceableAttribute>(attributes.size()); for (String attributeName : attributes.keySet()) { replaceableAttributes.add(new ReplaceableAttribute().withName(attributeName) .withValue(attributes.get(attributeName)).withReplace(true)); }/*from w ww. j ava2s. c o m*/ getInstance().putAttributes(new PutAttributesRequest(domainName, itemName, replaceableAttributes)); }
From source file:com.zotoh.cloudapi.aws.SDB.java
License:Open Source License
private List<ReplaceableAttribute> toRAtts(boolean replace, KeyValuePair[] vals) { List<ReplaceableAttribute> lst = LT(); KeyValuePair kp;//from w ww. ja v a 2s . com if (vals != null) for (int i = 0; i < vals.length; ++i) { kp = vals[i]; lst.add(new ReplaceableAttribute().withValue(kp.getValue()).withName(kp.getKey()) .withReplace(replace)); } return lst; }
From source file:org.teiid.resource.adapter.simpledb.SimpleDBConnectionImpl.java
License:Open Source License
private void addAttribute(String name, Object value, List<ReplaceableAttribute> attributes) { if (value.getClass().isArray()) { String[] values = (String[]) value; for (int i = 0; i < values.length; i++) { addAttribute(name, values[i], attributes); }/*w w w .j ava 2 s . c o m*/ } else { ReplaceableAttribute attribute = new ReplaceableAttribute(); attribute.setName(name); attribute.setReplace(true); attribute.setValue((String) value); attributes.add(attribute); } }
From source file:org.teiid.resource.adpter.simpledb.SimpleDbAPIClass.java
License:Open Source License
private List<ReplaceableAttribute> createMultivaluedAttribute(Map.Entry<String, String> column) { List<ReplaceableAttribute> attributes = new ArrayList<ReplaceableAttribute>(); String trimmedAttributes = column.getValue().substring(1, column.getValue().length() - 1); Pattern p = Pattern.compile("[^\\\\];"); //$NON-NLS-1$ Matcher match = p.matcher(trimmedAttributes); int lastMatch = 0; while (match.find()) { ReplaceableAttribute attribute = new ReplaceableAttribute(); attribute.setName(column.getKey()); String value = trimmedAttributes.substring(lastMatch, match.start() + 1); attribute.setValue(value.replaceAll("\\;", ";")); //$NON-NLS-1$ //$NON-NLS-2$ lastMatch = match.end();/*from ww w . j a v a2 s .c o m*/ attribute.setReplace(false); attributes.add(attribute); } ReplaceableAttribute attribute = new ReplaceableAttribute(); attribute.setName(column.getKey()); String value = trimmedAttributes.substring(lastMatch, trimmedAttributes.length()); attribute.setValue(value.replaceAll("\\\\;", ";")); //$NON-NLS-1$ //$NON-NLS-2$ attribute.setReplace(false); attributes.add(attribute); return attributes; }
From source file:squash.booking.lambdas.core.BookingManager.java
License:Apache License
@Override public List<Booking> createBooking(Booking bookingToCreate, boolean isSquashServiceUserCall) throws Exception { if (!initialised) { throw new IllegalStateException("The booking manager has not been initialised"); }/*from www. j a v a2 s .co m*/ getLifecycleManager().throwIfOperationInvalidForCurrentLifecycleState(false, isSquashServiceUserCall); logger.log("About to create booking in database: " + bookingToCreate); // Get today's bookings (and version number), via consistent read: String itemName = bookingToCreate.getDate(); // We retry the creation of the booking if necessary if we get a // ConditionalCheckFailed exception, i.e. if someone else modifies // the database between us reading and writing it. return RetryHelper.DoWithRetries(() -> { ImmutablePair<Optional<Integer>, List<Booking>> versionedBookings = getVersionedBookings(itemName); // Check that the court(s) we're booking is/are currently free // Get individual booked courts as (court, slot) pairs Set<ImmutablePair<Integer, Integer>> bookedCourts = new HashSet<>(); versionedBookings.right.forEach((booking) -> { addBookingToSet(booking, bookedCourts); }); // Get courts we're trying to book as (court, slot) pairs Set<ImmutablePair<Integer, Integer>> courtsToBook = new HashSet<>(); addBookingToSet(bookingToCreate, courtsToBook); // Does the new booking clash with existing bookings? boolean bookingClashes = Boolean.valueOf(Sets.intersection(courtsToBook, bookedCourts).size() > 0); if (bookingClashes) { // Case of trying to book an already-booked slot - this // probably means either: // - more than one person was trying to book the slot at once, // or // - not all courts in our block booking are free logger.log( "Cannot book courts which are already booked, so throwing a 'Booking creation failed' exception"); throw new Exception("Booking creation failed"); } logger.log("Required courts are currently free - so proceeding to make booking"); // Do a conditional put - so we don't overwrite someone else's // booking String attributeName = getAttributeNameFromBooking(bookingToCreate); String attributeValue = bookingToCreate.getName(); logger.log("ItemName: " + itemName); logger.log("AttributeName: " + attributeName); logger.log("AttributeValue: " + attributeValue); ReplaceableAttribute bookingAttribute = new ReplaceableAttribute(); bookingAttribute.setName(attributeName); bookingAttribute.setValue(attributeValue); getOptimisticPersister().put(itemName, versionedBookings.left, bookingAttribute); logger.log("Created booking in database"); // Add the booking we've just made to the pre-existing ones. List<Booking> bookings = versionedBookings.right; bookings.add(bookingToCreate); return bookings; }, Exception.class, Optional.of("Database put failed - conditional check failed"), logger); }
From source file:squash.booking.lambdas.core.LifecycleManager.java
License:Apache License
@Override public void setLifecycleState(LifecycleState lifecycleState, Optional<String> newServiceUrl) throws Exception { if (!initialised) { throw new IllegalStateException("The lifecycle manager has not been initialised"); }/* ww w .j av a2 s . c o m*/ if (lifecycleState.equals(LifecycleState.RETIRED)) { String message = null; if (!newServiceUrl.isPresent() || !newServiceUrl.get().startsWith("http")) { if (!newServiceUrl.isPresent()) { message = "Throwing exception as url to new service has not been provided when setting lifecycle state to RETIRED"; } else if (!newServiceUrl.get().startsWith("http")) { // Insist on correct format for the forwarding url. message = "Throwing exception as url to new service when setting lifecycle state to RETIRED does not start with http"; } logger.log(message); throw new Exception( "Must provide valid url to new service when setting lifecycle state to RETIRED"); } } // Get attribute - so can set version correctly. We assume only one person // (i.e. the site admin) will ever be calling this at one time, but we // nevertheless supply the version - so we can use the optimistic persister. ImmutablePair<Optional<Integer>, Set<Attribute>> lifecycleStateItem = getOptimisticPersister() .get(lifecycleItemName); logger.log("About to set lifecycle state in database to: " + lifecycleState.name()); ReplaceableAttribute lifecycleAttribute = new ReplaceableAttribute(); lifecycleAttribute.setName("State"); lifecycleAttribute.setValue(lifecycleState.name()); lifecycleAttribute.setReplace(true); int newVersion = getOptimisticPersister().put(lifecycleItemName, lifecycleStateItem.left, lifecycleAttribute); logger.log("Updated lifecycle state in database to: " + lifecycleState.name()); if (newServiceUrl.isPresent()) { logger.log("About to set lifecycle state url in database to: " + newServiceUrl.get()); ReplaceableAttribute urlAttribute = new ReplaceableAttribute(); urlAttribute.setName("Url"); urlAttribute.setValue(newServiceUrl.get()); urlAttribute.setReplace(true); getOptimisticPersister().put(lifecycleItemName, Optional.of(newVersion), urlAttribute); logger.log("Updated lifecycle state url in database to: " + newServiceUrl.get()); } }
From source file:squash.booking.lambdas.core.OptimisticPersister.java
License:Apache License
@Override public int put(String itemName, Optional<Integer> version, ReplaceableAttribute attribute) throws Exception { if (!initialised) { throw new IllegalStateException("The optimistic persister has not been initialised"); }// w ww . j av a 2s . c o m logger.log("About to add attrbutes to simpledb item: " + itemName); AmazonSimpleDB client = getSimpleDBClient(); // Check the put will not take us over the maximum number of attributes: // N.B. if (replace == true) then this check could be over-eager, but not // worth refining it, since this effectively just alters the limit by one. ImmutablePair<Optional<Integer>, Set<Attribute>> versionedAttributes = get(itemName); if (versionedAttributes.left.isPresent()) { logger.log("Retrieved versioned attributes(Count: " + versionedAttributes.right.size() + ") have version number: " + versionedAttributes.left.get()); } else { // There should be no attributes in this case. logger.log("Retrieved versioned attributes(Count: " + versionedAttributes.right.size() + ") have no version number"); } Boolean tooManyAttributes = versionedAttributes.right.size() >= maxNumberOfAttributes; if (tooManyAttributes && !attribute.getValue().startsWith("Inactive")) { // We allow puts to inactivate attributes even when on the limit - // otherwise we could never delete when we're on the limit. logger.log("Cannot create attribute - the maximum number of attributes already exists (" + maxNumberOfAttributes + ") so throwing a 'Database put failed - too many attributes' exception"); throw new Exception("Database put failed - too many attributes"); } // Do a conditional put - so we don't overwrite someone else's attributes UpdateCondition updateCondition = new UpdateCondition(); updateCondition.setName(versionAttributeName); ReplaceableAttribute versionAttribute = new ReplaceableAttribute(); versionAttribute.setName(versionAttributeName); versionAttribute.setReplace(true); // Update will proceed unless the version number has changed if (version.isPresent()) { // A version number attribute exists - so it should be unchanged updateCondition.setValue(Integer.toString(version.get())); // Bump up our version number attribute versionAttribute.setValue(Integer.toString(version.get() + 1)); } else { // A version number attribute did not exist - so it still should not updateCondition.setExists(false); // Set initial value for our version number attribute versionAttribute.setValue("0"); } List<ReplaceableAttribute> replaceableAttributes = new ArrayList<>(); replaceableAttributes.add(versionAttribute); // Add the new attribute replaceableAttributes.add(attribute); PutAttributesRequest simpleDBPutRequest = new PutAttributesRequest(simpleDbDomainName, itemName, replaceableAttributes, updateCondition); try { client.putAttributes(simpleDBPutRequest); } catch (AmazonServiceException ase) { if (ase.getErrorCode().contains("ConditionalCheckFailed")) { // Someone else has mutated an attribute since we read them. This is // likely to be rare, and a retry should almost always succeed. However, // we leave it to clients of this class to retry the call if they wish, // as the new mutation may mean they no longer want to do the put. logger.log("Caught AmazonServiceException for ConditionalCheckFailed whilst creating" + " attribute(s) so throwing as 'Database put failed' instead"); throw new Exception("Database put failed - conditional check failed"); } throw ase; } logger.log("Created attribute(s) in simpledb"); return Integer.parseInt(versionAttribute.getValue()); }
From source file:squash.booking.lambdas.core.OptimisticPersister.java
License:Apache License
@Override public void delete(String itemName, Attribute attribute) throws Exception { if (!initialised) { throw new IllegalStateException("The optimistic persister has not been initialised"); }/*from w w w .j a v a 2s .c om*/ logger.log("About to delete attribute from simpledb item: " + itemName); AmazonSimpleDB client = getSimpleDBClient(); // We retry the delete if necessary if we get a // ConditionalCheckFailed exception, i.e. if someone else modifies the // database between us reading and writing it. RetryHelper.DoWithRetries(() -> { try { // Get existing attributes (and version number), via consistent // read: ImmutablePair<Optional<Integer>, Set<Attribute>> versionedAttributes = get(itemName); if (!versionedAttributes.left.isPresent()) { logger.log( "A version number attribute did not exist - this means no attributes exist, so we have nothing to delete."); return null; } if (!versionedAttributes.right.contains(attribute)) { logger.log("The attribute did not exist - so we have nothing to delete."); return null; } // Since it seems impossible to update the version number while // deleting an attribute, we first mark the attribute as inactive, // and then delete it. ReplaceableAttribute inactiveAttribute = new ReplaceableAttribute(); inactiveAttribute.setName(attribute.getName()); inactiveAttribute.setValue("Inactive" + attribute.getValue()); inactiveAttribute.setReplace(true); put(itemName, versionedAttributes.left, inactiveAttribute); // Now we can safely delete the attribute, as other readers will now // ignore it. UpdateCondition updateCondition = new UpdateCondition(); updateCondition.setName(inactiveAttribute.getName()); updateCondition.setValue(inactiveAttribute.getValue()); // Update will proceed unless the attribute no longer exists updateCondition.setExists(true); Attribute attributeToDelete = new Attribute(); attributeToDelete.setName(inactiveAttribute.getName()); attributeToDelete.setValue(inactiveAttribute.getValue()); List<Attribute> attributesToDelete = new ArrayList<>(); attributesToDelete.add(attributeToDelete); DeleteAttributesRequest simpleDBDeleteRequest = new DeleteAttributesRequest(simpleDbDomainName, itemName, attributesToDelete, updateCondition); client.deleteAttributes(simpleDBDeleteRequest); logger.log("Deleted attribute from simpledb"); return null; } catch (AmazonServiceException ase) { if (ase.getErrorCode().contains("AttributeDoesNotExist")) { // Case of trying to delete an attribute that no longer exists - // that's ok - it probably just means more than one person was // trying to delete the attribute at once. So swallow this // exception logger.log( "Caught AmazonServiceException for AttributeDoesNotExist whilst deleting attribute so" + " swallowing and continuing"); return null; } else { throw ase; } } }, Exception.class, Optional.of("Database put failed - conditional check failed"), logger); }