Coverage Report - org.kuali.maven.mojo.s3.S3DataConverter
 
Classes in this File Line Coverage Branch Coverage Complexity
S3DataConverter
0%
0/124
0%
0/32
2.263
 
 1  
 package org.kuali.maven.mojo.s3;
 2  
 
 3  
 import java.text.NumberFormat;
 4  
 import java.util.ArrayList;
 5  
 import java.util.Collections;
 6  
 import java.util.Comparator;
 7  
 import java.util.List;
 8  
 
 9  
 import org.apache.commons.lang.StringUtils;
 10  
 
 11  
 import com.amazonaws.services.s3.model.ObjectListing;
 12  
 import com.amazonaws.services.s3.model.S3ObjectSummary;
 13  
 
 14  
 /**
 15  
  * Convert information from an S3 bucket into pojo's
 16  
  */
 17  
 public class S3DataConverter {
 18  0
         HtmlUtils html = new HtmlUtils();
 19  0
         NumberFormat nf = getNumberFormatInstance();
 20  
         S3BucketContext context;
 21  
         String browseHtml;
 22  
 
 23  
         public S3DataConverter() {
 24  0
                 this(null);
 25  0
         }
 26  
 
 27  
         public S3DataConverter(final S3BucketContext context) {
 28  0
                 super();
 29  0
                 this.context = context;
 30  0
         }
 31  
 
 32  
         /**
 33  
          * Return a NumberFormat that does not using grouping and always displays one fraction digit. This is used to
 34  
          * display the size of S3 objects in kilobytes
 35  
          */
 36  
         protected NumberFormat getNumberFormatInstance() {
 37  0
                 NumberFormat nf = NumberFormat.getInstance();
 38  0
                 nf.setMaximumFractionDigits(1);
 39  0
                 nf.setMinimumFractionDigits(1);
 40  0
                 nf.setGroupingUsed(false);
 41  0
                 return nf;
 42  
         }
 43  
 
 44  
         /**
 45  
          * Convert "foo/bar/css/" into "foo/bar/css"<br>
 46  
          * Convert "foo/bar/css" into "foo/bar"<br>
 47  
          */
 48  
         protected String getTrimmedPrefix(final String prefix, final String delimiter) {
 49  0
                 int pos = prefix.lastIndexOf(delimiter);
 50  0
                 if (pos == -1) {
 51  0
                         return prefix;
 52  
                 }
 53  0
                 return prefix.substring(0, pos);
 54  
         }
 55  
 
 56  
         /**
 57  
          * Convert each DisplayRow object in the list to a String[] and add the String[] to the list of data
 58  
          */
 59  
         protected void addDisplayRows(final List<DisplayRow> displayRows, final List<String[]> data) {
 60  0
                 for (DisplayRow displayRow : displayRows) {
 61  0
                         addDisplayRow(displayRow, data);
 62  
                 }
 63  0
         }
 64  
 
 65  
         /**
 66  
          * Convert a DisplayRow object to a String[]
 67  
          */
 68  
         protected void addDisplayRow(final DisplayRow displayRow, final List<String[]> data) {
 69  0
                 if (displayRow == null) {
 70  0
                         return;
 71  
                 }
 72  0
                 String[] row = new String[4];
 73  0
                 row[0] = displayRow.getImage();
 74  0
                 row[1] = displayRow.getAhref();
 75  0
                 row[2] = displayRow.getLastModified();
 76  0
                 row[3] = displayRow.getSize();
 77  0
                 data.add(row);
 78  0
         }
 79  
 
 80  
         /**
 81  
          * Trim the prefix off of the text we display for this object.<br>
 82  
          * Display "style.css" instead of "css/style.css"
 83  
          */
 84  
         protected String getShow(final String key, final String prefix) {
 85  0
                 if (prefix == null) {
 86  0
                         return key;
 87  
                 }
 88  0
                 int index = prefix.length();
 89  0
                 String s = key.substring(index);
 90  0
                 return s;
 91  
         }
 92  
 
 93  
         /**
 94  
          * Convert a commonPrefix into a DisplayRow object for the UI
 95  
          */
 96  
         protected DisplayRow getDisplayRow(final String commonPrefix, final String prefix, final String delimiter) {
 97  
 
 98  
                 // Create some UI friendly strings
 99  0
                 String image = html.getImage(context.getDirectoryImage());
 100  0
                 String show = getShow(commonPrefix, prefix);
 101  0
                 String dest = delimiter + commonPrefix;
 102  0
                 String ahref = html.getHref(dest, show);
 103  0
                 String date = "-";
 104  0
                 String size = "-";
 105  
 
 106  
                 // Store them in an object
 107  0
                 DisplayRow displayRow = new DisplayRow();
 108  0
                 displayRow.setImage(image);
 109  0
                 displayRow.setAhref(ahref);
 110  0
                 displayRow.setLastModified(date);
 111  0
                 displayRow.setSize(size);
 112  0
                 return displayRow;
 113  
         }
 114  
 
 115  
         protected List<DisplayRow> getDirectoryDisplayRows(final ObjectListing objectListing, final String prefix,
 116  
                         final String delimiter) {
 117  0
                 List<DisplayRow> displayRows = new ArrayList<DisplayRow>();
 118  0
                 for (String commonPrefix : objectListing.getCommonPrefixes()) {
 119  0
                         DisplayRow displayRow = getDisplayRow(commonPrefix, prefix, delimiter);
 120  0
                         if (displayRow == null) {
 121  0
                                 continue;
 122  
                         }
 123  0
                         displayRows.add(displayRow);
 124  0
                 }
 125  0
                 return displayRows;
 126  
         }
 127  
 
 128  
         /**
 129  
          * Convert the ObjectListing into a List of String arrays. Each array in the list represents one row in the html
 130  
          * table we will be generating
 131  
          */
 132  
         public List<String[]> getData(final ObjectListing objectListing, final String prefix, final String delimiter) {
 133  0
                 DisplayRow upOneDirectory = getUpOneDirectoryDisplayRow(prefix, delimiter);
 134  0
                 List<DisplayRow> objectDisplayRows = getObjectDisplayRows(objectListing, prefix, delimiter);
 135  0
                 List<DisplayRow> directoryDisplayRows = getDirectoryDisplayRows(objectListing, prefix, delimiter);
 136  0
                 Comparator<DisplayRow> c = new DisplayRowComparator();
 137  0
                 Collections.sort(directoryDisplayRows, c);
 138  0
                 List<String[]> data = new ArrayList<String[]>();
 139  0
                 addDisplayRow(upOneDirectory, data);
 140  0
                 addDisplayRows(directoryDisplayRows, data);
 141  0
                 addDisplayRows(objectDisplayRows, data);
 142  0
                 return data;
 143  
         }
 144  
 
 145  
         protected boolean isDirectory(final S3ObjectSummary summary, final List<String> commonPrefixes,
 146  
                         final String prefix, final String delimiter) {
 147  0
                 String key = summary.getKey();
 148  0
                 if (key.equals(prefix)) {
 149  0
                         return true;
 150  
                 }
 151  0
                 for (String commonPrefix : commonPrefixes) {
 152  0
                         if (key.equals(commonPrefix)) {
 153  0
                                 return true;
 154  
                         }
 155  0
                         String trimmedPrefix = getTrimmedPrefix(commonPrefix, delimiter);
 156  0
                         if (key.equals(trimmedPrefix)) {
 157  0
                                 return true;
 158  
                         }
 159  0
                 }
 160  0
                 return false;
 161  
         }
 162  
 
 163  
         /**
 164  
          * Convert an S3ObjectSummary into a DisplayRow object for the UI
 165  
          */
 166  
         protected DisplayRow getDisplayRow(final S3ObjectSummary summary, final String prefix, final String delimiter) {
 167  0
                 String key = summary.getKey();
 168  
 
 169  
                 // Create some UI friendly strings
 170  0
                 String image = html.getImage(context.getFileImage());
 171  0
                 String show = getShow(key, prefix);
 172  0
                 String dest = delimiter + key;
 173  0
                 String ahref = html.getHref(dest, show);
 174  0
                 String date = context.getLastModifiedDateFormatter().format(summary.getLastModified());
 175  0
                 String size = nf.format((summary.getSize() / 1024D)) + " KiB";
 176  
 
 177  
                 // Store them in an object
 178  0
                 DisplayRow displayRow = new DisplayRow();
 179  0
                 displayRow.setShow(show);
 180  0
                 displayRow.setImage(image);
 181  0
                 displayRow.setAhref(ahref);
 182  0
                 displayRow.setLastModified(date);
 183  0
                 displayRow.setSize(size);
 184  0
                 return displayRow;
 185  
         }
 186  
 
 187  
         protected List<DisplayRow> getObjectDisplayRows(final ObjectListing objectListing, final String prefix,
 188  
                         final String delimiter) {
 189  0
                 List<DisplayRow> displayRows = new ArrayList<DisplayRow>();
 190  0
                 for (S3ObjectSummary summary : objectListing.getObjectSummaries()) {
 191  0
                         if (isDirectory(summary, objectListing.getCommonPrefixes(), prefix, delimiter)) {
 192  0
                                 continue;
 193  
                         }
 194  0
                         DisplayRow displayRow = getDisplayRow(summary, prefix, delimiter);
 195  0
                         if (displayRow == null) {
 196  0
                                 continue;
 197  
                         }
 198  0
                         displayRows.add(displayRow);
 199  0
                 }
 200  0
                 return displayRows;
 201  
         }
 202  
 
 203  
         /**
 204  
          * Convert a commonPrefix into a DisplayRow object for the UI
 205  
          */
 206  
         protected DisplayRow getUpOneDirectoryDisplayRow(final String prefix, final String delimiter) {
 207  0
                 if (StringUtils.isEmpty(prefix)) {
 208  0
                         return null;
 209  
                 }
 210  
 
 211  
                 // Create some UI friendly strings
 212  0
                 String image = "";
 213  0
                 String show = ".." + delimiter;
 214  0
                 String dest = getUpOneDirectoryDest(prefix, delimiter);
 215  0
                 String ahref = html.getHref(dest, show);
 216  0
                 String date = "";
 217  0
                 String size = "";
 218  
 
 219  
                 // Store them in an object
 220  0
                 DisplayRow displayRow = new DisplayRow();
 221  0
                 displayRow.setImage(image);
 222  0
                 displayRow.setAhref(ahref);
 223  0
                 displayRow.setLastModified(date);
 224  0
                 displayRow.setSize(size);
 225  0
                 return displayRow;
 226  
         }
 227  
 
 228  
         /**
 229  
          * If prefix is "foo/" and delimiter is "/" return "/"<br>
 230  
          * If prefix is "foo/bar/" and delimiter is "/" return "foo/"
 231  
          */
 232  
         protected String getUpOneDirectoryDest(String prefix, final String delimiter) {
 233  0
                 if (prefix.endsWith(delimiter)) {
 234  0
                         prefix = prefix.substring(0, prefix.length() - 1);
 235  
                 }
 236  0
                 int pos = prefix.lastIndexOf(delimiter);
 237  0
                 if (pos == -1) {
 238  0
                         return delimiter + getBrowseHtml();
 239  
                 } else {
 240  0
                         return delimiter + prefix.substring(0, pos + 1);
 241  
                 }
 242  
         }
 243  
 
 244  
         public void setContext(final S3BucketContext context) {
 245  0
                 this.context = context;
 246  0
         }
 247  
 
 248  
         public S3BucketContext getContext() {
 249  0
                 return context;
 250  
         }
 251  
 
 252  
         public String getBrowseHtml() {
 253  0
                 return browseHtml;
 254  
         }
 255  
 
 256  
         public void setBrowseHtml(final String browseHtml) {
 257  0
                 this.browseHtml = browseHtml;
 258  0
         }
 259  
 
 260  
 }