Working upload of photos (individual and zip)
[photos] / src / main / java / org / wamblee / photos / wicket / HomePage.java
index 289f783e35340e3358eb48ecb0e5669475007446..4a34bc0da750792de94ece9fb53d7a0605f90e0d 100644 (file)
  */
 package org.wamblee.photos.wicket;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.List;
+import java.util.logging.Logger;
 import javax.inject.Inject;
 
 import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.markup.repeater.RepeatingView;
-import org.apache.wicket.resource.ByteArrayResource;
 import org.wamblee.photos.model.Album;
 import org.wamblee.photos.model.Photo;
 import org.wamblee.photos.model.PhotoEntry;
@@ -41,6 +34,8 @@ import org.wamblee.security.authentication.UserAdministration;
  */
 public class HomePage extends BasePage {
 
+    private static final Logger LOGGER = Logger.getLogger(HomePage.class.getName());
+
     private static final long serialVersionUID = 1L;
 
     @Inject
@@ -70,10 +65,14 @@ public class HomePage extends BasePage {
 
         @Override
         public void onClick() {
-            System.out.println("Entry " + path + " was clicked");
+            PageParameters pars = new PageParameters();
+            pars.put("path", path);
+            setResponsePage(HomePage.class, pars);
         }
     }
 
+    private String path;
+
     /**
      * Constructor that is invoked when page is invoked without a session.
      *
@@ -81,7 +80,12 @@ public class HomePage extends BasePage {
      */
     public HomePage(final PageParameters parameters) throws Exception {
         super();
-        add(new Label("message", "Hello world!"));
+
+        path = parameters.getString("path", "/");
+        if (!path.startsWith("/")) {
+            info("Invalid album '" + path + "', showing root album instead");
+            path = "/";
+        }
 
         System.out.println("Currently logged in user: " + user);
 
@@ -103,91 +107,12 @@ public class HomePage extends BasePage {
             System.out.println("Entry " + i + " " + entry.getId() + " " + entry.getPath());
         }
 
-        int ientry = 0;
-        int irow = 0;
-        RepeatingView row = new RepeatingView("row");
-        add(row);
-        while (irow < 5 && ientry < authorized.size()) {
-            int icolumn = 0;
-            WebMarkupContainer columns = new WebMarkupContainer(row.newChildId());
-            row.add(columns);
-            RepeatingView column = new RepeatingView("column");
-            columns.add(column);
-            while (icolumn < 5 && ientry < authorized.size()) {
-                WebMarkupContainer thumbnail = new WebMarkupContainer(column.newChildId());
-                column.add(thumbnail);
-
-                final PhotoEntry entry = authorized.getEntry(ientry);
-                Link link = new SerializableEntryLink("thumbnail", entry.getPath());
-                thumbnail.add(link);
-                ImageData data = getData(entry);
-
-                // TODO very inefficient. all data is loaded when generating the page.
-                link.add(new Image("image", new ByteArrayResource(data.getContentType(), data.getData())));
-
-                link.add(new Label("name", authorized.getEntry(ientry).getId()));
-                icolumn++;
-                ientry++;
-            }
-            irow++;
-        }
-    }
-
-    public static final class ImageData {
-        private String contentType;
-        private byte[] data;
+        PhotoEntry current = authorized.getEntry(path);
 
-        public ImageData(String aContentType, byte[] aData) {
-            contentType = aContentType;
-            data = aData;
-        }
-
-        public String getContentType() {
-            return contentType;
-        }
-
-        public byte[] getData() {
-            return data;
-        }
-    }
-
-    private ImageData getData(PhotoEntry aEntry) {
-        if (aEntry instanceof Photo) {
-            return getData((Photo) aEntry);
-        } else if (aEntry instanceof Album) {
-            return getData((Album) aEntry);
+        if (current instanceof Photo) {
+            add(new PhotoPanel("content", parameters));
         } else {
-            throw new RuntimeException("Unsupported type " + aEntry.getClass().getName());
-        }
-    }
-
-    private ImageData getData(Photo aPhoto) {
-        try (InputStream is = aPhoto.getThumbNail()) {
-            return new ImageData("image/jpeg", getBytes(is));
-        }
-        catch (IOException e) {
-            // to improve.
-            throw new RuntimeException("Cannot read photo", e);
-        }
-    }
-
-    private byte[] getBytes(InputStream is) throws IOException {
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        byte[] block = new byte[1024];
-        int n = is.read(block);
-        while (n > 0) {
-            bos.write(block, 0, n);
-            n = is.read(block);
-        }
-        return bos.toByteArray();
-    }
-
-    private ImageData getData(Album aAlbum) {
-        try (InputStream is = getClass().getResourceAsStream("folder.png")) {
-            return new ImageData("image/png", getBytes(is));
-        }
-        catch (IOException e) {
-            throw new RuntimeException("Cannot read album jpg", e);
+            add(new AlbumPanel("content", parameters));
         }
     }
 }
\ No newline at end of file