working on menu page browse NIHVIVO-632

This commit is contained in:
bdc34 2010-12-10 21:03:30 +00:00
parent 9431d5e614
commit e9ca1f9986
7 changed files with 89 additions and 44 deletions

View file

@ -2,7 +2,22 @@
package edu.cornell.mannlib.vitro.webapp.controller.freemarker; package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
import com.hp.hpl.jena.ontology.OntModel; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.hp.hpl.jena.rdf.listeners.StatementListener; import com.hp.hpl.jena.rdf.listeners.StatementListener;
import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDF;
@ -23,20 +38,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilterUtils;
import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters; import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters;
import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext;
import edu.cornell.mannlib.vitro.webapp.flags.PortalFlag; import edu.cornell.mannlib.vitro.webapp.flags.PortalFlag;
import edu.cornell.mannlib.vitro.webapp.search.beans.ProhibitedFromSearch;
import edu.cornell.mannlib.vitro.webapp.web.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
import freemarker.template.Configuration;
import freemarker.template.SimpleSequence;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.servlet.ServletContext;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
public class BrowseController extends FreemarkerHttpServlet { public class BrowseController extends FreemarkerHttpServlet {
static final long serialVersionUID=2006030721126L; static final long serialVersionUID=2006030721126L;

View file

@ -61,4 +61,6 @@ public interface VClassGroupDao {
void updateVClassGroup(VClassGroup vcg); void updateVClassGroup(VClassGroup vcg);
void deleteVClassGroup(VClassGroup vcg); void deleteVClassGroup(VClassGroup vcg);
VClassGroup getGroupByName(String vcgName);
} }

View file

@ -112,4 +112,10 @@ public class VClassGroupDaoFiltering extends BaseFiltering implements VClassGrou
} }
@Override
public VClassGroup getGroupByName(String vcgName) {
return innerDao.getGroupByName(vcgName);
}
} }

View file

@ -304,4 +304,13 @@ public class VClassGroupDaoJena extends JenaBaseDao implements VClassGroupDao {
} }
} }
@Override
public VClassGroup getGroupByName(String vcgName) {
if( vcgName == null )
return null;
else{
return getClassGroupMap().get(vcgName);
}
}
} }

View file

