Putting the album content in its own panel.
[photos] / src / main / java / org / wamblee / photos / wicket / HomePage.java
1 /*
2  * Copyright 2005-2010 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.photos.wicket;
17
18 import java.util.List;
19 import java.util.logging.Logger;
20 import javax.inject.Inject;
21
22 import org.apache.wicket.PageParameters;
23 import org.apache.wicket.markup.html.basic.Label;
24 import org.apache.wicket.markup.html.link.Link;
25 import org.wamblee.photos.model.Album;
26 import org.wamblee.photos.model.Photo;
27 import org.wamblee.photos.model.PhotoEntry;
28 import org.wamblee.photos.model.plumbing.AllPhotos;
29 import org.wamblee.photos.model.plumbing.AuthorizedPhotos;
30 import org.wamblee.security.authentication.User;
31 import org.wamblee.security.authentication.UserAdministration;
32
33 /**
34  * Homepage
35  */
36 public class HomePage extends BasePage {
37
38     private static final Logger LOGGER = Logger.getLogger(HomePage.class.getName());
39
40     private static final long serialVersionUID = 1L;
41
42     @Inject
43     private transient User user;
44
45     @Inject
46     private transient UserAdministration userAdmin;
47
48     // TODO the state should be stored as a path.
49
50     @Inject
51     @AllPhotos
52     private transient Album album;
53
54     @Inject
55     @AuthorizedPhotos
56     private transient Album authorized;
57
58     private class SerializableEntryLink extends Link {
59
60         private String path;
61
62         public SerializableEntryLink(String aId, String aPath) {
63             super(aId);
64             path = aPath;
65         }
66
67         @Override
68         public void onClick() {
69             System.out.println("Entry " + path + " was clicked");
70             PageParameters pars = new PageParameters();
71             pars.put("path", path);
72             setResponsePage(HomePage.class, pars);
73         }
74     }
75
76     private String path;
77
78     /**
79      * Constructor that is invoked when page is invoked without a session.
80      *
81      * @param parameters Page parameters
82      */
83     public HomePage(final PageParameters parameters) throws Exception {
84         super();
85
86         path = parameters.getString("path", "/");
87         if (!path.startsWith("/")) {
88             info("Invalid album '" + path + "', showing root album instead");
89             path = "/";
90         }
91
92         add(new Label("message", "Hello world!"));
93
94         System.out.println("Currently logged in user: " + user);
95
96         List<String> usernames = userAdmin.getUsers();
97         System.out.println("All user names: " + usernames);
98
99         usernames = userAdmin.getUsers("public");
100         System.out.println("Users in group public: " + usernames);
101
102         System.out.println("Entries: " + album.size());
103         for (int i = 0; i < album.size(); i++) {
104             PhotoEntry entry = album.getEntry(i);
105             System.out.println("Entry " + i + " " + entry.getId() + " " + entry.getPath());
106         }
107
108         System.out.println("Authorized Entries: " + authorized.size());
109         for (int i = 0; i < authorized.size(); i++) {
110             PhotoEntry entry = authorized.getEntry(i);
111             System.out.println("Entry " + i + " " + entry.getId() + " " + entry.getPath());
112         }
113
114         PhotoEntry current = authorized.getEntry(path);
115
116         if (current instanceof Photo) {
117             throw new RuntimeException("Photo entry viewing not yet implemented");
118         }
119
120         Album album = (Album) current;
121
122         add(new AlbumPanel("content", parameters));
123     }
124 }