git-svn-id: svn://svn.dsv.su.se/scipro/scipro/trunk@460 73ecded7-942e-4092-bab0-0e58ef0ee984
This commit is contained in:
joha-asc 2011-03-24 10:16:57 +00:00
parent 7bd8ae7300
commit 3e119f2182
13 changed files with 1755 additions and 40 deletions

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<div wicket:id ="listContainer">
<h2>Video Resource</h2>
<table>
<tr>
<td class="rating-cell">
<div class = "centered" ><a href="#" wicket:id="upLink"><img src="images/icons/arrow-up.png" class="icon-24" alt="Up"/></a></div>
<div class = "centered" wicket:id="rate"></div>
<div class = "centered" ><a href="#" wicket:id="downLink"><img src="images/icons/arrow-down.png" class="icon-24" alt="Down"/></a></div>
</td>
<td>
<div><strong>Tag/s: </strong> <span wicket:id="tag"></span></div>
<div><strong>Created: </strong> <span wicket:id="date"></span></div>
<div><strong>Created by: </strong> <span wicket:id="user"></span></div>
</td>
</tr>
<tr>
<td colspan="2"><hr/></td>
</tr>
</table>
<div wicket:id="embed"></div>
</div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,170 @@
/**
*
*/
package se.su.dsv.scipro.knol.resource.panels;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.SciProApplication;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.EmbedResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.LinkResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.RatableDao;
import se.su.dsv.scipro.data.dao.interfaces.RatingDao;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.EmbedResource;
import se.su.dsv.scipro.data.dataobjects.LinkResource;
import se.su.dsv.scipro.data.dataobjects.Rating;
import se.su.dsv.scipro.data.dataobjects.Tag;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.enums.RatingValue;
import se.su.dsv.scipro.knol.resource.page.EmbedWebMarkupContainer;
/**
* @author Johan Aschan - aschan@dsv.su.se
*
*/
public class EmbedResourceBookmarkablePanel extends Panel {
@SpringBean
private RatingDao ratingDao;
@SpringBean
private UserDao userDao;
@SpringBean
private EmbedResourceDao embedResourceDao;
@SpringBean
private RatableDao ratableDao;
private WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
private User user;
private int point;
private EmbedResource embed;
public EmbedResourceBookmarkablePanel(String id, PageParameters pp) {
super(id);
Long linkId = pp.getAsLong("embedres");
if(linkId == null){
failAndRedirect();
}
else {
embed = embedResourceDao.load(linkId);
if(embed == null)
failAndRedirect();
}
user = userDao.load(SciProSession.get().getUser().getId());
loadListView();
listContainer.setOutputMarkupId(true);
add(listContainer);
// pp.put("res", link.getId());
// new BookmarkablePageLink<Void>("up", LinkResourcePage.class, pp);
}
private void failAndRedirect(){
throw new RestartResponseException(SciProApplication.get().getApplicationSettings().getAccessDeniedPage());
}
public void loadListView() {
final List<Rating> ratingList = embed.getRatingList();
boolean rated = false;
point = ratableDao.getRating(embed);
Rating rating = null;
for (Rating r : ratingList) {
if (r.getUser().equals(user)) {
rating = r;
rated = true;
break;
}
}
if (rating == null) {
rating = new Rating();
rating.setUser(user);
}
final boolean finalRated = rated;
final Rating rating2 = rating;
listContainer.add(new Label("rate", point + ""));
listContainer.add(new AjaxLink<String>("upLink", new Model<String>("Up")) {
public void onClick(AjaxRequestTarget target) {
if (finalRated && rating2.getRatingValue() == RatingValue.UP) {
ratingList.remove(rating2);
embed.setRatingList(ratingList);
embedResourceDao.save(embed);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
embed.setRatingList(ratingList);
rating2.setRatingValue(RatingValue.UP);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
embedResourceDao.save(embed);
listContainer.removeAll();
loadListView();
target.addComponent(listContainer);
}
});
listContainer.add(new AjaxLink<String>("downLink", new Model<String>("Down")) {
@Override
public void onClick(AjaxRequestTarget target) {
if (finalRated && rating2.getRatingValue() == RatingValue.DOWN) {
ratingList.remove(rating2);
embed.setRatingList(ratingList);
embedResourceDao.save(embed);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
rating2.setRatingValue(RatingValue.DOWN);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
embedResourceDao.save(embed);
listContainer.removeAll();
loadListView();
target.addComponent(listContainer);
}
});
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
listContainer.add(new Label("date", df.format(embed.getDateCreated())));
listContainer.add(new Label("user", embed.getCreator().getFirstName() + " "
+ embed.getCreator().getLastName()));
listContainer.add(new EmbedWebMarkupContainer("embed", embed.getInfo()));
String tags = "";
int count = 0;
for (Tag tag : embed.getTagList()) {
if (count == 0) {
tags = tag.getTag();
count++;
} else {
tags += ", " + tag.getTag();
}
}
listContainer.add(new Label("tag", tags));
};
}

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<div wicket:id="feedbackPanel"></div>
<div class="span-6 last">
<form wicket:id="resourceForm">
<div wicket:id="editContainer">
<div class ="span-6 last">
<strong>Embed Code:</strong>
</div>
<div class ="span-6 last">
<textarea wicket:id="info" ></textarea>
</div>
<div class ="span-6 last">
<strong>Tag/s:</strong>
</div>
<div class ="span-6 last">
<select wicket:id="selectedTagList" class = "span-8 last"></select>
</div>
<div class ="span-6 last">
<input type="submit" wicket:id="submitButton" />
</div>
</div>
</form>
</div>
<div wicket:id="listContainer">
<div wicket:id ="link-item" class="span-20 last">
<table>
<tr>
<td><strong>Rating</strong></td>
<td><strong>Up</strong></td>
<td><strong>Down</strong></td>
<td><strong>Created</strong></td>
<td><strong>By User</strong></td>
<td><strong>Tag/s</strong></td>
<!-- <td><strong>File</strong></td>-->
<td><strong>Edit</strong></td>
<td><strong>Delete</strong></td>
</tr>
<tr>
<td wicket:id="rate"></td>
<td><a href="#" wicket:id="upLink"><img src="images/icons/arrow-up.png" class="icon-24" alt="Up"/></a></td>
<td><a href="#" wicket:id="downLink"><img src="images/icons/arrow-down.png" class="icon-24" alt="Down"/></a></td>
<td wicket:id="date"></td>
<td wicket:id="user"></td>
<td wicket:id="tag"></td>
<!-- <td><span wicket:id="filePanel"></span></td> -->
<td><a href="#" wicket:id="editLink"><img src="images/icons/pencil.png" class="icon-24" alt="Edit"/></a></td>
<td><a href="#" wicket:id="deleteLink"><img src="images/icons/circle-delete.png" class="icon-24" alt="Delete"/></a></td>
</tr>
</table>
<div wicket:id="embed"></div>
<div></div>
</div>
</div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,331 @@
/**
*
*/
package se.su.dsv.scipro.knol.resource.panels;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.EmbedResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.RatableDao;
import se.su.dsv.scipro.data.dao.interfaces.RatingDao;
import se.su.dsv.scipro.data.dao.interfaces.ResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.TagDao;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.EmbedResource;
import se.su.dsv.scipro.data.dataobjects.LinkResource;
import se.su.dsv.scipro.data.dataobjects.Rating;
import se.su.dsv.scipro.data.dataobjects.Recipient;
import se.su.dsv.scipro.data.dataobjects.Resource;
import se.su.dsv.scipro.data.dataobjects.Tag;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.enums.RatingValue;
import se.su.dsv.scipro.knol.resource.page.EmbedWebMarkupContainer;
import se.su.dsv.scipro.knol.resource.page.ResourceModel;
/**
* @author Johan Aschan - aschan@dsv.su.se
*
*/
public class EmbedResourcePanel extends Panel{
@SpringBean
private RatingDao ratingDao;
@SpringBean
private UserDao userDao;
@SpringBean
private EmbedResourceDao embedResourceDao;
@SpringBean
private RatableDao ratableDao;
@SpringBean
private TagDao tagDao;
private WebMarkupContainer listContainer;
private ListView<EmbedResource> linkListView;
private Collection<Tag> selectedTagList = new ArrayList<Tag>();
private User user;
private int point;
private boolean edit;
private WebMarkupContainer editContainer;
private TextArea<String> info;
private TextField<String> linkAddress;
private ListMultipleChoice<Tag> userMultipleChoiceList;
private EmbedResource editLink;
private FeedbackPanel feedbackPanel;
private ResourceModel resourceModel;
public EmbedResourcePanel(String id) {
super(id);
feedbackPanel = new FeedbackPanel("feedbackPanel");
add(feedbackPanel);
feedbackPanel.setOutputMarkupId(true);
user = userDao.load(SciProSession.get().getUser().getId());
loadListView();
listContainer = new WebMarkupContainer("listContainer");
listContainer.add(linkListView);
listContainer.setOutputMarkupId(true);
add(listContainer);
add(new LinkResourceForm("resourceForm"));
}
public class LinkResourceForm extends Form<ResourceModel> {
public LinkResourceForm(String name) {
super(name, new CompoundPropertyModel<ResourceModel>(
resourceModel = new ResourceModel()));
editContainer = new WebMarkupContainer("editContainer");
editContainer.setOutputMarkupId(true);
info = new TextArea<String>("info");
info.setRequired(true);
editContainer.add(info);
userMultipleChoiceList = new ListMultipleChoice<Tag>(
"selectedTagList", new ListModel<Tag>(tagDao.findAll()),
new ChoiceRenderer<Tag>("tag")) {
private static final long serialVersionUID = -7117603450416845711L;
@Override
protected CharSequence getDefaultChoice(Object selected) {
return "";
}
};
OnChangeAjaxBehavior userSelectBehaviour = new OnChangeAjaxBehavior() {
private static final long serialVersionUID = 3412906970812300312L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
selectedTagList = userMultipleChoiceList.getModelObject();
}
};
userMultipleChoiceList.add(userSelectBehaviour);
userMultipleChoiceList.setOutputMarkupId(true);
editContainer.add(userMultipleChoiceList);
editContainer.add(new AjaxButton("submitButton", new Model<String>(
"Save Resource")) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
EmbedResource link;
ResourceModel resourceModel = ((ResourceModel) form
.getModelObject());
if (edit) {
link = editLink;
edit = false;
} else {
link = new EmbedResource();
}
link.setInfo(resourceModel.getInfo());
link.setCreator(user);
link.setTagList(new ArrayList<Tag>(resourceModel.getSelectedTagList()));
embedResourceDao.save(link);
loadListView();
resourceModel.setSelectedTagList(new ArrayList<Tag>());
resourceModel.setInfo("");
listContainer.removeAll();
listContainer.add(linkListView);
target.addComponent(feedbackPanel);
target.addComponent(listContainer);
target.addComponent(editContainer);
}
@Override
protected void onError(final AjaxRequestTarget target, final Form form) {
target.addComponent(feedbackPanel);
}
});
add(editContainer);
}
}
public void loadListView() {
List<EmbedResource> linkList = embedResourceDao.findAll();
Collections.sort(linkList, new Comparator<EmbedResource>() {
@Override
public int compare(EmbedResource o1, EmbedResource o2) {
return Integer.valueOf(ratableDao.getRating(o2)).compareTo(
Integer.valueOf(ratableDao.getRating(o1)));
}
});
linkListView = new ListView<EmbedResource>("link-item", linkList) {
@Override
protected void populateItem(final ListItem<EmbedResource> item) {
final EmbedResource link = item.getModelObject();
final List<Rating> ratingList = link.getRatingList();
boolean rated = false;
point = 0;
Rating rating = null;
for (Rating r : ratingList) {
if (r.getUser().equals(user)) {
rating = r;
rated = true;
}
if (r.getRatingValue() == RatingValue.UP) {
point++;
} else {
point--;
}
}
if (rating == null) {
rating = new Rating();
rating.setUser(user);
}
final boolean finalRated = rated;
final Rating rating2 = rating;
item.add(new Label("rate", point + ""));
item.add(new AjaxLink<String>("upLink", new Model<String>("Up")) {
public void onClick(AjaxRequestTarget target) {
if (finalRated
&& rating2.getRatingValue() == RatingValue.UP) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
embedResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
link.setRatingList(ratingList);
rating2.setRatingValue(RatingValue.UP);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
embedResourceDao.save(link);
loadListView();
listContainer.removeAll();
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
item.add(new AjaxLink<String>("downLink", new Model<String>(
"Down")) {
@Override
public void onClick(AjaxRequestTarget target) {
if (finalRated
&& rating2.getRatingValue() == RatingValue.DOWN) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
embedResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
rating2.setRatingValue(RatingValue.DOWN);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
embedResourceDao.save(link);
loadListView();
listContainer.removeAll();
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
item.add(new Label("date", df.format(link.getDateCreated())));
item.add(new Label("user", link.getCreator().getFirstName()
+ " " + link.getCreator().getLastName()));
String tags = "";
int count = 0;
for (Tag tag : link.getTagList()) {
if (count == 0) {
tags = tag.getTag();
count++;
} else {
tags += ", " + tag.getTag();
}
}
item.add(new EmbedWebMarkupContainer("embed", link.getInfo()));
item.add(new Label("tag", tags));
item.add(new AjaxLink<Recipient>("deleteLink") {
@Override
public void onClick(AjaxRequestTarget target) {
EmbedResource link2 = embedResourceDao.reLoad(link);
if (link2.equals(editLink)) {
edit = false;
target.addComponent(editContainer);
}
embedResourceDao.delete(link2);
loadListView();
listContainer.removeAll();
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
item.add(new AjaxLink<Recipient>("editLink") {
@Override
public void onClick(AjaxRequestTarget target) {
edit = true;
editLink = embedResourceDao.reLoad(link);
info.setModelObject(editLink.getInfo());
//listChoice = new ListMultipleChoice("choices", MANY_CHOICES)
resourceModel.setSelectedTagList(editLink.getTagList());
// userMultipleChoiceList.setModelObject(editLink
// .getTagList());
target.addComponent(editContainer);
}
});
// item.add(new FileResourcePanel("filePanel",
// item.getModelObject()));
};
};
}
}

@ -5,39 +5,20 @@
<div><span wicket:id="feedbackPanel">[Feedback goes here]</span></div>
<form wicket:id="uploadForm">
<p>
<label>Add file to resource:</label> <input wicket:id="fileInput"
id="fileInput" type="file" />
<br/>
<input type="submit" value="Upload!" name="upload" />
</p>
<div wicket:id="progress">[[ajax upload progressbar]]</div>
<div><input wicket:id="fileInput" id="fileInput" type="file" /></div>
<div><input type="submit" value="Upload!" name="upload" /></div>
<span wicket:id="progress">[[ajax upload progressbar]]</span>
</form>
<table>
<thead wicket:id="tableHead">
<tr>
<!-- <th></th>-->
<th>Name</th>
<th>Created</th>
<th>Size</th>
<th>Content Type</th>
<th>Uploader</th>
</tr>
</thead>
<tbody wicket:id="listFiles">
<table wicket:id="listFiles">
<tr wicket:id="content">
<!-- <td><a href="delete" wicket:id="delete"><span-->
<!-- wicket:id="deleteIcon" /></a></td>-->
<td><span wicket:id="name">name</span></td>
<td><span wicket:id="modified">modified</span></td>
<td><span wicket:id="size">size</span></td>
<td><span wicket:id="mimeType">mimeType</span></td>
<td><span wicket:id="userId">userId</span></td>
<td><a href="#" wicket:id="open">Open</a></td>
<td><a href="#" wicket:id="download">Download</a></td>
</tr>
</tbody>
</tr>
</table>
</wicket:panel>

@ -53,8 +53,6 @@ public class FileResourcePanel extends Panel{
add(new FeedbackPanel("feedbackPanel"));
this.resource = resource;
tableHead = new WebMarkupContainer("tableHead");
add(tableHead);
listFiles = new WebMarkupContainer("listFiles");
add(listFiles);
reloadFiles();
@ -72,9 +70,9 @@ public class FileResourcePanel extends Panel{
List<FileDescription> items = fileRepository.searchFiles(fileRepository.getResourcePath(resource.getId()));
if(items.isEmpty())
tableHead.setVisible(false);
listFiles.setVisible(false);
else
tableHead.setVisible(true);
listFiles.setVisible(true);
fileRepository.sortFileDescriptions(items, SortOrder.Name);
@ -106,16 +104,16 @@ public class FileResourcePanel extends Panel{
// });
inner.add(new BookmarkablePageLink<Void>("download", RepositoryDownloadPage.class, RepositoryDownloadPage.getPageParameters(desc)));
inner.add(new Label("modified", df.format(desc.getTargetLastModified())));
inner.add(new Label("size", fileRepository.formatBytes(desc.getSize())));
inner.add(new Label("mimeType", desc.getMimeType()));
String userId = "";
if(desc.getUserId() != null){
User user = userDao.load(desc.getUserId());
if(user != null)
userId = user.toString();
}
inner.add(new Label("userId", userId));
// inner.add(new Label("modified", df.format(desc.getTargetLastModified())));
// inner.add(new Label("size", fileRepository.formatBytes(desc.getSize())));
// inner.add(new Label("mimeType", desc.getMimeType()));
// String userId = "";
// if(desc.getUserId() != null){
// User user = userDao.load(desc.getUserId());
// if(user != null)
// userId = user.toString();
// }
// inner.add(new Label("userId", userId));
contents.add(inner);
}//for
}//reloadFiles

@ -0,0 +1,58 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<div wicket:id="listContainer">
<h2>Link Resources</h2>
<table wicket:id = "link-item" class = "link-resource-border">
<tr>
<td class="rating-cell">
<div class = "centered" ><a href="#" wicket:id="upLink"><img src="images/icons/arrow-up_16x16.png" class="icon-24" alt="Up"/></a></div>
<div class = "centered larger-rate-number" wicket:id="rate"></div>
<div class = "centered" ><a href="#" wicket:id="downLink"><img src="images/icons/arrow-down_16x16.png" class="icon-24" alt="Down"/></a></div>
</td>
<td>
<div><a href="#" target="_new" wicket:id="link" class="larger">this body will be replaced</a></div>
<div><strong>Info: </strong> <span wicket:id="info"></span></div>
<div><strong>Tag/s: </strong> <span wicket:id="tag"></span></div>
<div><strong>Created: </strong> <span wicket:id="date"></span></div>
<div><strong>Created by: </strong> <span wicket:id="user"></span></div>
<div><a href="#" wicket:id="bookmark">Resource Link</a></div>
<div><a href="#" wicket:id="showComments"><span wicket:id="commentNumber"></span></a></div>
</td>
</tr>
<tr>
<td class="rating-cell"></td>
<td><div wicket:id="commentThread"></div></td>
</tr>
</table>
<div wicket:id ="navigator"></div>
<h2>Video Resources</h2>
<div wicket:id ="embed-item" class="span-20 last">
<table>
<tr>
<td class="rating-cell">
<div class = "centered" ><a href="#" wicket:id="upLink"><img src="images/icons/arrow-up_16x16.png" class="icon-24" alt="Up"/></a></div>
<div class = "centered" wicket:id="rate"></div>
<div class = "centered" ><a href="#" wicket:id="downLink"><img src="images/icons/arrow-down_16x16.png" class="icon-24" alt="Down"/></a></div>
</td>
<td>
<div><strong>Info: </strong> <span wicket:id="info"></span></div>
<div><strong>Tag/s: </strong> <span wicket:id="tag"></span></div>
<div><strong>Created: </strong> <span wicket:id="date"></span></div>
<div><strong>Created by: </strong> <span wicket:id="user"></span></div>
<div><a href="#" wicket:id="bookmarkEmbed">Resource Link</a></div>
</td>
</tr>
</table>
<div wicket:id="embed"></div>
</div>
</div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,388 @@
/**
*
*/
package se.su.dsv.scipro.knol.resource.panels;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.list.PageableListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.commentthread.panel.CommentThreadPanel;
import se.su.dsv.scipro.data.dao.interfaces.CommentThreadDao;
import se.su.dsv.scipro.data.dao.interfaces.EmbedResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.LinkResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.RatableDao;
import se.su.dsv.scipro.data.dao.interfaces.RatingDao;
import se.su.dsv.scipro.data.dao.interfaces.ResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.EmbedResource;
import se.su.dsv.scipro.data.dataobjects.LinkResource;
import se.su.dsv.scipro.data.dataobjects.Rating;
import se.su.dsv.scipro.data.dataobjects.Tag;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.enums.RatingValue;
import se.su.dsv.scipro.knol.resource.page.EmbedResourcePage;
import se.su.dsv.scipro.knol.resource.page.EmbedWebMarkupContainer;
import se.su.dsv.scipro.knol.resource.page.LinkResourcePage;
import se.su.dsv.scipro.message.panels.CustomPagingNavigator;
/**
* @author Johan Aschan - aschan@dsv.su.se
*
*/
public class KnolPanel extends Panel {
@SpringBean
private RatingDao ratingDao;
@SpringBean
private UserDao userDao;
@SpringBean
private LinkResourceDao linkResourceDao;
@SpringBean
private EmbedResourceDao embedResourceDao;
@SpringBean
private CommentThreadDao commentThreadDao;
@SpringBean
private RatableDao ratableDao;
private WebMarkupContainer listContainer;
private PageableListView<LinkResource> linkListView;
private ListView<EmbedResource> embedListView;
private AjaxLink<String> expandLink;
private User user;
private int point;
private CustomPagingNavigator pagingNavigator;
public KnolPanel(String id) {
super(id);
user = userDao.load(SciProSession.get().getUser().getId());
loadListView();
listContainer = new WebMarkupContainer("listContainer");
listContainer.add(linkListView);
listContainer.add(embedListView);
listContainer.setOutputMarkupId(true);
listContainer.add(pagingNavigator = new CustomPagingNavigator(
"navigator", linkListView) {
@Override
public boolean isVisible() {
return linkListView.size() > 0;
}
});
add(listContainer);
}
public void loadListView() {
List<LinkResource> linkList = linkResourceDao.findAll();
Collections.sort(linkList, new Comparator<LinkResource>() {
@Override
public int compare(LinkResource o1, LinkResource o2) {
return Integer.valueOf(ratableDao.getRating(o2)).compareTo(
Integer.valueOf(ratableDao.getRating(o1)));
}
});
linkListView = new PageableListView<LinkResource>("link-item",
linkList, 20) {
@Override
protected void populateItem(final ListItem<LinkResource> item) {
final LinkResource link = item.getModelObject();
final List<Rating> ratingList = link.getRatingList();
boolean rated = false;
point = ratableDao.getRating(link);
Rating rating = null;
for (Rating r : ratingList) {
if (r.getUser().equals(user)) {
rating = r;
rated = true;
break;
}
}
if (rating == null) {
rating = new Rating();
rating.setUser(user);
}
final boolean finalRated = rated;
final Rating rating2 = rating;
item.add(new Label("rate", point + ""));
item.add(new AjaxLink<String>("upLink", new Model<String>("Up")) {
public void onClick(AjaxRequestTarget target) {
if (finalRated
&& rating2.getRatingValue() == RatingValue.UP) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
linkResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
link.setRatingList(ratingList);
rating2.setRatingValue(RatingValue.UP);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
linkResourceDao.save(link);
loadListView();
listContainer.removeAll();
listContainer.add(embedListView);
listContainer.add(pagingNavigator);
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
item.add(new AjaxLink<String>("downLink", new Model<String>(
"Down")) {
@Override
public void onClick(AjaxRequestTarget target) {
if (finalRated
&& rating2.getRatingValue() == RatingValue.DOWN) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
linkResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
rating2.setRatingValue(RatingValue.DOWN);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
linkResourceDao.save(link);
loadListView();
listContainer.removeAll();
listContainer.add(pagingNavigator);
listContainer.add(embedListView);
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
item.add(new Label("date", df.format(link.getDateCreated())));
item.add(new Label("user", link.getCreator().getFirstName()
+ " " + link.getCreator().getLastName()));
if (link.getLinkName() == null) {
item.add(new ExternalLink("link", link.getLink(), link
.getLink()));
} else {
item.add(new ExternalLink("link", link.getLink(), link
.getLinkName()));
}
item.add(new Label("info", link.getInfo()));
String tags = "";
int count = 0;
for (Tag tag : link.getTagList()) {
if (count == 0) {
tags = tag.getTag();
count++;
} else {
tags += ", " + tag.getTag();
}
}
final int commentSize;
if (commentThreadDao.getCommentThreadByClassAndId(link
.getClass().getCanonicalName(), link.getId()) == null) {
commentSize = 0;
} else {
commentSize = commentThreadDao
.getCommentThreadByClassAndId(
link.getClass().getCanonicalName(),
link.getId()).getCommentList().size();
}
item.add(new Label("tag", tags));
item.add(LinkResourcePage.getBookmarkablePageLink("bookmark",
link));
final Label comment = new Label("commentNumber", commentSize
+ " comments");
comment.setOutputMarkupId(true);
final CommentThreadPanel ctp = new CommentThreadPanel(
"commentThread", link.getClass().getCanonicalName(),
link.getId(), 5);
ctp.setOutputMarkupPlaceholderTag(true);
ctp.setVisible(false);
item.add(ctp);
item.add(new AjaxLink<String>("showComments",
new Model<String>("Show Comments")) {
private boolean clicked = false;
@Override
public void onClick(AjaxRequestTarget target) {
clicked = !clicked;
if (clicked) {
comment.setDefaultModelObject("Hide comments");
} else {
comment.setDefaultModelObject(+commentThreadDao
.getCommentThreadByClassAndId(
link.getClass().getCanonicalName(),
link.getId()).getCommentList()
.size()
+ " comments");
}
ctp.setVisible(clicked);
target.addComponent(ctp);
target.addComponent(comment);
}
}.add(comment));
};
};
List<EmbedResource> embedList = embedResourceDao.findAll();
Collections.sort(embedList, new Comparator<EmbedResource>() {
@Override
public int compare(EmbedResource o1, EmbedResource o2) {
return Integer.valueOf(ratableDao.getRating(o2)).compareTo(
Integer.valueOf(ratableDao.getRating(o1)));
}
});
embedListView = new ListView<EmbedResource>("embed-item", embedList) {
@Override
protected void populateItem(final ListItem<EmbedResource> item) {
final EmbedResource link = item.getModelObject();
final List<Rating> ratingList = link.getRatingList();
boolean rated = false;
point = 0;
Rating rating = null;
for (Rating r : ratingList) {
if (r.getUser().equals(user)) {
rating = r;
rated = true;
}
if (r.getRatingValue() == RatingValue.UP) {
point++;
} else {
point--;
}
}
if (rating == null) {
rating = new Rating();
rating.setUser(user);
}
final boolean finalRated = rated;
final Rating rating2 = rating;
item.add(new Label("rate", point + ""));
item.add(new AjaxLink<String>("upLink", new Model<String>("Up")) {
public void onClick(AjaxRequestTarget target) {
if (finalRated
&& rating2.getRatingValue() == RatingValue.UP) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
embedResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
link.setRatingList(ratingList);
rating2.setRatingValue(RatingValue.UP);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
embedResourceDao.save(link);
loadListView();
listContainer.removeAll();
listContainer.add(pagingNavigator);
listContainer.add(embedListView);
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
item.add(new AjaxLink<String>("downLink", new Model<String>(
"Down")) {
@Override
public void onClick(AjaxRequestTarget target) {
if (finalRated
&& rating2.getRatingValue() == RatingValue.DOWN) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
embedResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
rating2.setRatingValue(RatingValue.DOWN);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
embedResourceDao.save(link);
loadListView();
listContainer.removeAll();
listContainer.add(pagingNavigator);
listContainer.add(embedListView);
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
item.add(new Label("date", df.format(link.getDateCreated())));
item.add(new Label("user", link.getCreator().getFirstName()
+ " " + link.getCreator().getLastName()));
String tags = "";
int count = 0;
for (Tag tag : link.getTagList()) {
if (count == 0) {
tags = tag.getTag();
count++;
} else {
tags += ", " + tag.getTag();
}
}
item.add(new EmbedWebMarkupContainer("embed", link.getInfo()));
item.add(new Label("info", link.getInfo()));
item.add(new Label("tag", tags));
item.add(EmbedResourcePage.getBookmarkablePageLink(
"bookmarkEmbed", link));
// item.add(new FileResourcePanel("filePanel",
// item.getModelObject()));
};
};
}
}

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<div wicket:id ="listContainer">
<h2>Link Resources</h2>
<table>
<tr>
<td class="rating-cell">
<div class = "centered" ><a href="#" wicket:id="upLink"><img src="images/icons/arrow-up.png" class="icon-24" alt="Up"/></a></div>
<div class = "centered" wicket:id="rate"></div>
<div class = "centered" ><a href="#" wicket:id="downLink"><img src="images/icons/arrow-down.png" class="icon-24" alt="Down"/></a></div>
</td>
<td>
<div><a href="#" target="_new" wicket:id="link" class="large">this body will be replaced</a></div>
<div><strong>Info: </strong> <span wicket:id="info"></span></div>
<div><strong>Tag/s: </strong> <span wicket:id="tag"></span></div>
<div><strong>Created: </strong> <span wicket:id="date"></span></div>
<div><strong>Created by: </strong> <span wicket:id="user"></span></div>
</td>
</tr>
<tr>
<td colspan="2"><hr/></td>
</tr>
</table>
</div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,172 @@
/**
*
*/
package se.su.dsv.scipro.knol.resource.panels;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.SciProApplication;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.LinkResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.RatableDao;
import se.su.dsv.scipro.data.dao.interfaces.RatingDao;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.LinkResource;
import se.su.dsv.scipro.data.dataobjects.Rating;
import se.su.dsv.scipro.data.dataobjects.Tag;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.enums.RatingValue;
/**
* @author Johan Aschan - aschan@dsv.su.se
*
*/
public class LinkResourceBookmarkablePanel extends Panel {
@SpringBean
private RatingDao ratingDao;
@SpringBean
private UserDao userDao;
@SpringBean
private LinkResourceDao linkResourceDao;
@SpringBean
private RatableDao ratableDao;
private WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
private User user;
private int point;
private LinkResource link;
public LinkResourceBookmarkablePanel(String id, PageParameters pp) {
super(id);
Long linkId = pp.getAsLong("linkres");
if(linkId == null){
failAndRedirect();
}
else {
link = linkResourceDao.load(linkId);
if(link == null)
failAndRedirect();
}
user = userDao.load(SciProSession.get().getUser().getId());
loadListView();
listContainer.setOutputMarkupId(true);
add(listContainer);
// pp.put("res", link.getId());
// new BookmarkablePageLink<Void>("up", LinkResourcePage.class, pp);
}
private void failAndRedirect(){
throw new RestartResponseException(SciProApplication.get().getApplicationSettings().getAccessDeniedPage());
}
public void loadListView() {
final List<Rating> ratingList = link.getRatingList();
boolean rated = false;
point = ratableDao.getRating(link);
Rating rating = null;
for (Rating r : ratingList) {
if (r.getUser().equals(user)) {
rating = r;
rated = true;
break;
}
}
if (rating == null) {
rating = new Rating();
rating.setUser(user);
}
final boolean finalRated = rated;
final Rating rating2 = rating;
listContainer.add(new Label("rate", point + ""));
listContainer.add(new AjaxLink<String>("upLink", new Model<String>("Up")) {
public void onClick(AjaxRequestTarget target) {
if (finalRated && rating2.getRatingValue() == RatingValue.UP) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
linkResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
link.setRatingList(ratingList);
rating2.setRatingValue(RatingValue.UP);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
linkResourceDao.save(link);
listContainer.removeAll();
loadListView();
target.addComponent(listContainer);
}
});
listContainer.add(new AjaxLink<String>("downLink", new Model<String>("Down")) {
@Override
public void onClick(AjaxRequestTarget target) {
if (finalRated && rating2.getRatingValue() == RatingValue.DOWN) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
linkResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
rating2.setRatingValue(RatingValue.DOWN);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
linkResourceDao.save(link);
listContainer.removeAll();
loadListView();
target.addComponent(listContainer);
}
});
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
listContainer.add(new Label("date", df.format(link.getDateCreated())));
listContainer.add(new Label("user", link.getCreator().getFirstName() + " "
+ link.getCreator().getLastName()));
if (link.getLinkName() == null) {
listContainer.add(new ExternalLink("link", link.getLink(), link.getLink()));
} else {
listContainer.add(new ExternalLink("link", link.getLink(), link.getLinkName()));
}
listContainer.add(new Label("info", link.getInfo()));
String tags = "";
int count = 0;
for (Tag tag : link.getTagList()) {
if (count == 0) {
tags = tag.getTag();
count++;
} else {
tags += ", " + tag.getTag();
}
}
listContainer.add(new Label("tag", tags));
};
}

@ -0,0 +1,91 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<div wicket:id="feedbackPanel"></div>
<div class="span-6 last">
<form wicket:id="resourceForm">
<div wicket:id="editContainer">
<div class ="span-6 last">
<strong>Link Address:</strong>
</div>
<div class ="span-6 last">
<input type="text" wicket:id="link" class ="span-6" />
</div>
<div class ="span-6 last">
<strong>Link Name:</strong>
</div>
<div class ="span-6 last">
<input type="text" wicket:id="linkName"/>
</div>
<div class ="span-6 last">
<strong>Info:</strong>
</div>
<div class ="span-6 last">
<textarea wicket:id="info" ></textarea>
</div>
<div class ="span-6 last">
<strong>Tag/s:</strong>
</div>
<div class ="span-6 last">
<select wicket:id="selectedTagList" class = "span-8 last"></select>
</div>
<div class ="span-6 last">
<strong>Tags:</strong>
</div>
<div class ="span-6 last">
Separate by comma.
</div>
<div class ="span-6 last">
<input type="text" wicket:id="tags" class ="span-6" />
</div>
<div class ="span-6 last">
<input type="submit" wicket:id="submitButton" />
</div>
</div>
</form>
</div>
<div class="span-20 last">
<div wicket:id="listContainer">
<table>
<tr>
<td><strong>Rating</strong></td>
<td><strong>Up</strong></td>
<td><strong>Down</strong></td>
<td><strong>Created</strong></td>
<td><strong>By User</strong></td>
<td><strong>Link</strong></td>
<td><strong>Info</strong></td>
<td><strong>Tag/s</strong></td>
<!-- <td><strong>File</strong></td>-->
<td><strong>Edit</strong></td>
<td><strong>Delete</strong></td>
</tr>
<tr wicket:id = "link-item">
<td wicket:id="rate"></td>
<td><a href="#" wicket:id="upLink"><img src="images/icons/arrow-up.png" class="icon-24" alt="Up"/></a></td>
<td><a href="#" wicket:id="downLink"><img src="images/icons/arrow-down.png" class="icon-24" alt="Down"/></a></td>
<td wicket:id="date"></td>
<td wicket:id="user"></td>
<td><a href="#" target="_new" wicket:id="link">this body will be replaced</a></td>
<td wicket:id="info"></td>
<td wicket:id="tag"></td>
<!-- <td><span wicket:id="filePanel"></span></td> -->
<td><a href="#" wicket:id="editLink"><img src="images/icons/pencil.png" class="icon-24" alt="Edit"/></a></td>
<td><a href="#" wicket:id="deleteLink"><img src="images/icons/circle-delete.png" class="icon-24" alt="Delete"/></a></td>
</tr>
</table>
</div>
</div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,394 @@
/**
*
*/
package se.su.dsv.scipro.knol.resource.panels;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.LinkResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.RatableDao;
import se.su.dsv.scipro.data.dao.interfaces.RatingDao;
import se.su.dsv.scipro.data.dao.interfaces.ResourceDao;
import se.su.dsv.scipro.data.dao.interfaces.TagDao;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.LinkResource;
import se.su.dsv.scipro.data.dataobjects.Rating;
import se.su.dsv.scipro.data.dataobjects.Recipient;
import se.su.dsv.scipro.data.dataobjects.Resource;
import se.su.dsv.scipro.data.dataobjects.Tag;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.enums.RatingValue;
import se.su.dsv.scipro.knol.resource.page.EmbedWebMarkupContainer;
import se.su.dsv.scipro.knol.resource.page.ResourceModel;
/**
* @author Johan Aschan - aschan@dsv.su.se
*
*/
public class LinkResourcePanel extends Panel {
@SpringBean
private RatingDao ratingDao;
@SpringBean
private ResourceDao resourceDao;
@SpringBean
private UserDao userDao;
@SpringBean
private LinkResourceDao linkResourceDao;
@SpringBean
private TagDao tagDao;
@SpringBean
private RatableDao ratableDao;
private WebMarkupContainer listContainer;
private ListView<LinkResource> linkListView;
private Collection<Tag> selectedTagList = new ArrayList<Tag>();
private User user;
private int point;
private boolean edit = false;
private WebMarkupContainer editContainer;
private TextArea<String> info;
private TextField<String> linkAddress, linkName, tags;
private ListMultipleChoice<Tag> userMultipleChoiceList;
private LinkResource editLink;
private FeedbackPanel feedbackPanel;
private ResourceModel resourceModel;
public LinkResourcePanel(String id) {
super(id);
feedbackPanel = new FeedbackPanel("feedbackPanel");
add(feedbackPanel);
feedbackPanel.setOutputMarkupId(true);
user = userDao.load(SciProSession.get().getUser().getId());
loadListView();
listContainer = new WebMarkupContainer("listContainer");
listContainer.add(linkListView);
listContainer.setOutputMarkupId(true);
add(listContainer);
add(new LinkResourceForm("resourceForm"));
}
public class LinkResourceForm extends Form<ResourceModel> {
public LinkResourceForm(String name) {
super(name, new CompoundPropertyModel<ResourceModel>(
new ResourceModel()));
editContainer = new WebMarkupContainer("editContainer");
editContainer.setOutputMarkupId(true);
editContainer.add(info = new TextArea<String>("info"));
linkAddress = new TextField<String>("link");
tags = new TextField<String>("tags");
linkAddress.setRequired(true);
editContainer.add(linkAddress);
editContainer.add(tags);
editContainer.add(linkName = new TextField<String>("linkName"));
userMultipleChoiceList = new ListMultipleChoice<Tag>(
"selectedTagList", new ListModel<Tag>(tagDao.findAll()),
new ChoiceRenderer<Tag>("tag")) {
private static final long serialVersionUID = -7117603450416845711L;
@Override
protected CharSequence getDefaultChoice(Object selected) {
return "";
}
};
OnChangeAjaxBehavior userSelectBehaviour = new OnChangeAjaxBehavior() {
private static final long serialVersionUID = 3412906970812300312L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
selectedTagList = userMultipleChoiceList.getModelObject();
}
};
userMultipleChoiceList.add(userSelectBehaviour);
editContainer.add(userMultipleChoiceList);
editContainer.add(new AjaxButton("submitButton", new Model<String>(
"Save Resource")) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
LinkResource link = new LinkResource();
ResourceModel resourceModel = ((ResourceModel) form
.getModelObject());
if (edit) {
link = editLink;
link.setLastModified(new Date());
edit = false;
} else {
link = new LinkResource();
}
String tags = resourceModel.getTags();
if (tags != null) {
StringTokenizer stringTokenizer = new StringTokenizer(
tags, ",");
while (stringTokenizer.hasMoreTokens()) {
Tag tag = new Tag();
tag.setTag(stringTokenizer.nextToken().trim());
tag = tagDao.save(tag);
selectedTagList.add(tag);
}
}
link.setInfo(resourceModel.getInfo());
link.setLink(resourceModel.getLink());
link.setCreator(user);
link.setTagList(new ArrayList<Tag>(selectedTagList));
if (resourceModel.getLinkName() != null) {
link.setLinkName(resourceModel.getLinkName());
}
linkResourceDao.save(link);
loadListView();
resourceModel.setLink("");
resourceModel.setLinkName("");
resourceModel.setTags("");
resourceModel.setSelectedTagList(new ArrayList<Tag>());
resourceModel.setInfo("");
listContainer.removeAll();
listContainer.add(linkListView);
target.addComponent(feedbackPanel);
target.addComponent(listContainer);
target.addComponent(editContainer);
}
@Override
protected void onError(final AjaxRequestTarget target,
final Form form) {
target.addComponent(feedbackPanel);
}
});
add(editContainer);
}
}
public void loadListView() {
List<LinkResource> linkList = linkResourceDao.findAll();
Collections.sort(linkList, new Comparator<LinkResource>() {
@Override
public int compare(LinkResource o1, LinkResource o2) {
return Integer.valueOf(ratableDao.getRating(o2)).compareTo(
Integer.valueOf(ratableDao.getRating(o1)));
}
});
linkListView = new ListView<LinkResource>("link-item", linkList) {
@Override
protected void populateItem(final ListItem<LinkResource> item) {
final LinkResource link = item.getModelObject();
final List<Rating> ratingList = link.getRatingList();
boolean rated = false;
point = ratableDao.getRating(link);
Rating rating = null;
for (Rating r : ratingList) {
if (r.getUser().equals(user)) {
rating = r;
rated = true;
break;
}
}
if (rating == null) {
rating = new Rating();
rating.setUser(user);
}
final boolean finalRated = rated;
final Rating rating2 = rating;
item.add(new Label("rate", point + ""));
item.add(new AjaxLink<String>("upLink", new Model<String>("Up")) {
public void onClick(AjaxRequestTarget target) {
if (finalRated
&& rating2.getRatingValue() == RatingValue.UP) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
linkResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
link.setRatingList(ratingList);
rating2.setRatingValue(RatingValue.UP);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
linkResourceDao.save(link);
loadListView();
listContainer.removeAll();
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
item.add(new AjaxLink<String>("downLink", new Model<String>(
"Down")) {
@Override
public void onClick(AjaxRequestTarget target) {
if (finalRated
&& rating2.getRatingValue() == RatingValue.DOWN) {
ratingList.remove(rating2);
link.setRatingList(ratingList);
linkResourceDao.save(link);
Rating rating3 = ratingDao.reLoad(rating2);
ratingDao.delete(rating3);
} else {
rating2.setRatingValue(RatingValue.DOWN);
Rating rating3 = ratingDao.save(rating2);
ratingList.remove(rating2);
ratingList.add(rating3);
}
linkResourceDao.save(link);
loadListView();
listContainer.removeAll();
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
item.add(new Label("date", df.format(link.getDateCreated())));
item.add(new Label("user", link.getCreator().getFirstName()
+ " " + link.getCreator().getLastName()));
if (link.getLinkName() == null) {
item.add(new ExternalLink("link", link.getLink(), link
.getLink()));
} else {
item.add(new ExternalLink("link", link.getLink(), link
.getLinkName()));
}
item.add(new Label("info", link.getInfo()));
String tags = "";
int count = 0;
for (Tag tag : link.getTagList()) {
if (count == 0) {
tags = tag.getTag();
count++;
} else {
tags += ", " + tag.getTag();
}
}
item.add(new Label("tag", tags));
item.add(new AjaxLink<Recipient>("deleteLink") {
@Override
public void onClick(AjaxRequestTarget target) {
LinkResource link2 = linkResourceDao.reLoad(link);
if (link2.equals(editLink)) {
edit = false;
target.addComponent(editContainer);
}
linkResourceDao.delete(link2);
loadListView();
listContainer.removeAll();
listContainer.add(linkListView);
target.addComponent(listContainer);
}
});
item.add(new AjaxLink<Recipient>("editLink") {
@Override
public void onClick(AjaxRequestTarget target) {
edit = true;
editLink = linkResourceDao.reLoad(link);
linkAddress.setModelObject(editLink.getLink());
linkName.setModelObject(editLink.getLinkName());
info.setModelObject(editLink.getInfo());
// listChoice = new ListMultipleChoice("choices",
// MANY_CHOICES)
userMultipleChoiceList.setModelObject(editLink
.getTagList());
// userMultipleChoiceList.setModelObject(editLink
// .getTagList());
target.addComponent(editContainer);
}
});
// item.add(new FileResourcePanel("filePanel",
// item.getModelObject()));
};
};
}
// public void generateRatings(LinkResource resource) {
// Resource resource1 = linkResourceDao.reLoad(resource);
// List<Rating> ratingList = resource1.getRatingList();
// for (Rating r : ratingList) {
// if (r.getRatingValue() == RatingValue.UP) {
// point++;
// } else {
// point--;
// }
// }
// }
// public int getRating(LinkResource resource) {
// Resource resource1 = linkResourceDao.reLoad(resource);
// List<Rating> ratingList = resource1.getRatingList();
// int ratingValue = 0;
// for (Rating r : ratingList) {
// if (r.getRatingValue() == RatingValue.UP) {
// ratingValue++;
// } else {
// ratingValue--;
// }
// }
// return ratingValue;
// }
}

@ -0,0 +1,2 @@
resourceForm.editContainer.link=Link Address
Required='${label}' is required