@ -11,11 +11,13 @@ import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassTemplateModel;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModel;
import freemarker.core.Environment; import freemarker.core.Environment;
import freemarker.template.TemplateModelException; import freemarker.template.TemplateModelException;
@ -55,7 +57,7 @@ public class BrowseWidget extends Widget {
protected WidgetTemplateValues doAllClassGroupsDisplay(Environment env, Map params, protected WidgetTemplateValues doAllClassGroupsDisplay(Environment env, Map params,
HttpServletRequest request, ServletContext context) { HttpServletRequest request, ServletContext context) {
Map<String,Object> body = getAllClassGroupData(request); Map<String,Object> body = getAllClassGroupData(request, params);
try { try {
body.put("urls",env.getDataModel().get("urls")); body.put("urls",env.getDataModel().get("urls"));
body.put("urlMapping",env.getDataModel().get("urlMapping")); body.put("urlMapping",env.getDataModel().get("urlMapping"));
@ -67,7 +69,7 @@ public class BrowseWidget extends Widget {
return new WidgetTemplateValues(macroName, body); return new WidgetTemplateValues(macroName, body);
} }
protected Map<String,Object> getAllClassGroupData(HttpServletRequest request){ protected Map<String,Object> getAllClassGroupData(HttpServletRequest request, Map params){
Map<String,Object> map = new HashMap<String,Object>(); Map<String,Object> map = new HashMap<String,Object>();
VitroRequest vreq = new VitroRequest(request); VitroRequest vreq = new VitroRequest(request);
@ -84,7 +86,9 @@ public class BrowseWidget extends Widget {
protected WidgetTemplateValues doClassDisplay(Environment env, Map params, protected WidgetTemplateValues doClassDisplay(Environment env, Map params,
HttpServletRequest request, ServletContext context) { HttpServletRequest request, ServletContext context) {
Map<String,Object> body = getClassData(request);
Map<String,Object> body = getClassData(request,params);
try { try {
body.put("urls",env.getDataModel().get("urls")); body.put("urls",env.getDataModel().get("urls"));
body.put("urlMapping",env.getDataModel().get("urlMapping")); body.put("urlMapping",env.getDataModel().get("urlMapping"));
@ -96,22 +100,33 @@ public class BrowseWidget extends Widget {
return new WidgetTemplateValues(macroName, body); return new WidgetTemplateValues(macroName, body);
} }
private Map<String, Object> getClassData(HttpServletRequest request) { private Map<String, Object> getClassData(HttpServletRequest request, Map params) {
Map<String,Object> map = new HashMap<String,Object>(); Map<String,Object> map = new HashMap<String,Object>();
map.putAll(getClassGroupData(request));
String classUri = request.getParameter(Mode.VCLASS.param); map.putAll(getClassGroupData(request, params));
String classUri = getParam(Mode.VCLASS, request, params);
VitroRequest vreq = new VitroRequest(request); VitroRequest vreq = new VitroRequest(request);
VClass vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(classUri); VClass vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(classUri);
map.put("class", new VClassTemplateModel(vclass)); map.put("class", new VClassTemplateModel(vclass));
//TODO: add list of individuals for class? List<Individual> inds = vreq.getWebappDaoFactory().getIndividualDao()
.getIndividualsByVClass(vclass);
List<IndividualTemplateModel> tInds = new ArrayList<IndividualTemplateModel>(inds.size());
for( Individual ind : inds){
tInds.add(new IndividualTemplateModel(ind, vreq));
}
map.put("individualsInClass", tInds);
return map; return map;
} }
protected WidgetTemplateValues doClassGroupDisplay(Environment env, protected WidgetTemplateValues doClassGroupDisplay(Environment env,
Map params, HttpServletRequest request, ServletContext context) { Map params, HttpServletRequest request, ServletContext context) {
Map<String,Object> body = getClassGroupData(request); Map<String,Object> body = getClassGroupData(request,params);
try { try {
body.put("urls",env.getDataModel().get("urls")); body.put("urls",env.getDataModel().get("urls"));
body.put("urlMapping",env.getDataModel().get("urlMapping")); body.put("urlMapping",env.getDataModel().get("urlMapping"));
@ -123,12 +138,13 @@ public class BrowseWidget extends Widget {
return new WidgetTemplateValues(macroName, body); return new WidgetTemplateValues(macroName, body);
} }
protected Map<String, Object> getClassGroupData(HttpServletRequest request) { protected Map<String, Object> getClassGroupData(HttpServletRequest request, Map params) {
Map<String,Object> map = new HashMap<String,Object>(); Map<String,Object> map = new HashMap<String,Object>();
String vcgUri = request.getParameter(Mode.CLASS_GROUP.param); String vcgName = getParam(Mode.CLASS_GROUP, request, params);
VitroRequest vreq = new VitroRequest(request); VitroRequest vreq = new VitroRequest(request);
VClassGroup vcg = vreq.getWebappDaoFactory().getVClassGroupDao().getGroupByURI(vcgUri); VClassGroup vcg = vreq.getWebappDaoFactory().getVClassGroupDao().getGroupByName(vcgName);
vreq.getWebappDaoFactory().getVClassDao().addVClassesToGroup(vcg, false, true); vreq.getWebappDaoFactory().getVClassDao().addVClassesToGroup(vcg, false, true);
ArrayList<VClassTemplateModel> classes = new ArrayList<VClassTemplateModel>(vcg.size()); ArrayList<VClassTemplateModel> classes = new ArrayList<VClassTemplateModel>(vcg.size());
for( VClass vc : vcg){ for( VClass vc : vcg){
@ -137,7 +153,8 @@ public class BrowseWidget extends Widget {
map.put("classes", classes); map.put("classes", classes);
map.put("classGroup", new VClassGroupTemplateModel(vcg)); map.put("classGroup", new VClassGroupTemplateModel(vcg));
map.put(Mode.CLASS_GROUP.param, vcgUri); map.put("classGroupName", vcgName);
map.put("classGroupUri", vcg.getURI());
return map; return map;
} }
@ -145,7 +162,7 @@ public class BrowseWidget extends Widget {
enum Mode{ enum Mode{
VCLASS_ALPHA("vclassAlpha","vclassAlpha"), VCLASS_ALPHA("vclassAlpha","vclassAlpha"),
VCLASS("vclass","vclassUri"), VCLASS("vclass","vclassUri"),
CLASS_GROUP("classGroup","classgroupUri"), CLASS_GROUP("classGroup","classGroup"),
ALL_CLASS_GROUPS("allClassGroups","all"); ALL_CLASS_GROUPS("allClassGroups","all");
String macroName; String macroName;
@ -160,19 +177,25 @@ public class BrowseWidget extends Widget {
protected Mode getMode(HttpServletRequest request, Map params){ protected Mode getMode(HttpServletRequest request, Map params){
for( Mode mode : Mode.values()){ for( Mode mode : Mode.values()){
String param = request.getParameter( mode.param ); String queryParam = request.getParameter( mode.param );
if( queryParam != null && !queryParam.isEmpty() ){
return mode;
}
Object obj = params.get( mode.param );
String param = obj != null ? obj.toString():null;
if( param != null && !param.isEmpty() ){ if( param != null && !param.isEmpty() ){
return mode; return mode;
} }
} }
for( Mode mode : Mode.values()){
String param = (String)params.get( mode.param );
if( param != null && !param.isEmpty() ){
return mode;
}
}
return DEFAULT_MODE; return DEFAULT_MODE;
} }
protected String getParam(Mode mode, HttpServletRequest request, Map params){
if( request.getParameter(mode.param) != null )
return request.getParameter(mode.param);
if( params.get(mode.param) != null )
return params.get(mode.param).toString();
else
return null;
}
} }

View file

@ -2,7 +2,7 @@
<section id="#intro-menupage" role="region"> <section id="#intro-menupage" role="region">
<h3>People</h3> <h3>People</h3>
<@widget name="browse" /> <@widget name="browse" classGroup="people"/>
<section id="content-foaf-person" role="region"> <section id="content-foaf-person" role="region">
<h4>Visual Graph</h4> <h4>Visual Graph</h4>
@ -142,7 +142,6 @@
<article class="vcard individual-foaf-person" role="navigation"> <img src="${urls.images}/menupage/person-thumbnail.jpg" width="90" height="90" alt="foaf:lastName, foaf:firstName"/> <article class="vcard individual-foaf-person" role="navigation"> <img src="${urls.images}/menupage/person-thumbnail.jpg" width="90" height="90" alt="foaf:lastName, foaf:firstName"/>
<h1 class="fn"><strong>foaf:lastName, foaf:fisrtName</strong><br>core:preferredTitle <br><span class="org">Albert Mann Library</span></h1> <h1 class="fn"><strong>foaf:lastName, foaf:fisrtName</strong><br>core:preferredTitle <br><span class="org">Albert Mann Library</span></h1>
</article> </article>
</section> </section>
<@dumpAll/>
</section> </section>

View file

@ -15,7 +15,7 @@
<h2>Macro allClassGroups from widget-browse.ftl</h2> <h2>Macro allClassGroups from widget-browse.ftl</h2>
<ul> <ul>
<#list vclassGroupList as group> <#list vclassGroupList as group>
<li><a href="${urls.base}${urlMapping}?classgroupUri=${group.uri?url}">${group.publicName}</a></li> <li><a href="${urls.base}${urlMapping}?classgroupUri=${group.publicName?url}">${group.publicName}</a></li>
</#list> </#list>
</ul> </ul>
</section> </section>
@ -31,7 +31,7 @@
</div> </div>
<ul> <ul>
<#list classes as class> <#list classes as class>
<li><a href="${urls.base}${urlMapping}?classgroupUri=${classGroup.uri?url}&vclassUri=${class.uri?url}">${class.name}</a></li> <li><a href="${urls.base}${urlMapping}?classgroupUri=${classGroup.publicName?url}&vclassUri=${class.uri?url}">${class.name}</a> ${class.individualCount}</li>
</#list> </#list>
</ul> </ul>
</section> </section>
@ -41,7 +41,11 @@
<#macro vclass> <#macro vclass>
<section> <section>
<h2>vclass ${class.name} from ${classGroup.publicName}</h2> <h2>vclass ${class.name} from ${classGroup.publicName}</h2>
This has classGroup, classes, and class. It doesn't yet have a list of individuals in the class. This has classGroup, classes, individualsInClass and class.
<ul>
<#list individualsInClass as ind>
<li><a href="${urls.base}/individual?uri=${ind.uri?url}">${ind.name}</a></li>
</#list>
</section> </section>
</#macro> </#macro>