NodeList children = null;
String temp = null;
String element = null;
int count = 0;
S3PutObjectRequest request = new S3PutObjectRequest();
// [A] Pull out the simple nodes first
NodeList part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Bucket");
if (null != part) {
if (null != (contents = part.item(0)))
request.setBucketName(contents.getFirstChild().getNodeValue());
}
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Key");
if (null != part) {
if (null != (contents = part.item(0)))
request.setKey(contents.getFirstChild().getNodeValue());
}
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "ContentLength");
if (null != part) {
if (null != (contents = part.item(0))) {
String length = contents.getFirstChild().getNodeValue();
if (null != length)
request.setContentLength(Long.decode(length));
}
}
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "AWSAccessKeyId");
if (null != part) {
if (null != (contents = part.item(0)))
request.setAccessKey(contents.getFirstChild().getNodeValue());
}
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Signature");
if (null != part) {
if (null != (contents = part.item(0)))
request.setSignature(contents.getFirstChild().getNodeValue());
}
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Timestamp");
if (null != part) {
if (null != (contents = part.item(0)))
request.setRawTimestamp(contents.getFirstChild().getNodeValue());
}
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "StorageClass");
if (null != part) {
if (null != (contents = part.item(0)))
request.setStorageClass(contents.getFirstChild().getNodeValue());
}
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Credential");
if (null != part) {
if (null != (contents = part.item(0)))
request.setCredential(contents.getFirstChild().getNodeValue());
}
// [B] Get a list of all 'Metadata' elements
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Metadata");
if (null != part) {
count = part.getLength();
S3MetaDataEntry[] metaEntry = new S3MetaDataEntry[count];
for (int i = 0; i < count; i++) {
parent = part.item(i);
metaEntry[i] = new S3MetaDataEntry();
// -> get a list of all the children elements of the 'Metadata' parent element
if (null != (children = parent.getChildNodes())) {
int numChildren = children.getLength();
for (int j = 0; j < numChildren; j++) {
contents = children.item(j);
element = contents.getNodeName().trim();
if (element.endsWith("Name")) {
temp = contents.getFirstChild().getNodeValue();
if (null != temp)
metaEntry[i].setName(temp);
} else if (element.endsWith("Value")) {
temp = contents.getFirstChild().getNodeValue();
if (null != temp)
metaEntry[i].setValue(temp);
}
}
}
}
request.setMetaEntries(metaEntry);
}
// [C] Get a list of all Grant elements in an AccessControlList
part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Grant");
if (null != part) {
S3AccessControlList engineAcl = new S3AccessControlList();
count = part.getLength();
for (int i = 0; i < count; i++) {
parent = part.item(i);
S3Grant engineGrant = new S3Grant();
// -> get a list of all the children elements of the 'Grant' parent element
if (null != (children = parent.getChildNodes())) {
int numChildren = children.getLength();
for (int j = 0; j < numChildren; j++) {
contents = children.item(j);
element = contents.getNodeName().trim();
if (element.endsWith("Grantee")) {
NamedNodeMap attbs = contents.getAttributes();
if (null != attbs) {
Node type = attbs.getNamedItemNS("http://www.w3.org/2001/XMLSchema-instance", "type");
if (null != type)
temp = type.getFirstChild().getNodeValue().trim();
else
temp = null;
if (null != temp && temp.equalsIgnoreCase("CanonicalUser")) {
engineGrant.setGrantee(SAcl.GRANTEE_USER);
engineGrant.setCanonicalUserID(getChildNodeValue(contents, "ID"));
} else
throw new UnsupportedOperationException("Missing http://www.w3.org/2001/XMLSchema-instance:type value");
}
} else if (element.endsWith("Permission")) {
temp = contents.getFirstChild().getNodeValue().trim();
if (temp.equalsIgnoreCase("READ"))
engineGrant.setPermission(SAcl.PERMISSION_READ);
else if (temp.equalsIgnoreCase("WRITE"))
engineGrant.setPermission(SAcl.PERMISSION_WRITE);
else if (temp.equalsIgnoreCase("READ_ACP"))
engineGrant.setPermission(SAcl.PERMISSION_READ_ACL);
else if (temp.equalsIgnoreCase("WRITE_ACP"))
engineGrant.setPermission(SAcl.PERMISSION_WRITE_ACL);
else if (temp.equalsIgnoreCase("FULL_CONTROL"))
engineGrant.setPermission(SAcl.PERMISSION_FULL);
else
throw new UnsupportedOperationException("Unsupported permission: " + temp);
}
}
engineAcl.addGrant(engineGrant);
}
}
request.setAcl(engineAcl);
}
return request;
}