forked from Archives/Athou_commafeed
major cleanup
This commit is contained in:
@@ -4,7 +4,6 @@ import javax.enterprise.inject.spi.BeanManager;
|
||||
import javax.naming.InitialContext;
|
||||
import javax.naming.NamingException;
|
||||
|
||||
import org.apache.wicket.Application;
|
||||
import org.apache.wicket.Page;
|
||||
import org.apache.wicket.Session;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
@@ -28,14 +27,10 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.commafeed.frontend.components.auth.LoginPage;
|
||||
import com.commafeed.frontend.pages.feed.FeedSubscriptionsPage;
|
||||
import com.commafeed.frontend.components.auth.LogoutPage;
|
||||
import com.commafeed.frontend.pages.home.HomePage;
|
||||
import com.commafeed.frontend.utils.exception.DisplayExceptionPage;
|
||||
|
||||
import de.agilecoders.wicket.Bootstrap;
|
||||
import de.agilecoders.wicket.settings.BootstrapSettings;
|
||||
import de.agilecoders.wicket.webjars.util.WicketWebjars;
|
||||
|
||||
public class CommaFeedApplication extends AuthenticatedWebApplication {
|
||||
|
||||
private Logger log = LoggerFactory.getLogger(CommaFeedApplication.class);
|
||||
@@ -45,7 +40,8 @@ public class CommaFeedApplication extends AuthenticatedWebApplication {
|
||||
super.init();
|
||||
|
||||
mountPage("login", LoginPage.class);
|
||||
mountPage("/subscriptions/all", FeedSubscriptionsPage.class);
|
||||
mountPage("logout", LogoutPage.class);
|
||||
mountPage("error", DisplayExceptionPage.class);
|
||||
|
||||
setupInjection();
|
||||
|
||||
@@ -75,12 +71,7 @@ public class CommaFeedApplication extends AuthenticatedWebApplication {
|
||||
new DisplayExceptionPage(ex)), policy);
|
||||
}
|
||||
});
|
||||
mountPage("/error", DisplayExceptionPage.class);
|
||||
|
||||
BootstrapSettings settings = new BootstrapSettings();
|
||||
Bootstrap.install(Application.get(), settings);
|
||||
|
||||
WicketWebjars.install(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<div class="css-treeview">
|
||||
<ul>
|
||||
<li wicket:id="tree"></li>
|
||||
</ul>
|
||||
</div>
|
||||
<wicket:fragment wicket:id="node">
|
||||
<input type="checkbox" wicket:id="checkbox" />
|
||||
<label wicket:id="label">
|
||||
<span wicket:id="content"></span>
|
||||
</label>
|
||||
<ul>
|
||||
<li wicket:id="node"></li>
|
||||
</ul>
|
||||
</wicket:fragment>
|
||||
<wicket:fragment wicket:id="leaf">
|
||||
<a wicket:id="link"></a>
|
||||
</wicket:fragment>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,83 +0,0 @@
|
||||
package com.commafeed.frontend.components;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.apache.wicket.AttributeModifier;
|
||||
import org.apache.wicket.Component;
|
||||
import org.apache.wicket.markup.head.IHeaderResponse;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.form.CheckBox;
|
||||
import org.apache.wicket.markup.html.form.FormComponentLabel;
|
||||
import org.apache.wicket.markup.html.panel.Fragment;
|
||||
import org.apache.wicket.markup.html.panel.Panel;
|
||||
import org.apache.wicket.markup.repeater.RepeatingView;
|
||||
import org.apache.wicket.model.IDetachable;
|
||||
import org.apache.wicket.model.IModel;
|
||||
|
||||
import com.commafeed.frontend.references.csstree.CssTreeViewReference;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public abstract class CssTreeView<T, V> extends Panel {
|
||||
|
||||
private ITreeProvider<T, V> provider;
|
||||
|
||||
public CssTreeView(String id, final ITreeProvider<T, V> provider) {
|
||||
super(id);
|
||||
setRenderBodyOnly(true);
|
||||
this.provider = provider;
|
||||
|
||||
RepeatingView view = new RepeatingView("tree");
|
||||
addNode(null, view);
|
||||
add(view);
|
||||
}
|
||||
|
||||
private void addNode(T node, RepeatingView view) {
|
||||
for (T child : provider.getChildren(node)) {
|
||||
Fragment fragment = new Fragment(view.newChildId(), "node",
|
||||
CssTreeView.this);
|
||||
CheckBox checkBox = new CheckBox("checkbox");
|
||||
checkBox.add(new AttributeModifier("checked", "checked"));
|
||||
fragment.add(checkBox);
|
||||
fragment.add(new FormComponentLabel("label", checkBox)
|
||||
.add(new Label("content", provider.getChildLabel(child))
|
||||
.setRenderBodyOnly(true)));
|
||||
|
||||
RepeatingView viewChild = new RepeatingView("node");
|
||||
addNode(child, viewChild);
|
||||
fragment.add(viewChild);
|
||||
view.add(fragment);
|
||||
}
|
||||
for (V leaf : provider.getLeaves(node)) {
|
||||
Fragment fragment = new Fragment(view.newChildId(), "leaf",
|
||||
CssTreeView.this);
|
||||
fragment.add(newLink("link", provider.model(leaf)));
|
||||
view.add(fragment);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetach() {
|
||||
super.onDetach();
|
||||
provider.detach();
|
||||
}
|
||||
|
||||
protected abstract Component newLink(String markupId, IModel<V> model);
|
||||
|
||||
@Override
|
||||
public void renderHead(IHeaderResponse response) {
|
||||
super.renderHead(response);
|
||||
CssTreeViewReference.render(response);
|
||||
}
|
||||
|
||||
public static interface ITreeProvider<T, V> extends IDetachable {
|
||||
|
||||
Collection<T> getChildren(T node);
|
||||
|
||||
IModel<String> getChildLabel(T node);
|
||||
|
||||
Collection<V> getLeaves(T node);
|
||||
|
||||
IModel<V> model(V object);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org">
|
||||
<head>
|
||||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="vendor/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body>
|
||||
@@ -12,5 +14,6 @@
|
||||
<span wicket:id="login"></span>
|
||||
</div>
|
||||
</div>
|
||||
<script src="vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,21 +1,11 @@
|
||||
package com.commafeed.frontend.components.auth;
|
||||
|
||||
import org.apache.wicket.markup.head.IHeaderResponse;
|
||||
import org.apache.wicket.markup.html.WebPage;
|
||||
|
||||
import de.agilecoders.wicket.Bootstrap;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class LoginPage extends WebPage {
|
||||
|
||||
public LoginPage() {
|
||||
add(new LoginPanel("login"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderHead(IHeaderResponse response) {
|
||||
super.renderHead(response);
|
||||
Bootstrap.renderHead(response);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.commafeed.frontend.components.auth;
|
||||
|
||||
import org.apache.wicket.markup.html.WebPage;
|
||||
|
||||
public class LogoutPage extends WebPage {
|
||||
public LogoutPage() {
|
||||
getSession().invalidate();
|
||||
setResponsePage(getApplication().getHomePage());
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<wicket:child />
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
package com.commafeed.frontend.pages;
|
||||
|
||||
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
|
||||
import org.apache.wicket.markup.head.IHeaderResponse;
|
||||
import org.apache.wicket.markup.html.WebPage;
|
||||
|
||||
import com.commafeed.frontend.components.auth.Role;
|
||||
|
||||
import de.agilecoders.wicket.Bootstrap;
|
||||
|
||||
@AuthorizeInstantiation(Role.USER)
|
||||
@SuppressWarnings("serial")
|
||||
public abstract class BasePage extends WebPage {
|
||||
|
||||
@Override
|
||||
public void renderHead(IHeaderResponse response) {
|
||||
super.renderHead(response);
|
||||
Bootstrap.renderHead(response);
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,12 @@
|
||||
package com.commafeed.frontend.pages;
|
||||
|
||||
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
|
||||
import org.apache.wicket.markup.html.WebPage;
|
||||
import org.apache.wicket.request.handler.TextRequestHandler;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
|
||||
import com.commafeed.frontend.components.auth.Role;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@AuthorizeInstantiation(Role.USER)
|
||||
public abstract class JSONPage extends WebPage {
|
||||
|
||||
public JSONPage() {
|
||||
|
||||
@@ -1,139 +0,0 @@
|
||||
package com.commafeed.frontend.pages.feed;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.commons.lang.ObjectUtils;
|
||||
|
||||
import com.commafeed.backend.dao.FeedCategoryService;
|
||||
import com.commafeed.backend.dao.FeedSubscriptionService;
|
||||
import com.commafeed.frontend.CommaFeedSession;
|
||||
import com.commafeed.frontend.pages.JSONPage;
|
||||
import com.commafeed.frontend.utils.ModelFactory.MF;
|
||||
import com.commafeed.model.FeedCategory;
|
||||
import com.commafeed.model.FeedSubscription;
|
||||
import com.commafeed.model.User;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class FeedSubscriptionsPage extends JSONPage {
|
||||
|
||||
@Inject
|
||||
FeedSubscriptionService feedSubscriptionService;
|
||||
|
||||
@Inject
|
||||
FeedCategoryService FeedCategoryService;
|
||||
|
||||
@Override
|
||||
protected Object getObject() {
|
||||
|
||||
User user = CommaFeedSession.get().getUser();
|
||||
List<FeedCategory> categories = FeedCategoryService.findAll(user);
|
||||
|
||||
Category root = new Category();
|
||||
addChildren(categories, root);
|
||||
for (FeedSubscription subscription : feedSubscriptionService
|
||||
.findByField(MF.i(MF.p(FeedSubscription.class).getCategory()),
|
||||
null)) {
|
||||
Subscription sub = new Subscription();
|
||||
sub.setId(subscription.getId());
|
||||
sub.setName(subscription.getTitle());
|
||||
sub.setUnread(77);
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
private void addChildren(List<FeedCategory> categories, Category current) {
|
||||
for (FeedCategory category : categories) {
|
||||
if ((category.getParent() == null && current.getId() == null)
|
||||
|| (category.getParent() != null && (ObjectUtils.equals(
|
||||
category.getParent().getId(), current.getId())))) {
|
||||
Category child = new Category();
|
||||
child.setId(category.getId());
|
||||
child.setName(category.getName());
|
||||
addChildren(categories, child);
|
||||
for (FeedSubscription subscription : category
|
||||
.getSubscriptions()) {
|
||||
Subscription sub = new Subscription();
|
||||
sub.setId(subscription.getId());
|
||||
sub.setName(subscription.getTitle());
|
||||
sub.setUnread(77);
|
||||
}
|
||||
current.getChildren().add(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class Category {
|
||||
private Long id;
|
||||
private String name;
|
||||
private List<Category> children = Lists.newArrayList();
|
||||
private List<Subscription> feeds = Lists.newArrayList();
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<Category> getChildren() {
|
||||
return children;
|
||||
}
|
||||
|
||||
public void setChildren(List<Category> children) {
|
||||
this.children = children;
|
||||
}
|
||||
|
||||
public List<Subscription> getFeeds() {
|
||||
return feeds;
|
||||
}
|
||||
|
||||
public void setFeeds(List<Subscription> feeds) {
|
||||
this.feeds = feeds;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Subscription {
|
||||
private Long id;
|
||||
private String name;
|
||||
private int unread;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getUnread() {
|
||||
return unread;
|
||||
}
|
||||
|
||||
public void setUnread(int unread) {
|
||||
this.unread = unread;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org">
|
||||
<body>
|
||||
<wicket:extend>
|
||||
<div class="container-fluid">
|
||||
<div class="row-fluid">
|
||||
<div class="span2">
|
||||
<div wicket:id="tree"></div>
|
||||
</div>
|
||||
<div class="span10">
|
||||
<div wicket:id="entries"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</wicket:extend>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,129 +0,0 @@
|
||||
package com.commafeed.frontend.pages.feed;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.wicket.Component;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.LoadableDetachableModel;
|
||||
import org.apache.wicket.model.Model;
|
||||
|
||||
import com.commafeed.backend.dao.FeedCategoryService;
|
||||
import com.commafeed.backend.dao.FeedSubscriptionService;
|
||||
import com.commafeed.frontend.CommaFeedSession;
|
||||
import com.commafeed.frontend.components.CssTreeView;
|
||||
import com.commafeed.frontend.components.CssTreeView.ITreeProvider;
|
||||
import com.commafeed.frontend.pages.BasePage;
|
||||
import com.commafeed.frontend.utils.ModelFactory.MF;
|
||||
import com.commafeed.frontend.utils.stateless.StatelessAjaxLink;
|
||||
import com.commafeed.model.FeedCategory;
|
||||
import com.commafeed.model.FeedEntryStatus;
|
||||
import com.commafeed.model.FeedSubscription;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Collections2;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class FeedViewPage extends BasePage {
|
||||
|
||||
@Inject
|
||||
FeedSubscriptionService feedSubscriptionService;
|
||||
|
||||
@Inject
|
||||
FeedCategoryService feedCategoryService;
|
||||
|
||||
public FeedViewPage() {
|
||||
add(newTree("tree"));
|
||||
add(newFeedsPanel("entries"));
|
||||
}
|
||||
|
||||
private Component newTree(String markupId) {
|
||||
ITreeProvider<FeedCategory, FeedSubscription> provider = new ITreeProvider<FeedCategory, FeedSubscription>() {
|
||||
|
||||
private List<FeedCategory> cats;
|
||||
private List<FeedSubscription> subsWithoutCategory;
|
||||
|
||||
private void init() {
|
||||
if (cats == null) {
|
||||
cats = feedCategoryService.findAll(CommaFeedSession.get()
|
||||
.getUser());
|
||||
}
|
||||
if (subsWithoutCategory == null) {
|
||||
subsWithoutCategory = feedSubscriptionService.findByField(
|
||||
MF.i(MF.p(FeedSubscription.class).getCategory()),
|
||||
null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<FeedCategory> getChildren(final FeedCategory node) {
|
||||
init();
|
||||
return Lists.newArrayList(Collections2.filter(cats,
|
||||
new Predicate<FeedCategory>() {
|
||||
@Override
|
||||
public boolean apply(FeedCategory cat) {
|
||||
return (node == null && cat.getParent() == null)
|
||||
|| (cat.getParent() != null
|
||||
&& node != null && cat
|
||||
.getParent().getId() == node
|
||||
.getId());
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<FeedSubscription> getLeaves(FeedCategory node) {
|
||||
init();
|
||||
if (node == null) {
|
||||
return subsWithoutCategory;
|
||||
}
|
||||
return node.getSubscriptions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IModel<String> getChildLabel(FeedCategory node) {
|
||||
return Model.of(node.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public IModel<FeedSubscription> model(FeedSubscription object) {
|
||||
return Model.of(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detach() {
|
||||
cats = null;
|
||||
}
|
||||
|
||||
};
|
||||
return new CssTreeView<FeedCategory, FeedSubscription>(markupId,
|
||||
provider) {
|
||||
@Override
|
||||
protected Component newLink(String markupId,
|
||||
final IModel<FeedSubscription> model) {
|
||||
return new StatelessAjaxLink<Void>(markupId) {
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target) {
|
||||
System.out.println(model.getObject().getId());
|
||||
}
|
||||
}.setBody(Model.of(model.getObject().getTitle()));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private Component newFeedsPanel(String markupId) {
|
||||
|
||||
new LoadableDetachableModel<List<FeedEntryStatus>>() {
|
||||
@Override
|
||||
protected List<FeedEntryStatus> load() {
|
||||
|
||||
return null;
|
||||
}
|
||||
};
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<div class="accordion-group" wicket:id="entry">
|
||||
<div class="accordion-heading">
|
||||
<a class="accordion-toggle" data-toggle="collapse" wicket:id="link"
|
||||
data-parent="#accordion2" href="#collapseOne"> Collapsible
|
||||
Group Item #1 </a>
|
||||
</div>
|
||||
<div id="collapseOne" class="accordion-body collapse in" wicket:id="body">
|
||||
<div class="accordion-inner" wicket:id="content">Anim pariatur cliche...</div>
|
||||
</div>
|
||||
</div>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,54 +0,0 @@
|
||||
package com.commafeed.frontend.pages.feed.components;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.wicket.AttributeModifier;
|
||||
import org.apache.wicket.markup.ComponentTag;
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.list.ListItem;
|
||||
import org.apache.wicket.markup.html.list.ListView;
|
||||
import org.apache.wicket.markup.html.panel.GenericPanel;
|
||||
import org.apache.wicket.model.IModel;
|
||||
|
||||
import com.commafeed.model.FeedEntryStatus;
|
||||
|
||||
import de.agilecoders.wicket.markup.html.bootstrap.behavior.CssClassNameAppender;
|
||||
import de.agilecoders.wicket.util.Components;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class FeedsPanel extends GenericPanel<List<FeedEntryStatus>> {
|
||||
|
||||
private AttributeModifier dataParentModifier;
|
||||
|
||||
public FeedsPanel(String id, IModel<List<FeedEntryStatus>> model) {
|
||||
super(id, model);
|
||||
add(new CssClassNameAppender("accordion"));
|
||||
|
||||
dataParentModifier = new AttributeModifier("data-parent", getMarkupId());
|
||||
|
||||
ListView<FeedEntryStatus> listView = new ListView<FeedEntryStatus>(
|
||||
"entry", model) {
|
||||
@Override
|
||||
protected void populateItem(ListItem<FeedEntryStatus> item) {
|
||||
FeedEntryStatus status = item.getModelObject();
|
||||
WebMarkupContainer link = new WebMarkupContainer("link");
|
||||
link.add(dataParentModifier);
|
||||
|
||||
WebMarkupContainer body = new WebMarkupContainer("body");
|
||||
body.add(new Label("content", status.getEntry().getContent())
|
||||
.setEscapeModelStrings(false));
|
||||
|
||||
link.add(new AttributeModifier("href", "#" + body.getMarkupId()));
|
||||
}
|
||||
};
|
||||
add(listView);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onComponentTag(ComponentTag tag) {
|
||||
super.onComponentTag(tag);
|
||||
Components.assertTag(this, tag, "div");
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org">
|
||||
<head>
|
||||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="vendor/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
|
||||
<link href="vendor/csstreeview/css3-treeview.css" rel="stylesheet">
|
||||
<link href="css/app.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<wicket:extend>
|
||||
<div ng-app="commafeed">
|
||||
<ng:view></ng:view>
|
||||
</div>
|
||||
</wicket:extend>
|
||||
<div ng-app="commafeed">
|
||||
<ng:view></ng:view>
|
||||
</div>
|
||||
|
||||
<script src="vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script src="vendor/angular/angular.min.js"></script>
|
||||
<script src="js/main.js"></script>
|
||||
<script src="js/controllers.js"></script>
|
||||
<script src="js/directives.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,34 +1,12 @@
|
||||
package com.commafeed.frontend.pages.home;
|
||||
|
||||
import org.apache.wicket.markup.head.CssHeaderItem;
|
||||
import org.apache.wicket.markup.head.IHeaderResponse;
|
||||
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
|
||||
import org.apache.wicket.request.Url;
|
||||
import org.apache.wicket.request.resource.UrlResourceReference;
|
||||
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
|
||||
import org.apache.wicket.markup.html.WebPage;
|
||||
|
||||
import com.commafeed.frontend.pages.BasePage;
|
||||
import com.commafeed.frontend.references.angular.AngularReference;
|
||||
import com.commafeed.frontend.references.csstree.CssTreeViewReference;
|
||||
import com.commafeed.frontend.components.auth.Role;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class HomePage extends BasePage {
|
||||
|
||||
@Override
|
||||
public void renderHead(IHeaderResponse response) {
|
||||
super.renderHead(response);
|
||||
AngularReference.render(response);
|
||||
CssTreeViewReference.render(response);
|
||||
response.render(CssHeaderItem.forReference(new UrlResourceReference(Url
|
||||
.parse("css/app.css"))));
|
||||
|
||||
response.render(JavaScriptHeaderItem
|
||||
.forReference(new UrlResourceReference(Url.parse("js/main.js"))));
|
||||
response.render(JavaScriptHeaderItem
|
||||
.forReference(new UrlResourceReference(Url
|
||||
.parse("js/directives.js"))));
|
||||
response.render(JavaScriptHeaderItem
|
||||
.forReference(new UrlResourceReference(Url
|
||||
.parse("js/controllers.js"))));
|
||||
}
|
||||
@AuthorizeInstantiation(Role.USER)
|
||||
public class HomePage extends WebPage {
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
package com.commafeed.frontend.references.angular;
|
||||
|
||||
import org.apache.wicket.markup.head.IHeaderResponse;
|
||||
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
|
||||
|
||||
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class AngularReference extends WebjarsJavaScriptResourceReference {
|
||||
|
||||
private static AngularReference instance = new AngularReference();
|
||||
|
||||
public AngularReference() {
|
||||
super("angularjs/current/angular.min.js");
|
||||
}
|
||||
|
||||
public static void render(IHeaderResponse response) {
|
||||
response.render(JavaScriptHeaderItem.forReference(instance));
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package com.commafeed.frontend.references.csstree;
|
||||
|
||||
import org.apache.wicket.markup.head.CssHeaderItem;
|
||||
import org.apache.wicket.markup.head.IHeaderResponse;
|
||||
import org.apache.wicket.request.resource.CssResourceReference;
|
||||
|
||||
/**
|
||||
* http://experiments.wemakesites.net/css3-treeview.html
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class CssTreeViewReference extends CssResourceReference {
|
||||
private static CssTreeViewReference instance = new CssTreeViewReference();
|
||||
|
||||
public CssTreeViewReference() {
|
||||
super(CssTreeViewReference.class, "css3-treeview.css");
|
||||
}
|
||||
|
||||
public static void render(IHeaderResponse response) {
|
||||
response.render(CssHeaderItem.forReference(instance));
|
||||
}
|
||||
|
||||
public static CssTreeViewReference get() {
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
.css-treeview ul,
|
||||
.css-treeview li
|
||||
{
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.css-treeview input
|
||||
{
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.css-treeview
|
||||
{
|
||||
font: normal 11px "Segoe UI", Arial, Sans-serif;
|
||||
-moz-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.css-treeview a
|
||||
{
|
||||
color: #00f;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.css-treeview a:hover
|
||||
{
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.css-treeview input + label + ul
|
||||
{
|
||||
margin: 0 0 0 22px;
|
||||
}
|
||||
|
||||
.css-treeview input ~ ul
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.css-treeview label,
|
||||
.css-treeview label::before
|
||||
{
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.css-treeview input:disabled + label
|
||||
{
|
||||
cursor: default;
|
||||
opacity: .6;
|
||||
}
|
||||
|
||||
.css-treeview input:checked:not(:disabled) ~ ul
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
|
||||
.css-treeview label,
|
||||
.css-treeview label::before
|
||||
{
|
||||
background: url("icons.png") no-repeat;
|
||||
}
|
||||
|
||||
.css-treeview label,
|
||||
.css-treeview a,
|
||||
.css-treeview label::before
|
||||
{
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
line-height: 16px;,
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.css-treeview label
|
||||
{
|
||||
background-position: 18px 0;
|
||||
}
|
||||
|
||||
.css-treeview label::before
|
||||
{
|
||||
content: "";
|
||||
width: 16px;
|
||||
margin: 0 22px 0 0;
|
||||
vertical-align: middle;
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
|
||||
.css-treeview input:checked + label::before
|
||||
{
|
||||
background-position: 0 -16px;
|
||||
}
|
||||
|
||||
/* webkit adjacent element selector bugfix */
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0)
|
||||
{
|
||||
.css-treeview
|
||||
{
|
||||
-webkit-animation: webkit-adjacent-element-selector-bugfix infinite 1s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes webkit-adjacent-element-selector-bugfix
|
||||
{
|
||||
from
|
||||
{
|
||||
padding: 0;
|
||||
}
|
||||
to
|
||||
{
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 762 B |
@@ -1,40 +0,0 @@
|
||||
package com.commafeed.frontend.utils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.LoadableDetachableModel;
|
||||
import org.apache.wicket.model.Model;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public class MapToListModel<K, V> extends
|
||||
LoadableDetachableModel<List<Map.Entry<K, V>>> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private IModel<Map<K, V>> model;
|
||||
|
||||
public MapToListModel(Map<K, V> map) {
|
||||
this.model = Model.ofMap(map);
|
||||
}
|
||||
|
||||
public MapToListModel(IModel<Map<K, V>> model) {
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Entry<K, V>> load() {
|
||||
Map<K, V> map = model.getObject();
|
||||
return map == null ? null : Lists.newArrayList(map.entrySet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detach() {
|
||||
super.detach();
|
||||
model.detach();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.commafeed.frontend.utils;
|
||||
|
||||
import java.security.Principal;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -19,9 +18,6 @@ import org.apache.wicket.request.resource.JavaScriptResourceReference;
|
||||
import org.apache.wicket.util.io.IOUtils;
|
||||
import org.apache.wicket.util.template.PackageTextTemplate;
|
||||
|
||||
import de.agilecoders.wicket.webjars.request.resource.WebjarsCssResourceReference;
|
||||
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
|
||||
|
||||
public class WicketUtils {
|
||||
|
||||
public static void loadJQuery(IHeaderResponse response) {
|
||||
@@ -35,12 +31,6 @@ public class WicketUtils {
|
||||
.getSimpleName() + ".js"));
|
||||
}
|
||||
|
||||
public static JavaScriptHeaderItem buildJavaScriptWebJarHeaderItem(
|
||||
String name) {
|
||||
return JavaScriptHeaderItem
|
||||
.forReference(new WebjarsJavaScriptResourceReference(name));
|
||||
}
|
||||
|
||||
public static void loadJS(IHeaderResponse response, Class<?> klass) {
|
||||
response.render(buildJavaScriptHeaderItem(klass));
|
||||
}
|
||||
@@ -60,20 +50,11 @@ public class WicketUtils {
|
||||
response.render(result);
|
||||
}
|
||||
|
||||
public static void loadWebJarJS(IHeaderResponse response, String name) {
|
||||
response.render(buildJavaScriptWebJarHeaderItem(name));
|
||||
}
|
||||
|
||||
public static CssHeaderItem buildCssHeaderItem(Class<?> klass) {
|
||||
return CssHeaderItem.forReference(new CssResourceReference(klass, klass
|
||||
.getSimpleName() + ".css"));
|
||||
}
|
||||
|
||||
public static CssHeaderItem buildCssWebJarHeaderItem(String name) {
|
||||
return CssHeaderItem
|
||||
.forReference(new WebjarsCssResourceReference(name));
|
||||
}
|
||||
|
||||
public static void loadCSS(IHeaderResponse response, Class<?> klass) {
|
||||
response.render(buildCssHeaderItem(klass));
|
||||
}
|
||||
@@ -93,10 +74,6 @@ public class WicketUtils {
|
||||
response.render(result);
|
||||
}
|
||||
|
||||
public static void loadWebJarCSS(IHeaderResponse response, String name) {
|
||||
response.render(buildCssWebJarHeaderItem(name));
|
||||
}
|
||||
|
||||
public static HttpServletRequest getHttpServletRequest() {
|
||||
ServletWebRequest servletWebRequest = (ServletWebRequest) RequestCycle
|
||||
.get().getRequest();
|
||||
@@ -108,28 +85,4 @@ public class WicketUtils {
|
||||
.getResponse();
|
||||
return (HttpServletResponse) webResponse.getContainerResponse();
|
||||
}
|
||||
|
||||
public static Principal getPrincipal() {
|
||||
return getHttpServletRequest().getUserPrincipal();
|
||||
}
|
||||
|
||||
public static String getPrincipalName() {
|
||||
Principal principal = getPrincipal();
|
||||
return principal == null ? null : principal.toString();
|
||||
}
|
||||
|
||||
public static boolean isUserInRole(String role) {
|
||||
return getHttpServletRequest().isUserInRole(role);
|
||||
}
|
||||
|
||||
public static boolean isUserInRoles(String... roles) {
|
||||
boolean inRoles = true;
|
||||
for (String role : roles) {
|
||||
if (!isUserInRole(role)) {
|
||||
inRoles = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return inRoles;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
xmlns:wicket="http://git-wip-us.apache.org/repos/asf/wicket/repo?p=wicket.git;a=blob_plain;f=wicket-core/src/main/resources/META-INF/wicket-1.5.xsd;hb=master">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="vendor/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
|
||||
<title>Error</title>
|
||||
</head>
|
||||
|
||||
@@ -27,5 +29,6 @@
|
||||
<pre wicket:id="stacktrace"></pre>
|
||||
</div>
|
||||
</div>
|
||||
<script src="vendor/bootstrap/js/bootstrap.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -3,12 +3,11 @@ package com.commafeed.frontend.utils.exception;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
import org.apache.wicket.markup.html.WebPage;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
|
||||
|
||||
import com.commafeed.frontend.pages.BasePage;
|
||||
|
||||
public class DisplayExceptionPage extends BasePage {
|
||||
public class DisplayExceptionPage extends WebPage {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
package com.commafeed.frontend.utils.stateless;
|
||||
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
|
||||
import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
|
||||
import org.apache.wicket.markup.html.form.Form;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
|
||||
import de.agilecoders.wicket.markup.html.bootstrap.button.BootstrapAjaxButton;
|
||||
import de.agilecoders.wicket.markup.html.bootstrap.button.Buttons;
|
||||
|
||||
public abstract class BootstrapStatelessAjaxButton extends BootstrapAjaxButton {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private PageParameters parameters;
|
||||
|
||||
public BootstrapStatelessAjaxButton(final String componentId,
|
||||
final Buttons.Type buttonType) {
|
||||
super(componentId, buttonType);
|
||||
}
|
||||
|
||||
public BootstrapStatelessAjaxButton(final String componentId,
|
||||
final IModel<String> model, final Buttons.Type buttonType) {
|
||||
super(componentId, model, buttonType);
|
||||
}
|
||||
|
||||
public BootstrapStatelessAjaxButton(final String componentId,
|
||||
final IModel<String> model, final Buttons.Type buttonType,
|
||||
PageParameters parameters) {
|
||||
super(componentId, model, buttonType);
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
public BootstrapStatelessAjaxButton(String id, Form<?> form,
|
||||
Buttons.Type buttonType) {
|
||||
super(id, form, buttonType);
|
||||
}
|
||||
|
||||
public BootstrapStatelessAjaxButton(String id, IModel<String> model,
|
||||
Form<?> form, Buttons.Type buttonType) {
|
||||
super(id, model, form, buttonType);
|
||||
|
||||
}
|
||||
|
||||
public BootstrapStatelessAjaxButton(String id, IModel<String> model,
|
||||
Form<?> form, Buttons.Type buttonType, PageParameters parameters) {
|
||||
super(id, model, form, buttonType);
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AjaxFormSubmitBehavior newAjaxFormSubmitBehavior(String event) {
|
||||
return new StatelessAjaxFormSubmitBehavior(getForm(), event) {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
protected void onSubmit(AjaxRequestTarget target) {
|
||||
BootstrapStatelessAjaxButton.this.onSubmit(target,
|
||||
BootstrapStatelessAjaxButton.this.getForm());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAfterSubmit(AjaxRequestTarget target) {
|
||||
BootstrapStatelessAjaxButton.this.onAfterSubmit(target,
|
||||
BootstrapStatelessAjaxButton.this.getForm());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onError(AjaxRequestTarget target) {
|
||||
BootstrapStatelessAjaxButton.this.onError(target,
|
||||
BootstrapStatelessAjaxButton.this.getForm());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
|
||||
super.updateAjaxAttributes(attributes);
|
||||
BootstrapStatelessAjaxButton.this.updateAjaxAttributes(attributes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getDefaultProcessing() {
|
||||
return BootstrapStatelessAjaxButton.this.getDefaultFormProcessing();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PageParameters getPageParameters() {
|
||||
return parameters;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
package com.commafeed.frontend.utils.stateless;
|
||||
|
||||
import org.apache.wicket.ajax.AjaxEventBehavior;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
|
||||
import de.agilecoders.wicket.markup.html.bootstrap.button.BootstrapAjaxLink;
|
||||
import de.agilecoders.wicket.markup.html.bootstrap.button.Buttons;
|
||||
|
||||
public abstract class BootstrapStatelessAjaxLink<T> extends BootstrapAjaxLink<T> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private PageParameters parameters;
|
||||
|
||||
public BootstrapStatelessAjaxLink(final String id, final Buttons.Type buttonType) {
|
||||
super(id, buttonType);
|
||||
}
|
||||
|
||||
public BootstrapStatelessAjaxLink(String id, IModel<T> model,
|
||||
Buttons.Type buttonType) {
|
||||
super(id, model, buttonType);
|
||||
}
|
||||
|
||||
public BootstrapStatelessAjaxLink(String id, IModel<T> model,
|
||||
Buttons.Type buttonType, PageParameters parameters) {
|
||||
super(id, model, buttonType);
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AjaxEventBehavior newAjaxEventBehavior(String event) {
|
||||
return new StatelessAjaxEventBehavior(event) {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
protected void onEvent(AjaxRequestTarget target) {
|
||||
BootstrapStatelessAjaxLink.this.onClick(target);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
|
||||
super.updateAjaxAttributes(attributes);
|
||||
BootstrapStatelessAjaxLink.this.updateAjaxAttributes(attributes);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PageParameters getPageParameters() {
|
||||
return parameters;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package com.commafeed.frontend.utils.stateless;
|
||||
|
||||
import org.apache.wicket.Component;
|
||||
import org.apache.wicket.ajax.AjaxEventBehavior;
|
||||
import org.apache.wicket.request.Url;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
|
||||
public abstract class StatelessAjaxEventBehavior extends AjaxEventBehavior {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public StatelessAjaxEventBehavior(final String event) {
|
||||
super(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getCallbackUrl() {
|
||||
final Url url = Url.parse(super.getCallbackUrl().toString());
|
||||
final PageParameters params = getPageParameters();
|
||||
return StatelessEncoder.mergeParameters(url, params).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getStatelessHint(final Component component) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override this to pass the context of the current page to the behavior,
|
||||
* allowing it to recreate the context for the ajax request.
|
||||
*
|
||||
*/
|
||||
protected PageParameters getPageParameters() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package com.commafeed.frontend.utils.stateless;
|
||||
|
||||
import org.apache.wicket.Component;
|
||||
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
|
||||
import org.apache.wicket.request.Url;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
|
||||
public abstract class StatelessAjaxFormComponentUpdatingBehavior extends
|
||||
AjaxFormComponentUpdatingBehavior {
|
||||
|
||||
private static final long serialVersionUID = -286307141298283926L;
|
||||
|
||||
public StatelessAjaxFormComponentUpdatingBehavior(final String event) {
|
||||
super(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getCallbackUrl() {
|
||||
final Url url = Url.parse(super.getCallbackUrl().toString());
|
||||
final PageParameters params = getPageParameters();
|
||||
return StatelessEncoder.mergeParameters(url, params).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getStatelessHint(final Component component) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override this to pass the context of the current page to the behavior,
|
||||
* allowing it to recreate the context for the ajax request.
|
||||
*
|
||||
*/
|
||||
protected PageParameters getPageParameters() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
package com.commafeed.frontend.utils.stateless;
|
||||
|
||||
import org.apache.wicket.Component;
|
||||
import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
|
||||
import org.apache.wicket.markup.html.form.Form;
|
||||
import org.apache.wicket.request.Url;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
|
||||
public abstract class StatelessAjaxFormSubmitBehavior extends
|
||||
AjaxFormSubmitBehavior {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public StatelessAjaxFormSubmitBehavior(final String event) {
|
||||
super(event);
|
||||
}
|
||||
|
||||
public StatelessAjaxFormSubmitBehavior(Form<?> form, String event) {
|
||||
super(form, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getCallbackUrl() {
|
||||
final Url url = Url.parse(super.getCallbackUrl().toString());
|
||||
final PageParameters params = getPageParameters();
|
||||
return StatelessEncoder.mergeParameters(url, params).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getStatelessHint(final Component component) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override this to pass the context of the current page to the behavior,
|
||||
* allowing it to recreate the context for the ajax request.
|
||||
*
|
||||
*/
|
||||
protected PageParameters getPageParameters() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
package com.commafeed.frontend.utils.stateless;
|
||||
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
|
||||
import org.apache.wicket.ajax.markup.html.IAjaxLink;
|
||||
import org.apache.wicket.markup.ComponentTag;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
|
||||
public abstract class StatelessAjaxLink<T> extends StatelessLink<T>
|
||||
implements IAjaxLink {
|
||||
|
||||
private static final long serialVersionUID = -133600842398684777L;
|
||||
|
||||
public StatelessAjaxLink(final String id) {
|
||||
this(id, null, null);
|
||||
}
|
||||
|
||||
public StatelessAjaxLink(final String id,
|
||||
final PageParameters params) {
|
||||
this(id, null, params);
|
||||
}
|
||||
|
||||
public StatelessAjaxLink(final String id, final IModel<T> model) {
|
||||
this(id, model, null);
|
||||
}
|
||||
|
||||
public StatelessAjaxLink(final String id, final IModel<T> model,
|
||||
final PageParameters params) {
|
||||
super(id, model, params);
|
||||
|
||||
add(new StatelessAjaxEventBehavior("click") {
|
||||
private static final long serialVersionUID = -8445395501430605953L;
|
||||
|
||||
@Override
|
||||
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
|
||||
super.updateAjaxAttributes(attributes);
|
||||
StatelessAjaxLink.this.updateAjaxAttributes(attributes);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PageParameters getPageParameters() {
|
||||
return StatelessAjaxLink.this.getPageParameters();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onComponentTag(final ComponentTag tag) {
|
||||
if (isLinkEnabled()) {
|
||||
super.onComponentTag(tag);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEvent(final AjaxRequestTarget target) {
|
||||
onClick(target);
|
||||
target.add(StatelessAjaxLink.this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onClick() {
|
||||
onClick(null);
|
||||
}
|
||||
|
||||
public abstract void onClick(final AjaxRequestTarget target);
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package com.commafeed.frontend.utils.stateless;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.wicket.request.Url;
|
||||
import org.apache.wicket.request.mapper.parameter.INamedParameters;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
import org.apache.wicket.util.encoding.UrlEncoder;
|
||||
|
||||
final class StatelessEncoder {
|
||||
|
||||
static Url mergeParameters(final Url url, final PageParameters params) {
|
||||
if (params == null) {
|
||||
return url;
|
||||
}
|
||||
|
||||
Charset charset = url.getCharset();
|
||||
Url mergedUrl = Url.parse(url.toString(), charset);
|
||||
UrlEncoder urlEncoder = UrlEncoder.QUERY_INSTANCE;
|
||||
Set<String> setParameters = new HashSet<String>();
|
||||
|
||||
for (INamedParameters.NamedPair pair : params.getAllNamed()) {
|
||||
String key = urlEncoder.encode(pair.getKey(), charset);
|
||||
String value = urlEncoder.encode(pair.getValue(), charset);
|
||||
|
||||
if (setParameters.contains(key)) {
|
||||
mergedUrl.addQueryParameter(key, value);
|
||||
} else {
|
||||
mergedUrl.setQueryParameter(key, value);
|
||||
setParameters.add(key);
|
||||
}
|
||||
}
|
||||
|
||||
return mergedUrl;
|
||||
}
|
||||
|
||||
private StatelessEncoder() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
package com.commafeed.frontend.utils.stateless;
|
||||
|
||||
import org.apache.wicket.markup.html.link.Link;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.request.Url;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
|
||||
public abstract class StatelessLink<T> extends Link<T> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final PageParameters parameters;
|
||||
|
||||
public StatelessLink(final String id) {
|
||||
this(id, null, null);
|
||||
}
|
||||
|
||||
public StatelessLink(final String id, final IModel<T> model) {
|
||||
this(id, model, null);
|
||||
}
|
||||
|
||||
public StatelessLink(final String id, final IModel<T> model,
|
||||
final PageParameters params) {
|
||||
super(id, model);
|
||||
setMarkupId(id);
|
||||
this.parameters = params;
|
||||
}
|
||||
|
||||
protected final PageParameters getPageParameters() {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean getStatelessHint() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CharSequence getURL() {
|
||||
final Url url = Url.parse(super.getURL().toString());
|
||||
Url mergedUrl = StatelessEncoder.mergeParameters(url, parameters);
|
||||
return mergedUrl.toString();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user