Add writeSimpleElement helper

pull/53/head
Andrew Gaul 2015-02-22 18:09:27 -08:00
rodzic 9a5d17fd62
commit ea1a42dcd8
1 zmienionych plików z 74 dodań i 189 usunięć

Wyświetl plik

@ -486,19 +486,13 @@ final class S3ProxyHandler extends AbstractHandler {
"http://www.w3.org/2001/XMLSchema-instance"); "http://www.w3.org/2001/XMLSchema-instance");
xml.writeAttribute("xsi:type", "CanonicalUser"); xml.writeAttribute("xsi:type", "CanonicalUser");
xml.writeStartElement("ID"); writeSimpleElement(xml, "ID", FAKE_OWNER_ID);
xml.writeCharacters(FAKE_OWNER_ID); writeSimpleElement(xml, "DisplayName",
xml.writeEndElement(); FAKE_OWNER_DISPLAY_NAME);
xml.writeStartElement("DisplayName");
xml.writeCharacters(FAKE_OWNER_DISPLAY_NAME);
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
xml.writeStartElement("Permission"); writeSimpleElement(xml, "Permission", "FULL_CONTROL");
xml.writeCharacters("FULL_CONTROL");
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
@ -510,16 +504,12 @@ final class S3ProxyHandler extends AbstractHandler {
"http://www.w3.org/2001/XMLSchema-instance"); "http://www.w3.org/2001/XMLSchema-instance");
xml.writeAttribute("xsi:type", "Group"); xml.writeAttribute("xsi:type", "Group");
xml.writeStartElement("URI"); writeSimpleElement(xml, "URI",
xml.writeCharacters(
"http://acs.amazonaws.com/groups/global/AllUsers"); "http://acs.amazonaws.com/groups/global/AllUsers");
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
xml.writeStartElement("Permission"); writeSimpleElement(xml, "Permission", "READ");
xml.writeCharacters("READ");
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
} }
@ -576,19 +566,13 @@ final class S3ProxyHandler extends AbstractHandler {
"http://www.w3.org/2001/XMLSchema-instance"); "http://www.w3.org/2001/XMLSchema-instance");
xml.writeAttribute("xsi:type", "CanonicalUser"); xml.writeAttribute("xsi:type", "CanonicalUser");
xml.writeStartElement("ID"); writeSimpleElement(xml, "ID", FAKE_OWNER_ID);
xml.writeCharacters(FAKE_OWNER_ID); writeSimpleElement(xml, "DisplayName",
xml.writeEndElement(); FAKE_OWNER_DISPLAY_NAME);
xml.writeStartElement("DisplayName");
xml.writeCharacters(FAKE_OWNER_DISPLAY_NAME);
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
xml.writeStartElement("Permission"); writeSimpleElement(xml, "Permission", "FULL_CONTROL");
xml.writeCharacters("FULL_CONTROL");
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
@ -600,16 +584,12 @@ final class S3ProxyHandler extends AbstractHandler {
"http://www.w3.org/2001/XMLSchema-instance"); "http://www.w3.org/2001/XMLSchema-instance");
xml.writeAttribute("xsi:type", "Group"); xml.writeAttribute("xsi:type", "Group");
xml.writeStartElement("URI"); writeSimpleElement(xml, "URI",
xml.writeCharacters(
"http://acs.amazonaws.com/groups/global/AllUsers"); "http://acs.amazonaws.com/groups/global/AllUsers");
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
xml.writeStartElement("Permission"); writeSimpleElement(xml, "Permission", "READ");
xml.writeCharacters("READ");
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
} }
@ -659,9 +639,7 @@ final class S3ProxyHandler extends AbstractHandler {
for (StorageMetadata metadata : blobStore.list()) { for (StorageMetadata metadata : blobStore.list()) {
xml.writeStartElement("Bucket"); xml.writeStartElement("Bucket");
xml.writeStartElement("Name"); writeSimpleElement(xml, "Name", metadata.getName());
xml.writeCharacters(metadata.getName());
xml.writeEndElement();
Date creationDate = metadata.getCreationDate(); Date creationDate = metadata.getCreationDate();
if (creationDate == null) { if (creationDate == null) {
@ -670,10 +648,10 @@ final class S3ProxyHandler extends AbstractHandler {
// s3cmd which require one. // s3cmd which require one.
creationDate = new Date(0); creationDate = new Date(0);
} }
xml.writeStartElement("CreationDate"); writeSimpleElement(xml, "CreationDate",
xml.writeCharacters(blobStore.getContext().utils().date() blobStore.getContext().utils().date()
.iso8601DateFormat(creationDate).trim()); .iso8601DateFormat(creationDate).trim());
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
} }
xml.writeEndElement(); xml.writeEndElement();
@ -842,49 +820,32 @@ final class S3ProxyHandler extends AbstractHandler {
xml.writeStartElement("ListBucketResult"); xml.writeStartElement("ListBucketResult");
xml.writeDefaultNamespace(AWS_XMLNS); xml.writeDefaultNamespace(AWS_XMLNS);
xml.writeStartElement("Name"); writeSimpleElement(xml, "Name", containerName);
xml.writeCharacters(containerName);
xml.writeEndElement();
if (prefix == null) { if (prefix == null) {
xml.writeEmptyElement("Prefix"); xml.writeEmptyElement("Prefix");
} else { } else {
xml.writeStartElement("Prefix"); writeSimpleElement(xml, "Prefix", prefix);
xml.writeCharacters(prefix);
xml.writeEndElement();
} }
xml.writeStartElement("MaxKeys"); writeSimpleElement(xml, "MaxKeys", String.valueOf(maxKeys));
xml.writeCharacters(String.valueOf(maxKeys));
xml.writeEndElement();
if (marker == null) { if (marker == null) {
xml.writeEmptyElement("Marker"); xml.writeEmptyElement("Marker");
} else { } else {
xml.writeStartElement("Marker"); writeSimpleElement(xml, "Marker", marker);
xml.writeCharacters(marker);
xml.writeEndElement();
} }
if (delimiter != null) { if (delimiter != null) {
xml.writeStartElement("Delimiter"); writeSimpleElement(xml, "Delimiter", delimiter);
xml.writeCharacters(delimiter);
xml.writeEndElement();
} }
String nextMarker = set.getNextMarker(); String nextMarker = set.getNextMarker();
if (nextMarker != null) { if (nextMarker != null) {
xml.writeStartElement("IsTruncated"); writeSimpleElement(xml, "IsTruncated", "true");
xml.writeCharacters("true"); writeSimpleElement(xml, "NextMarker", nextMarker);
xml.writeEndElement();
xml.writeStartElement("NextMarker");
xml.writeCharacters(nextMarker);
xml.writeEndElement();
} else { } else {
xml.writeStartElement("IsTruncated"); writeSimpleElement(xml, "IsTruncated", "false");
xml.writeCharacters("false");
xml.writeEndElement();
} }
Set<String> commonPrefixes = new TreeSet<>(); Set<String> commonPrefixes = new TreeSet<>();
@ -910,37 +871,28 @@ final class S3ProxyHandler extends AbstractHandler {
xml.writeStartElement("Contents"); xml.writeStartElement("Contents");
xml.writeStartElement("Key"); writeSimpleElement(xml, "Key", metadata.getName());
xml.writeCharacters(metadata.getName());
xml.writeEndElement();
Date lastModified = metadata.getLastModified(); Date lastModified = metadata.getLastModified();
if (lastModified != null) { if (lastModified != null) {
xml.writeStartElement("LastModified"); writeSimpleElement(xml, "LastModified",
xml.writeCharacters(blobStore.getContext().utils().date() blobStore.getContext().utils().date()
.iso8601DateFormat(lastModified)); .iso8601DateFormat(lastModified));
xml.writeEndElement();
} }
String eTag = metadata.getETag(); String eTag = metadata.getETag();
if (eTag != null) { if (eTag != null) {
xml.writeStartElement("ETag");
String blobStoreType = getBlobStoreType(blobStore); String blobStoreType = getBlobStoreType(blobStore);
if (blobStoreType.equals("google-cloud-storage")) { if (blobStoreType.equals("google-cloud-storage")) {
eTag = BaseEncoding.base16().lowerCase().encode( eTag = BaseEncoding.base16().lowerCase().encode(
BaseEncoding.base64().decode(eTag)); BaseEncoding.base64().decode(eTag));
} }
xml.writeCharacters("\"" + eTag + "\""); writeSimpleElement(xml, "ETag", "\"" + eTag + "\"");
xml.writeEndElement();
} }
xml.writeStartElement("Size"); writeSimpleElement(xml, "Size",
xml.writeCharacters(String.valueOf(metadata.getSize())); String.valueOf(metadata.getSize()));
xml.writeEndElement(); writeSimpleElement(xml, "StorageClass", "STANDARD");
xml.writeStartElement("StorageClass");
xml.writeCharacters("STANDARD");
xml.writeEndElement();
writeOwnerStanza(xml); writeOwnerStanza(xml);
@ -950,9 +902,7 @@ final class S3ProxyHandler extends AbstractHandler {
for (String commonPrefix : commonPrefixes) { for (String commonPrefix : commonPrefixes) {
xml.writeStartElement("CommonPrefixes"); xml.writeStartElement("CommonPrefixes");
xml.writeStartElement("Prefix"); writeSimpleElement(xml, "Prefix", commonPrefix);
xml.writeCharacters(commonPrefix);
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
} }
@ -987,9 +937,9 @@ final class S3ProxyHandler extends AbstractHandler {
xml.writeDefaultNamespace(AWS_XMLNS); xml.writeDefaultNamespace(AWS_XMLNS);
for (String blobName : blobNames) { for (String blobName : blobNames) {
xml.writeStartElement("Deleted"); xml.writeStartElement("Deleted");
xml.writeStartElement("Key");
xml.writeCharacters(blobName); writeSimpleElement(xml, "Key", blobName);
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
} }
// TODO: emit error stanza // TODO: emit error stanza
@ -1119,15 +1069,6 @@ final class S3ProxyHandler extends AbstractHandler {
xml.writeStartElement("CopyObjectResult"); xml.writeStartElement("CopyObjectResult");
xml.writeDefaultNamespace(AWS_XMLNS); xml.writeDefaultNamespace(AWS_XMLNS);
xml.writeStartElement("LastModified");
xml.writeCharacters(blobStore.getContext().utils().date()
.iso8601DateFormat(blobMetadata.getLastModified()));
xml.writeEndElement();
xml.writeStartElement("ETag");
xml.writeCharacters("\"" + eTag + "\"");
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
xml.flush(); xml.flush();
} catch (XMLStreamException xse) { } catch (XMLStreamException xse) {
@ -1258,17 +1199,9 @@ final class S3ProxyHandler extends AbstractHandler {
xml.writeStartElement("InitiateMultipartUploadResult"); xml.writeStartElement("InitiateMultipartUploadResult");
xml.writeDefaultNamespace(AWS_XMLNS); xml.writeDefaultNamespace(AWS_XMLNS);
xml.writeStartElement("Bucket"); writeSimpleElement(xml, "Bucket", containerName);
xml.writeCharacters(containerName); writeSimpleElement(xml, "Key", blobName);
xml.writeEndElement(); writeSimpleElement(xml, "UploadId", uploadId);
xml.writeStartElement("Key");
xml.writeCharacters(blobName);
xml.writeEndElement();
xml.writeStartElement("UploadId");
xml.writeCharacters(uploadId);
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
xml.flush(); xml.flush();
@ -1338,29 +1271,20 @@ final class S3ProxyHandler extends AbstractHandler {
xml.writeStartElement("CompleteMultipartUploadResult"); xml.writeStartElement("CompleteMultipartUploadResult");
xml.writeDefaultNamespace(AWS_XMLNS); xml.writeDefaultNamespace(AWS_XMLNS);
xml.writeStartElement("Location");
// TODO: bogus value // TODO: bogus value
xml.writeCharacters("http://Example-Bucket.s3.amazonaws.com/" + writeSimpleElement(xml, "Location",
blobName); "http://Example-Bucket.s3.amazonaws.com/" + blobName);
xml.writeEndElement();
xml.writeStartElement("Bucket"); writeSimpleElement(xml, "Bucket", containerName);
xml.writeCharacters(containerName); writeSimpleElement(xml, "Key", blobName);
xml.writeEndElement();
xml.writeStartElement("Key");
xml.writeCharacters(blobName);
xml.writeEndElement();
if (eTag != null) { if (eTag != null) {
xml.writeStartElement("ETag");
String blobStoreType = getBlobStoreType(blobStore); String blobStoreType = getBlobStoreType(blobStore);
if (blobStoreType.equals("google-cloud-storage")) { if (blobStoreType.equals("google-cloud-storage")) {
eTag = BaseEncoding.base16().lowerCase().encode( eTag = BaseEncoding.base16().lowerCase().encode(
BaseEncoding.base64().decode(eTag)); BaseEncoding.base64().decode(eTag));
} }
xml.writeCharacters("\"" + eTag + "\""); writeSimpleElement(xml, "ETag", "\"" + eTag + "\"");
xml.writeEndElement();
} }
xml.writeEndElement(); xml.writeEndElement();
@ -1402,54 +1326,29 @@ final class S3ProxyHandler extends AbstractHandler {
xml.writeStartElement("ListPartsResult"); xml.writeStartElement("ListPartsResult");
xml.writeDefaultNamespace(AWS_XMLNS); xml.writeDefaultNamespace(AWS_XMLNS);
xml.writeStartElement("Bucket"); writeSimpleElement(xml, "Bucket", containerName);
xml.writeCharacters(containerName); writeSimpleElement(xml, "Key", blobName);
xml.writeEndElement(); writeSimpleElement(xml, "UploadId", uploadId);
xml.writeStartElement("Key");
xml.writeCharacters(blobName);
xml.writeEndElement();
xml.writeStartElement("UploadId");
xml.writeCharacters(uploadId);
xml.writeEndElement();
// TODO: bogus values // TODO: bogus values
xml.writeStartElement("Initiator"); xml.writeStartElement("Initiator");
xml.writeStartElement("ID"); writeSimpleElement(xml, "ID", FAKE_INITIATOR_ID);
xml.writeCharacters(FAKE_INITIATOR_ID); writeSimpleElement(xml, "DisplayName",
xml.writeEndElement(); FAKE_INITIATOR_DISPLAY_NAME);
xml.writeStartElement("DisplayName");
xml.writeCharacters(FAKE_INITIATOR_DISPLAY_NAME);
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
writeOwnerStanza(xml); writeOwnerStanza(xml);
xml.writeStartElement("StorageClass"); writeSimpleElement(xml, "StorageClass", "STANDARD");
xml.writeCharacters("STANDARD");
xml.writeEndElement();
// TODO: pagination // TODO: pagination
/* /*
xml.writeStartElement("PartNumberMarker"); writeSimpleElement(xml, "PartNumberMarker", "1");
xml.writeCharacters("1"); writeSimpleElement(xml, "NextPartNumberMarker", "3");
xml.writeEndElement(); writeSimpleElement(xml, "MaxParts", "2");
writeSimpleElement(xml, "IsTruncated", "true");
xml.writeStartElement("NextPartNumberMarker");
xml.writeCharacters("3");
xml.writeEndElement();
xml.writeStartElement("MaxParts");
xml.writeCharacters("2");
xml.writeEndElement();
xml.writeStartElement("IsTruncated");
xml.writeCharacters("true");
xml.writeEndElement();
*/ */
PageSet<? extends StorageMetadata> pageSet = blobStore.list( PageSet<? extends StorageMetadata> pageSet = blobStore.list(
@ -1465,35 +1364,28 @@ final class S3ProxyHandler extends AbstractHandler {
partName); partName);
xml.writeStartElement("Part"); xml.writeStartElement("Part");
xml.writeStartElement("PartNumber"); writeSimpleElement(xml, "PartNumber",
xml.writeCharacters(partName.substring( partName.substring((uploadId + ".").length()));
(uploadId + ".").length()));
xml.writeEndElement();
Date lastModified = sm.getLastModified(); Date lastModified = sm.getLastModified();
if (lastModified != null) { if (lastModified != null) {
xml.writeStartElement("LastModified"); writeSimpleElement(xml, "LastModified",
xml.writeCharacters(blobStore.getContext().utils().date() blobStore.getContext().utils().date()
.iso8601DateFormat(lastModified)); .iso8601DateFormat(lastModified));
xml.writeEndElement();
} }
String eTag = sm.getETag(); String eTag = sm.getETag();
if (eTag != null) { if (eTag != null) {
xml.writeStartElement("ETag");
String blobStoreType = getBlobStoreType(blobStore); String blobStoreType = getBlobStoreType(blobStore);
if (blobStoreType.equals("google-cloud-storage")) { if (blobStoreType.equals("google-cloud-storage")) {
eTag = BaseEncoding.base16().lowerCase().encode( eTag = BaseEncoding.base16().lowerCase().encode(
BaseEncoding.base64().decode(eTag)); BaseEncoding.base64().decode(eTag));
} }
xml.writeCharacters("\"" + eTag + "\""); writeSimpleElement(xml, "ETag", "\"" + eTag + "\"");
xml.writeEndElement();
} }
xml.writeStartElement("Size"); writeSimpleElement(xml, "Size", String.valueOf(
xml.writeCharacters(String.valueOf(
metadata.getContentMetadata().getContentLength())); metadata.getContentMetadata().getContentLength()));
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
} }
@ -1626,23 +1518,14 @@ final class S3ProxyHandler extends AbstractHandler {
xml.writeStartDocument(); xml.writeStartDocument();
xml.writeStartElement("Error"); xml.writeStartElement("Error");
xml.writeStartElement("Code"); writeSimpleElement(xml, "Code", code.getErrorCode());
xml.writeCharacters(code.getErrorCode()); writeSimpleElement(xml, "Message", message);
xml.writeEndElement();
xml.writeStartElement("Message");
xml.writeCharacters(message);
xml.writeEndElement();
if (element != null) { if (element != null) {
xml.writeStartElement(element); writeSimpleElement(xml, element, characters);
xml.writeCharacters(characters);
xml.writeEndElement();
} }
xml.writeStartElement("RequestId"); writeSimpleElement(xml, "RequestId", FAKE_REQUEST_ID);
xml.writeCharacters(FAKE_REQUEST_ID);
xml.writeEndElement();
xml.writeEndElement(); xml.writeEndElement();
xml.flush(); xml.flush();
@ -1824,14 +1707,16 @@ final class S3ProxyHandler extends AbstractHandler {
throws XMLStreamException { throws XMLStreamException {
xml.writeStartElement("Owner"); xml.writeStartElement("Owner");
xml.writeStartElement("ID"); writeSimpleElement(xml, "ID", FAKE_OWNER_ID);
xml.writeCharacters(FAKE_OWNER_ID); writeSimpleElement(xml, "DisplayName", FAKE_OWNER_DISPLAY_NAME);
xml.writeEndElement();
xml.writeStartElement("DisplayName");
xml.writeCharacters(FAKE_OWNER_DISPLAY_NAME);
xml.writeEndElement(); xml.writeEndElement();
}
private static void writeSimpleElement(XMLStreamWriter xml,
String elementName, String characters) throws XMLStreamException {
xml.writeStartElement(elementName);
xml.writeCharacters(characters);
xml.writeEndElement(); xml.writeEndElement();
} }