com.venky.swf.plugins.wiki.controller.PagesController Maven / Gradle / Ivy
package com.venky.swf.plugins.wiki.controller;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import com.venky.core.string.StringUtil;
import com.venky.core.util.ObjectUtil;
import com.venky.swf.controller.ModelController;
import com.venky.swf.db.Database;
import com.venky.swf.db.JdbcTypeHelper.TypeConverter;
import com.venky.swf.exceptions.AccessDeniedException;
import com.venky.swf.path.Path;
import com.venky.swf.plugins.collab.db.model.user.User;
import com.venky.swf.plugins.wiki.db.model.Page;
import com.venky.swf.plugins.wiki.views.MarkDownView;
import com.venky.swf.sql.Conjunction;
import com.venky.swf.sql.Expression;
import com.venky.swf.sql.Operator;
import com.venky.swf.sql.Select;
import com.venky.swf.views.RedirectorView;
import com.venky.swf.views.View;
import com.venky.swf.views.model.ModelListView;
public class PagesController extends ModelController{
public PagesController(Path path) {
super(path);
}
private List getLandingPages(){
Expression exp = new Expression(Conjunction.AND);
exp.add(new Expression("LANDING_PAGE",Operator.EQ,true));
exp.add(getPath().getWhereClause());
List pages = new Select().from(Page.class).where(exp).orderBy(getReflector().getOrderBy()).execute(Page.class, MAX_LIST_RECORDS, new DefaultModelFilter(Page.class));
return pages;
}
public View index(){
List pages = getLandingPages();
return super.list(pages,pages.size() < MAX_LIST_RECORDS);
}
public View show(String title){
return view(title);
}
public View show(int id){
return view(id);
}
public View view(String title){
try {
int id = Integer.valueOf(title);
return view(id);
}catch(NumberFormatException ex){
List pages = findAllByTitle(title);
if (pages.isEmpty()){
if (!getPath().isUserLoggedOn() || getPath().isGuestUserLoggedOn()) {
try {
String url = URLEncoder.encode("/pages/view/"+title,"UTF-8");
return new RedirectorView(getPath(),"","login?_redirect_to="+url);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}else {
//Handle empty to create empty page with right title.
Page page = newPage();
page.setTitle(title);
page.setTag(title);
return blank(page);
}
}else {
pages = findAllByTitle(title);
return list(pages,true);
}
}
}
public View blank(){
Page page = newPage();
return blank(page);
}
public View view(int id){
Page page = Database.getTable(Page.class).get(id);
return view(page);
}
private View view(Page page){
if (page.isAccessibleBy(getSessionUser())){
return dashboard(new MarkDownView(getPath(), page));
}else {
throw new AccessDeniedException();
}
}
private Page newPage(){
Page page = Database.getTable(Page.class).newRecord();
User user = getSessionUser();
page.setCompanyId(user.getCompanyId());
return page;
}
private List findAllByTitle(String title){
Expression where = new Expression(Conjunction.AND);
where.add(new Expression("TITLE",Operator.EQ,title));
where.add(getPath().getWhereClause());
Select sel = new Select().from(Page.class).where(where);
List pages = sel.execute(Page.class,new DefaultModelFilter(Page.class));
Collections.sort(pages,new Comparator(){
@SuppressWarnings("unchecked")
TypeConverter converter = (TypeConverter)Database.getJdbcTypeHelper().getTypeRef(Integer.class).getTypeConverter();
public int compare(Page o1, Page o2) {
Integer c1 = converter.valueOf(o1.getCompanyId());
Integer c2 = converter.valueOf(o2.getCompanyId());
return c2.compareTo(c1);
}
});
return pages;
}
@Override
protected void rewriteQuery(Map formData){
String strQuery = StringUtil.valueOf(formData.get("q"));
if (!ObjectUtil.isVoid(strQuery) && !strQuery.contains(":")){
strQuery = "BODY:" +strQuery + " OR TITLE:" + strQuery + " OR TAG:" +strQuery;
}
formData.put("q", strQuery);
}
@Override
protected View afterPersistDBView(Page page){
return new RedirectorView(getPath(), "view/" + page.getId());
}
@Override
protected View constructModelListView(List records,boolean isCompleteList){
if (records.size() > 1){
return new PageListView(getPath(), records,isCompleteList);
}else if (records.size() == 1){
return redirectTo("view/"+records.get(0).getId());
}else {
if (getPath().canAccessControllerAction("save")){
return redirectTo("blank");
}else {
return new PageListView(getPath(), records,isCompleteList);
}
}
}
public class PageListView extends ModelListView{
public PageListView(Path path, List records,boolean isCompleteList) {
super(path, null, records,isCompleteList);
getIncludedFields().remove("BODY");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy