package railo.commons.io.res.type.s3; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import railo.runtime.exp.PageException; import railo.runtime.op.Caster; public final class ContentFactory extends S3Factory { private boolean insideContents=false; private boolean insideOwners=false; private Content content; private List contents=new ArrayList(); private final S3 s3; private String bucketName; private boolean isTruncated; /** * @param saxParser String Klassenpfad zum Sax Parser. * @param file File Objekt auf die TLD. * @throws IOException * @throws SAXException */ public ContentFactory(InputStream in,S3 s3) throws IOException, SAXException { super(); this.s3=s3; init(in); } public void doStartElement(String uri, String name, String qName, Attributes atts) { if(qName.equals("Contents")) startContents(); if(qName.equals("Owner")) insideOwners=true; } public void doEndElement(String uri, String name, String qName) throws SAXException { if(qName.equals("Contents")) endContents(); if(qName.equals("Owner")) insideOwners=false; } protected void setContent(String value) throws SAXException { if(insideContents) { if(insideOwners){ if(inside.equals("ID")) content.setOwnerIdKey(value); else if(inside.equals("DisplayName")) content.setOwnerDisplayName(value); } else { try { if(inside.equals("Key")) { content.setKey(value); } else if(inside.equals("LastModified")) content.setLastModified( S3.toDate(value,s3.getTimeZone()).getTime()); else if(inside.equals("ETag")) content.setETag(value); // MUST HTML Encoder else if(inside.equals("Size")) content.setSize(Caster.toLongValue(value,0L)); else if(inside.equals("StorageClass")) content.setStorageClass(value); } catch (PageException e) { throw new SAXException(e.getMessage()); } } } else { if(inside.equals("Name")) bucketName=value; else if(inside.equals("IsTruncated")) isTruncated=Caster.toBooleanValue(value,false); } } /* <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Contents> <Owner> <ID>5f8fc1a3e7f09e6e1bf5f7d7d0dfadfd0efc2e0afbf7789836f3ab67b2dddfdf</ID> <DisplayName>michael.streit</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> <Contents> <Key>susi2</Key> <LastModified>2008-03-05T14:10:43.000Z</LastModified> <ETag>"f84bcc91f8fd1321a251311c7e9fbfce"</ETag><Size>156169</Size><Owner><ID>5f8fc1a3e7f09e6e1bf5f7d7d0dfadfd0efc2e0afbf7789836f3ab67b2dddfdf</ID><DisplayName>michael.streit</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents></ListBucketResult> */ /** * Wird jedesmal wenn das Tag attribute beginnt aufgerufen, um intern in einen anderen Zustand zu gelangen. */ private void startContents() { insideContents=true; content=new Content(s3); } /** * Wird jedesmal wenn das Tag tag endet aufgerufen, um intern in einen anderen Zustand zu gelangen. */ private void endContents() { content.setBucketName(bucketName); content.setTruncated(isTruncated); contents.add(content); insideContents=false; } public Content[] getContents() { return (Content[]) contents.toArray(new Content[contents.size()]); } /* <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>halloWelt</Name> <Prefix></Prefix> <Marker></Marker> <MaxKeys>1000</MaxKeys> <IsTruncated>false</IsTruncated> <Contents> <Key>susi</Key> <LastModified>2008-03-05T14:10:41.000Z</LastModified> <ETag>"f84bcc91f8fd1321a251311c7e9fbfce"</ETag> <Size>156169</Size> <Owner> <ID>5f8fc1a3e7f09e6e1bf5f7d7d0dfadfd0efc2e0afbf7789836f3ab67b2dddfdf</ID> <DisplayName>michael.streit</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> <Contents> <Key>susi2</Key> <LastModified>2008-03-05T14:10:43.000Z</LastModified> <ETag>"f84bcc91f8fd1321a251311c7e9fbfce"</ETag><Size>156169</Size><Owner><ID>5f8fc1a3e7f09e6e1bf5f7d7d0dfadfd0efc2e0afbf7789836f3ab67b2dddfdf</ID><DisplayName>michael.streit</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents></ListBucketResult> */ /** * @return the isTruncated */ public boolean isTruncated() { return isTruncated; } }