Putting the album content in its own panel.
authorErik Brakkee <erik@brakkee.org>
Sun, 22 Sep 2013 16:31:45 +0000 (18:31 +0200)
committerErik Brakkee <erik@brakkee.org>
Sun, 22 Sep 2013 16:31:45 +0000 (18:31 +0200)
src/main/java/org/wamblee/photos/wicket/AlbumPanel.html [new file with mode: 0644]
src/main/java/org/wamblee/photos/wicket/AlbumPanel.java [new file with mode: 0644]
src/main/java/org/wamblee/photos/wicket/HomePage.html
src/main/java/org/wamblee/photos/wicket/HomePage.java

diff --git a/src/main/java/org/wamblee/photos/wicket/AlbumPanel.html b/src/main/java/org/wamblee/photos/wicket/AlbumPanel.html
new file mode 100644 (file)
index 0000000..345b619
--- /dev/null
@@ -0,0 +1,38 @@
+<html
+        xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<head>
+    <title>Wicket Quickstart Archetype Homepage</title>
+</head>
+<body>
+<strong>Wicket Quickstart Archetype Homepage</strong>
+<br/>
+<br/>
+
+
+<span wicket:id="message">Message here.</span>
+
+<wicket:panel>
+    <div id="photos">
+        <table>
+            <tr wicket:id="row">
+
+                <td wicket:id="column" id="photoentry">
+
+                    <a href="#" wicket:id="thumbnail">
+                        <table>
+                            <tr>
+                                <td><img wicket:id="image"/></td>
+                            </tr>
+                            <tr>
+                                <td><span wicket:id="name">photo name</span></td>
+                            </tr>
+                        </table>
+                    </a>
+                </td>
+            </tr>
+        </table>
+    </div>
+</wicket:panel>
+
+</body>
+</html>
diff --git a/src/main/java/org/wamblee/photos/wicket/AlbumPanel.java b/src/main/java/org/wamblee/photos/wicket/AlbumPanel.java
new file mode 100644 (file)
index 0000000..093ed15
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2005-2010 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.wamblee.photos.wicket;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+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.html.panel.Panel;
+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;
+import org.wamblee.photos.model.plumbing.AuthorizedPhotos;
+
+/**
+ * Homepage
+ */
+public class AlbumPanel extends Panel {
+
+    private static final Logger LOGGER = Logger.getLogger(AlbumPanel.class.getName());
+
+    private static final long serialVersionUID = 1L;
+
+    @Inject
+    @AuthorizedPhotos
+    private transient Album authorized;
+
+    private class SerializableEntryLink extends Link {
+
+        private String path;
+
+        public SerializableEntryLink(String aId, String aPath) {
+            super(aId);
+            path = aPath;
+        }
+
+        @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.
+     *
+     * @param parameters Page parameters
+     */
+    public AlbumPanel(String aId, final PageParameters parameters) throws Exception {
+        super(aId);
+
+        path = parameters.getString("path", "/");
+        if (!path.startsWith("/")) {
+            info("Invalid album '" + path + "', showing root album instead");
+            path = "/";
+        }
+
+        PhotoEntry current = authorized.getEntry(path);
+
+        if (current instanceof Photo) {
+            throw new RuntimeException("AlbumPanel can only show album: " + current.getClass().getName());
+        }
+
+        Album album = (Album) current;
+
+        int ientry = 0;
+        int irow = 0;
+        RepeatingView row = new RepeatingView("row");
+        add(row);
+        while (irow < 5 && ientry < album.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 < album.size()) {
+                WebMarkupContainer thumbnail = new WebMarkupContainer(column.newChildId());
+                column.add(thumbnail);
+
+                final PhotoEntry entry = album.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", album.getEntry(ientry).getId()));
+                icolumn++;
+                ientry++;
+            }
+            irow++;
+        }
+    }
+
+    public static final class ImageData {
+        private String contentType;
+        private byte[] data;
+
+        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);
+        } 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);
+        }
+    }
+}
\ No newline at end of file
index 26ac07ebf7d3c6b13daf4763f5c509735d307d44..e110290d91ab9bcb206790aba28b240c48f56370 100644 (file)
 
     <span wicket:id="message">Message here.</span>
 
-    <div id="photos">
-        <table>
-            <tr wicket:id="row">
-
-                <td wicket:id="column" id="photoentry">
-
-                    <a href="#" wicket:id="thumbnail">
-                        <table>
-                            <tr>
-                                <td><img wicket:id="image"/></td>
-                            </tr>
-                            <tr>
-                                <td><span wicket:id="name">photo name</span></td>
-                            </tr>
-                        </table>
-                    </a>
-                </td>
-            </tr>
-        </table>
-    </div>
+    <span wicket:id="content">Content</span>
 
 </wicket:extend>
 
index a7aa1a3785d1568ec50504b57d24db05aed19460..0a55e869c56cac75a824584ac5c073dda930b14e 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;
@@ -126,91 +119,6 @@ public class HomePage extends BasePage {
 
         Album album = (Album) current;
 
-        int ientry = 0;
-        int irow = 0;
-        RepeatingView row = new RepeatingView("row");
-        add(row);
-        while (irow < 5 && ientry < album.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 < album.size()) {
-                WebMarkupContainer thumbnail = new WebMarkupContainer(column.newChildId());
-                column.add(thumbnail);
-
-                final PhotoEntry entry = album.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", album.getEntry(ientry).getId()));
-                icolumn++;
-                ientry++;
-            }
-            irow++;
-        }
-    }
-
-    public static final class ImageData {
-        private String contentType;
-        private byte[] data;
-
-        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);
-        } 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