From 9f1b9f6bebf96ca4176cd018dc9d63bbfaaf2c7f Mon Sep 17 00:00:00 2001
From: j2blake
Date: Thu, 25 Jul 2013 11:51:45 -0400
Subject: [PATCH 01/16] Add license tag line. Remove unused imports. VIVO-222
---
.../StreamingMultipartHttpServletRequest.java | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/StreamingMultipartHttpServletRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/StreamingMultipartHttpServletRequest.java
index 7b74a2041..e5e32c5c9 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/StreamingMultipartHttpServletRequest.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/StreamingMultipartHttpServletRequest.java
@@ -1,13 +1,9 @@
-package edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest;
+/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
+package edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest;
import javax.servlet.http.HttpServletRequest;
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
@@ -26,8 +22,7 @@ public class StreamingMultipartHttpServletRequest extends
* to deal with inputs of very large sizes.
*
*/
- public StreamingMultipartHttpServletRequest(HttpServletRequest request)
- throws IOException{
+ public StreamingMultipartHttpServletRequest(HttpServletRequest request) {
super(request);
//use a file uploader that does not save the files to a temporary directory.
From 50a6be56a2986adb406d59b3fec2b494b1fa9a85 Mon Sep 17 00:00:00 2001
From: j2blake
Date: Mon, 29 Jul 2013 14:30:49 -0400
Subject: [PATCH 02/16] VIVO-39 Deprecate the SimplePermission instances that
we would like to see go away.
---
.../auth/permissions/SimplePermission.java | 33 +++++++++++++------
1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/permissions/SimplePermission.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/permissions/SimplePermission.java
index f3e9b2618..17460e61f 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/permissions/SimplePermission.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/permissions/SimplePermission.java
@@ -74,19 +74,32 @@ public class SimplePermission extends Permission {
"SeeVerbosePropertyInformation");
public static final SimplePermission USE_ADVANCED_DATA_TOOLS_PAGES = new SimplePermission(
"UseAdvancedDataToolsPages");
- public static final SimplePermission USE_BASIC_AJAX_CONTROLLERS = new SimplePermission(
- "UseBasicAjaxControllers");
- public static final SimplePermission USE_MISCELLANEOUS_ADMIN_PAGES = new SimplePermission(
- "UseMiscellaneousAdminPages");
- public static final SimplePermission USE_MISCELLANEOUS_CURATOR_PAGES = new SimplePermission(
- "UseMiscellaneousCuratorPages");
- public static final SimplePermission USE_MISCELLANEOUS_EDITOR_PAGES = new SimplePermission(
- "UseMiscellaneousEditorPages");
- public static final SimplePermission USE_MISCELLANEOUS_PAGES = new SimplePermission(
- "UseMiscellaneousPages");
public static final SimplePermission USE_SPARQL_QUERY_PAGE = new SimplePermission(
"UseSparqlQueryPage");
+ // ----------------------------------------------------------------------
+ // These deprecated instances are "catch all" permissions to cover
+ // poorly defined groups of actions until better definitions were found.
+ // Don't add usages of these, and remove existing usages where
+ // possible.
+ // ----------------------------------------------------------------------
+
+ @Deprecated
+ public static final SimplePermission USE_BASIC_AJAX_CONTROLLERS = new SimplePermission(
+ "UseBasicAjaxControllers");
+ @Deprecated
+ public static final SimplePermission USE_MISCELLANEOUS_ADMIN_PAGES = new SimplePermission(
+ "UseMiscellaneousAdminPages");
+ @Deprecated
+ public static final SimplePermission USE_MISCELLANEOUS_CURATOR_PAGES = new SimplePermission(
+ "UseMiscellaneousCuratorPages");
+ @Deprecated
+ public static final SimplePermission USE_MISCELLANEOUS_EDITOR_PAGES = new SimplePermission(
+ "UseMiscellaneousEditorPages");
+ @Deprecated
+ public static final SimplePermission USE_MISCELLANEOUS_PAGES = new SimplePermission(
+ "UseMiscellaneousPages");
+
public static List getAllInstances() {
return new ArrayList(allInstances.values());
}
From 914bb18278802b8b50d9aca4dfca8552eea9f971 Mon Sep 17 00:00:00 2001
From: j2blake
Date: Wed, 31 Jul 2013 16:30:40 -0400
Subject: [PATCH 03/16] VIVO-64 Modify UpdateKnowledgeBase so it doesn't
require an empty directory.
It will create any directories that it needs. It will also store them in [vitro.home]/upgrade/knowledgeBase instead of [webapps]/vivo/WEB-INF/ontologies/upgrade
---
.../servlet/setup/UpdateKnowledgeBase.java | 104 +++++++++---------
.../setup/UpdatePermissionSetUris.java | 2 +-
2 files changed, 56 insertions(+), 50 deletions(-)
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
index 28fa02f5e..6dda504f2 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
@@ -5,7 +5,11 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.IOException;
import java.io.StringWriter;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -31,11 +35,13 @@ import com.hp.hpl.jena.shared.Lock;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
+import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.ontology.update.KnowledgeBaseUpdater;
import edu.cornell.mannlib.vitro.webapp.ontology.update.UpdateSettings;
+import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus;
/**
* Invokes process to test whether the knowledge base needs any updating
@@ -44,21 +50,10 @@ import edu.cornell.mannlib.vitro.webapp.ontology.update.UpdateSettings;
*
*/
public class UpdateKnowledgeBase implements ServletContextListener {
-
public static final String KBM_REQURIED_AT_STARTUP = "KNOWLEDGE_BASE_MIGRATION_REQUIRED_AT_STARTUP";
private final static Log log = LogFactory.getLog(UpdateKnowledgeBase.class);
private static final String DATA_DIR = "/WEB-INF/ontologies/update/";
- private static final String LOG_DIR = "logs/";
- private static final String CHANGED_DATA_DIR = "changedData/";
- private static final String ASK_QUERY_FILE = DATA_DIR + "askUpdated.sparql";
- private static final String SUCCESS_ASSERTIONS_FILE = DATA_DIR + "success.n3";
- private static final String SUCCESS_RDF_FORMAT = "N3";
- private static final String DIFF_FILE = DATA_DIR + "diff.tab.txt";
- private static final String REMOVED_DATA_FILE = DATA_DIR + CHANGED_DATA_DIR + "removedData.n3";
- private static final String ADDED_DATA_FILE = DATA_DIR + CHANGED_DATA_DIR + "addedData.n3";
- private static final String SPARQL_CONSTRUCT_ADDITIONS_DIR = DATA_DIR + "sparqlConstructs/additions/";
- private static final String SPARQL_CONSTRUCT_DELETIONS_DIR = DATA_DIR + "sparqlConstructs/deletions/";
private static final String OLD_TBOX_MODEL_DIR = DATA_DIR + "oldVersion/";
private static final String NEW_TBOX_MODEL_DIR = "/WEB-INF/filegraph/tbox/";
private static final String OLD_TBOX_ANNOTATIONS_DIR = DATA_DIR + "oldAnnotations/";
@@ -72,33 +67,15 @@ public class UpdateKnowledgeBase implements ServletContextListener {
private static final String LOADED_STARTUPT_DISPLAYMODEL_DIR = "/WEB-INF/ontologies/app/loadedAtStartup/";
private static final String OLD_DISPLAYMODEL_VIVOLISTVIEW_PATH = DATA_DIR + "oldDisplayModel/vivoListViewConfig.rdf";
+ @Override
public void contextInitialized(ServletContextEvent sce) {
- try {
- ServletContext ctx = sce.getServletContext();
-
- // If the DATA_DIR directory doesn't exist no migration check will be done.
- // This is a normal situation for Vitro.
- File updateDirectory = new File(ctx.getRealPath(DATA_DIR));
- if (!updateDirectory.exists()) {
- log.debug("Directory " + ctx.getRealPath(DATA_DIR) + " does not exist, no migration check will be attempted.");
- return;
- }
+ ServletContext ctx = sce.getServletContext();
+ StartupStatus ss = StartupStatus.getBean(ctx);
- String logFileName = DATA_DIR + LOG_DIR + timestampedFileName("knowledgeBaseUpdate", "log");
- String errorLogFileName = DATA_DIR + LOG_DIR + timestampedFileName("knowledgeBaseUpdate.error", "log");
-
+ try {
UpdateSettings settings = new UpdateSettings();
- settings.setAskUpdatedQueryFile(getAskUpdatedQueryPath(ctx));
- settings.setDataDir(ctx.getRealPath(DATA_DIR));
- settings.setSparqlConstructAdditionsDir(ctx.getRealPath(SPARQL_CONSTRUCT_ADDITIONS_DIR));
- settings.setSparqlConstructDeletionsDir(ctx.getRealPath(SPARQL_CONSTRUCT_DELETIONS_DIR));
- settings.setDiffFile(ctx.getRealPath(DIFF_FILE));
- settings.setSuccessAssertionsFile(ctx.getRealPath(SUCCESS_ASSERTIONS_FILE));
- settings.setSuccessRDFFormat(SUCCESS_RDF_FORMAT);
- settings.setLogFile(ctx.getRealPath(logFileName));
- settings.setErrorLogFile(ctx.getRealPath(errorLogFileName));
- settings.setAddedDataFile(ctx.getRealPath(ADDED_DATA_FILE));
- settings.setRemovedDataFile(ctx.getRealPath(REMOVED_DATA_FILE));
+ putReportingPathsIntoSettings(ctx, settings);
+
WebappDaoFactory wadf = ModelAccess.on(ctx).getWebappDaoFactory();
settings.setDefaultNamespace(wadf.getDefaultNamespace());
settings.setAssertionOntModelSelector(ModelAccess.on(ctx).getBaseOntModelSelector());
@@ -157,21 +134,54 @@ public class UpdateKnowledgeBase implements ServletContextListener {
}
}
} catch (Exception ioe) {
- String errMsg = "Exception updating knowledge base " +
- "for ontology changes: ";
- // Tomcat doesn't always seem to print exceptions thrown from
- // context listeners
- System.out.println(errMsg);
- ioe.printStackTrace();
- throw new RuntimeException(errMsg, ioe);
+ ss.fatal(this, "Exception updating knowledge base for ontology changes: ", ioe);
}
} catch (Throwable t){
- log.warn("warning", t);
+ ss.fatal(this, "Exception updating knowledge base for ontology changes: ", t);
}
} catch (Throwable t) {
- t.printStackTrace();
+ ss.fatal(this, "Exception updating knowledge base for ontology changes: ", t);
}
}
+
+ /**
+ * Create the directories where we will report on the update.
+ * Put the paths for the directories and files into the settings object.
+ */
+ private void putReportingPathsIntoSettings(ServletContext ctx, UpdateSettings settings) throws IOException {
+ ConfigurationProperties props = ConfigurationProperties.getBean(ctx);
+ Path homeDir = Paths.get(props.getProperty("vitro.home"));
+
+ Path dataDir = createDirectory(homeDir, "upgrade", "knowledgeBase");
+ settings.setDataDir(dataDir.toString());
+ StartupStatus.getBean(ctx).info(this, "Updating knowledge base: reports are in '" + dataDir + "'");
+
+ settings.setAskUpdatedQueryFile(dataDir.resolve("askUpdated.sparql").toString());
+ settings.setDiffFile(dataDir.resolve("diff.tab.txt").toString());
+ settings.setSuccessAssertionsFile(dataDir.resolve("success.n3").toString());
+ settings.setSuccessRDFFormat("N3");
+
+ settings.setSparqlConstructAdditionsDir(createDirectory(dataDir, "sparqlConstructs", "additions").toString());
+ settings.setSparqlConstructDeletionsDir(createDirectory(dataDir, "sparqlConstructs", "deletions").toString());
+
+ Path changedDir = createDirectory(dataDir, "changedData");
+ settings.setAddedDataFile(changedDir.resolve("addedData.n3").toString());
+ settings.setRemovedDataFile(changedDir.resolve("removedData.n3").toString());
+
+ Path logDir = createDirectory(dataDir, "logs");
+ settings.setLogFile(logDir.resolve(timestampedFileName("knowledgeBaseUpdate", "log")).toString());
+ settings.setErrorLogFile(logDir.resolve(timestampedFileName("knowledgeBaseUpdate.error", "log")).toString());
+ }
+
+ private Path createDirectory(Path parent, String... children) throws IOException {
+ Path dir = parent;
+ for (String child : children) {
+ dir = dir.resolve(child);
+ }
+ Files.createDirectories(dir);
+ return dir;
+ }
+
//Multiple changes from 1.4 to 1.5 will occur
//update migration model
@@ -473,15 +483,11 @@ public class UpdateKnowledgeBase implements ServletContextListener {
}
}
+ @Override
public void contextDestroyed(ServletContextEvent arg0) {
// nothing to do
}
- public static String getAskUpdatedQueryPath(ServletContext ctx) {
- return ctx.getRealPath(ASK_QUERY_FILE);
-
- }
-
private static String timestampedFileName(String prefix, String suffix) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-sss");
return prefix + "." + sdf.format(new Date()) + "." + suffix;
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdatePermissionSetUris.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdatePermissionSetUris.java
index ec03f70ff..e8a66561e 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdatePermissionSetUris.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdatePermissionSetUris.java
@@ -190,7 +190,7 @@ public class UpdatePermissionSetUris implements ServletContextListener {
File homeDirectory = new File(homeDirectoryPath);
confirmIsDirectory(homeDirectory);
- File upgradeDirectory = createDirectory(homeDirectory, "upgrade");
+ File upgradeDirectory = createDirectory(homeDirectory, "upgrade/permissions");
String filename = timestampedFilename("UpgradePermissionSetUris",
".txt");
this.file = new File(upgradeDirectory, filename);
From 6b3d9a28c7d5deb96ffc7d375c4886aede8b78fa Mon Sep 17 00:00:00 2001
From: j2blake
Date: Thu, 1 Aug 2013 15:08:15 -0400
Subject: [PATCH 04/16] VIVO-234 Ignore a runtime.properties file in the
distribution directory
---
webapp/build.xml | 1036 +++++++++++++++++++++++-----------------------
1 file changed, 514 insertions(+), 522 deletions(-)
diff --git a/webapp/build.xml b/webapp/build.xml
index a144f0665..05e3edec9 100644
--- a/webapp/build.xml
+++ b/webapp/build.xml
@@ -1,522 +1,514 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The Vitro build script requires Java 7 or later.
- Java system property java.version = ${java.version}
- Java system property java.home = ${java.home}
- JAVA_HOME environment variable = ${env.JAVA_HOME}
-
-
-
-
-
-
-
-
-
- The Vitro build script requires Ant 1.8 or later.
- Ant property ant.version = ${ant.version}
- Ant property ant.home = ${ant.home}
- ANT_HOME environment variable = ${env.ANT_HOME}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ${revisionInfo.timestamp}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-all - Runs "clean", then "deploy".
-clean - Delete all artifacts so the next build will be from scratch.
-compile - Compile the Java source files.
-orng - Configure and deploy the ORNG Shindig application.
-test - Compile and run the JUnit tests.
-distribute - Create WAR files to be deployed in a servlet container.
-deploy - Deploy the application directly into the Tomcat webapps directory.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The Vitro build script requires Java 7 or later.
+ Java system property java.version = ${java.version}
+ Java system property java.home = ${java.home}
+ JAVA_HOME environment variable = ${env.JAVA_HOME}
+
+
+
+
+
+
+
+
+
+ The Vitro build script requires Ant 1.8 or later.
+ Ant property ant.version = ${ant.version}
+ Ant property ant.home = ${ant.home}
+ ANT_HOME environment variable = ${env.ANT_HOME}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${revisionInfo.timestamp}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+all - Runs "clean", then "deploy".
+clean - Delete all artifacts so the next build will be from scratch.
+compile - Compile the Java source files.
+orng - Configure and deploy the ORNG Shindig application.
+test - Compile and run the JUnit tests.
+distribute - Create WAR files to be deployed in a servlet container.
+deploy - Deploy the application directly into the Tomcat webapps directory.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 036d20b8926f2e34d63485efb1de3a53e3016a96 Mon Sep 17 00:00:00 2001
From: j2blake
Date: Thu, 1 Aug 2013 15:24:33 -0400
Subject: [PATCH 05/16] VIVO-227 Remove warning message from JsonServletTest
---
.../mannlib/vitro/webapp/controller/json/JsonServletTest.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/json/JsonServletTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/json/JsonServletTest.java
index 3b6e103be..9128b6f0e 100644
--- a/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/json/JsonServletTest.java
+++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/json/JsonServletTest.java
@@ -192,6 +192,7 @@ public class JsonServletTest extends AbstractTestClass {
public void individualsByClassNoIndividuals() throws ServletException,
IOException {
setLoggerLevel(JsonServlet.class, Level.FATAL);
+ setLoggerLevel(ModelAccess.class, Level.ERROR);
String vclassId = "http://myVclass";
vcDao.setVClass(vclassId, new VClass(vclassId));
req.addParameter(GET_SOLR_INDIVIDUALS_BY_VCLASS, "true");
From 56b963d8bc66171f340143fbbd2e1f9ba9c921e5 Mon Sep 17 00:00:00 2001
From: j2blake
Date: Thu, 1 Aug 2013 16:04:42 -0400
Subject: [PATCH 06/16] VIVO-235 Reduce "deprecation" messages in the build
The benefit of making these instances deprecated is very small. The annoyance of having deprecation messages in the build is very real.
---
.../webapp/auth/permissions/SimplePermission.java | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/permissions/SimplePermission.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/permissions/SimplePermission.java
index 17460e61f..80b32b478 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/permissions/SimplePermission.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/permissions/SimplePermission.java
@@ -78,25 +78,19 @@ public class SimplePermission extends Permission {
"UseSparqlQueryPage");
// ----------------------------------------------------------------------
- // These deprecated instances are "catch all" permissions to cover
- // poorly defined groups of actions until better definitions were found.
- // Don't add usages of these, and remove existing usages where
- // possible.
+ // These instances are "catch all" permissions to cover poorly defined
+ // groups of actions until better definitions were found. Don't add usages
+ // of these, and remove existing usages where possible.
// ----------------------------------------------------------------------
- @Deprecated
public static final SimplePermission USE_BASIC_AJAX_CONTROLLERS = new SimplePermission(
"UseBasicAjaxControllers");
- @Deprecated
public static final SimplePermission USE_MISCELLANEOUS_ADMIN_PAGES = new SimplePermission(
"UseMiscellaneousAdminPages");
- @Deprecated
public static final SimplePermission USE_MISCELLANEOUS_CURATOR_PAGES = new SimplePermission(
"UseMiscellaneousCuratorPages");
- @Deprecated
public static final SimplePermission USE_MISCELLANEOUS_EDITOR_PAGES = new SimplePermission(
"UseMiscellaneousEditorPages");
- @Deprecated
public static final SimplePermission USE_MISCELLANEOUS_PAGES = new SimplePermission(
"UseMiscellaneousPages");
From c75c0d0f9f11e49fb670ef9a7c2c982f40561f68 Mon Sep 17 00:00:00 2001
From: j2blake
Date: Thu, 1 Aug 2013 16:06:59 -0400
Subject: [PATCH 07/16] VIVO-235 Reduce "deprecation" messages in the build
It's OK for these stub classes to implement deprecated methods in the interfaces, as long as they declare those methods with @Override and @Deprecated.
---
.../javax/servlet/ServletContextStub.java | 4 ++
.../servlet/http/HttpServletRequestStub.java | 57 +++++++++++++++----
.../javax/servlet/http/HttpSessionStub.java | 4 ++
3 files changed, 54 insertions(+), 11 deletions(-)
diff --git a/webapp/test/stubs/javax/servlet/ServletContextStub.java b/webapp/test/stubs/javax/servlet/ServletContextStub.java
index cc4e9ca32..46e592d60 100644
--- a/webapp/test/stubs/javax/servlet/ServletContextStub.java
+++ b/webapp/test/stubs/javax/servlet/ServletContextStub.java
@@ -200,6 +200,7 @@ public class ServletContextStub implements ServletContext {
}
@Override
+ @Deprecated
public Servlet getServlet(String arg0) throws ServletException {
throw new RuntimeException(
"ServletContextStub.getServlet() not implemented.");
@@ -213,6 +214,7 @@ public class ServletContextStub implements ServletContext {
@Override
@SuppressWarnings("rawtypes")
+ @Deprecated
public Enumeration getServletNames() {
throw new RuntimeException(
"ServletContextStub.getServletNames() not implemented.");
@@ -220,6 +222,7 @@ public class ServletContextStub implements ServletContext {
@Override
@SuppressWarnings("rawtypes")
+ @Deprecated
public Enumeration getServlets() {
throw new RuntimeException(
"ServletContextStub.getServlets() not implemented.");
@@ -231,6 +234,7 @@ public class ServletContextStub implements ServletContext {
}
@Override
+ @Deprecated
public void log(Exception arg0, String arg1) {
throw new RuntimeException("ServletContextStub.log() not implemented.");
}
diff --git a/webapp/test/stubs/javax/servlet/http/HttpServletRequestStub.java b/webapp/test/stubs/javax/servlet/http/HttpServletRequestStub.java
index a35924ddf..d1b2c4dd0 100644
--- a/webapp/test/stubs/javax/servlet/http/HttpServletRequestStub.java
+++ b/webapp/test/stubs/javax/servlet/http/HttpServletRequestStub.java
@@ -60,8 +60,8 @@ public class HttpServletRequestStub implements HttpServletRequest {
/**
* Supply the request URL as a single URL. We will parse it on the
- * assumption that the contextPath and the pathInfo are empty.
- * Don't include a query string. Instead, set parameters.
+ * assumption that the contextPath and the pathInfo are empty. Don't include
+ * a query string. Instead, set parameters.
*/
public void setRequestUrl(URL url) {
this.contextPath = "";
@@ -81,8 +81,7 @@ public class HttpServletRequestStub implements HttpServletRequest {
/**
* Supply the pieces of the request URL, so we can respond correctly when
- * asked for a piece.
- * Don't include a query string. Instead, set parameters.
+ * asked for a piece. Don't include a query string. Instead, set parameters.
*/
public void setRequestUrlByParts(String shemeHostPort, String contextPath,
String servletPath, String pathInfo) {
@@ -102,8 +101,9 @@ public class HttpServletRequestStub implements HttpServletRequest {
}
this.servletPath = servletPath;
- this.requestUri = contextPath + servletPath + ((pathInfo == null) ? "" : pathInfo);
-
+ this.requestUri = contextPath + servletPath
+ + ((pathInfo == null) ? "" : pathInfo);
+
if (shemeHostPort == null) {
throw new NullPointerException("shemeHostPort may not be null.");
}
@@ -183,21 +183,21 @@ public class HttpServletRequestStub implements HttpServletRequest {
public String getServletPath() {
return servletPath;
}
-
+
@Override
public String getPathInfo() {
return pathInfo;
}
-
+
@Override
public String getQueryString() {
if (parameters.isEmpty()) {
return null;
}
-
+
String qs = "";
- for (String key:parameters.keySet()) {
- for (String value: parameters.get(key)) {
+ for (String key : parameters.keySet()) {
+ for (String value : parameters.get(key)) {
qs += "&" + key + "=" + URLEncoder.encode(value);
}
}
@@ -302,167 +302,202 @@ public class HttpServletRequestStub implements HttpServletRequest {
// Un-implemented methods
// ----------------------------------------------------------------------
+ @Override
public String getAuthType() {
throw new RuntimeException(
"HttpServletRequestStub.getAuthType() not implemented.");
}
+ @Override
public Cookie[] getCookies() {
throw new RuntimeException(
"HttpServletRequestStub.getCookies() not implemented.");
}
+ @Override
public long getDateHeader(String arg0) {
throw new RuntimeException(
"HttpServletRequestStub.getDateHeader() not implemented.");
}
+ @Override
public int getIntHeader(String arg0) {
throw new RuntimeException(
"HttpServletRequestStub.getIntHeader() not implemented.");
}
+ @Override
public String getPathTranslated() {
throw new RuntimeException(
"HttpServletRequestStub.getPathTranslated() not implemented.");
}
+ @Override
public String getRemoteUser() {
throw new RuntimeException(
"HttpServletRequestStub.getRemoteUser() not implemented.");
}
+ @Override
public String getRequestedSessionId() {
throw new RuntimeException(
"HttpServletRequestStub.getRequestedSessionId() not implemented.");
}
+ @Override
public Principal getUserPrincipal() {
throw new RuntimeException(
"HttpServletRequestStub.getUserPrincipal() not implemented.");
}
+ @Override
public boolean isRequestedSessionIdFromCookie() {
throw new RuntimeException(
"HttpServletRequestStub.isRequestedSessionIdFromCookie() not implemented.");
}
+ @Override
public boolean isRequestedSessionIdFromURL() {
throw new RuntimeException(
"HttpServletRequestStub.isRequestedSessionIdFromURL() not implemented.");
}
+ @Override
+ @Deprecated
public boolean isRequestedSessionIdFromUrl() {
throw new RuntimeException(
"HttpServletRequestStub.isRequestedSessionIdFromUrl() not implemented.");
}
+ @Override
public boolean isRequestedSessionIdValid() {
throw new RuntimeException(
"HttpServletRequestStub.isRequestedSessionIdValid() not implemented.");
}
+ @Override
public boolean isUserInRole(String arg0) {
throw new RuntimeException(
"HttpServletRequestStub.isUserInRole() not implemented.");
}
+ @Override
public String getCharacterEncoding() {
throw new RuntimeException(
"HttpServletRequestStub.getCharacterEncoding() not implemented.");
}
+ @Override
public int getContentLength() {
throw new RuntimeException(
"HttpServletRequestStub.getContentLength() not implemented.");
}
+ @Override
public String getContentType() {
throw new RuntimeException(
"HttpServletRequestStub.getContentType() not implemented.");
}
+ @Override
public ServletInputStream getInputStream() throws IOException {
throw new RuntimeException(
"HttpServletRequestStub.getInputStream() not implemented.");
}
+ @Override
public String getLocalAddr() {
throw new RuntimeException(
"HttpServletRequestStub.getLocalAddr() not implemented.");
}
+ @Override
public String getLocalName() {
throw new RuntimeException(
"HttpServletRequestStub.getLocalName() not implemented.");
}
+ @Override
public int getLocalPort() {
throw new RuntimeException(
"HttpServletRequestStub.getLocalPort() not implemented.");
}
+ @Override
public Locale getLocale() {
throw new RuntimeException(
"HttpServletRequestStub.getLocale() not implemented.");
}
+ @Override
@SuppressWarnings("rawtypes")
public Enumeration getLocales() {
throw new RuntimeException(
"HttpServletRequestStub.getLocales() not implemented.");
}
+ @Override
public String getProtocol() {
throw new RuntimeException(
"HttpServletRequestStub.getProtocol() not implemented.");
}
+ @Override
public BufferedReader getReader() throws IOException {
throw new RuntimeException(
"HttpServletRequestStub.getReader() not implemented.");
}
+ @Override
+ @Deprecated
public String getRealPath(String arg0) {
throw new RuntimeException(
"HttpServletRequestStub.getRealPath() not implemented.");
}
+ @Override
public String getRemoteHost() {
throw new RuntimeException(
"HttpServletRequestStub.getRemoteHost() not implemented.");
}
+ @Override
public int getRemotePort() {
throw new RuntimeException(
"HttpServletRequestStub.getRemotePort() not implemented.");
}
+ @Override
public RequestDispatcher getRequestDispatcher(String arg0) {
throw new RuntimeException(
"HttpServletRequestStub.getRequestDispatcher() not implemented.");
}
+ @Override
public String getScheme() {
throw new RuntimeException(
"HttpServletRequestStub.getScheme() not implemented.");
}
+ @Override
public String getServerName() {
throw new RuntimeException(
"HttpServletRequestStub.getServerName() not implemented.");
}
+ @Override
public int getServerPort() {
throw new RuntimeException(
"HttpServletRequestStub.getServerPort() not implemented.");
}
+ @Override
public boolean isSecure() {
throw new RuntimeException(
"HttpServletRequestStub.isSecure() not implemented.");
}
+ @Override
public void setCharacterEncoding(String arg0)
throws UnsupportedEncodingException {
throw new RuntimeException(
diff --git a/webapp/test/stubs/javax/servlet/http/HttpSessionStub.java b/webapp/test/stubs/javax/servlet/http/HttpSessionStub.java
index cd71d4cef..7cc87b26b 100644
--- a/webapp/test/stubs/javax/servlet/http/HttpSessionStub.java
+++ b/webapp/test/stubs/javax/servlet/http/HttpSessionStub.java
@@ -126,12 +126,14 @@ public class HttpSessionStub implements HttpSession {
}
@Override
+ @Deprecated
public Object getValue(String arg0) {
throw new RuntimeException(
"HttpSessionStub.getValue() not implemented.");
}
@Override
+ @Deprecated
public String[] getValueNames() {
throw new RuntimeException(
"HttpSessionStub.getValueNames() not implemented.");
@@ -149,12 +151,14 @@ public class HttpSessionStub implements HttpSession {
}
@Override
+ @Deprecated
public void putValue(String arg0, Object arg1) {
throw new RuntimeException(
"HttpSessionStub.putValue() not implemented.");
}
@Override
+ @Deprecated
public void removeValue(String arg0) {
throw new RuntimeException(
"HttpSessionStub.removeValue() not implemented.");
From 1b1c28f21678df86739f3aff5eaadbb30bd17921 Mon Sep 17 00:00:00 2001
From: j2blake
Date: Thu, 1 Aug 2013 16:07:55 -0400
Subject: [PATCH 08/16] VIVO-235 Reduce "deprecation" messages in the build
The @SuppressWarnings("deprecation") annotation doesn't apply to an import statement, but it does apply if the class is fully-qualified when created.
---
.../freemarker/ImageUploaderThumbnailerTester_2.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploaderThumbnailerTester_2.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploaderThumbnailerTester_2.java
index 2a2314999..aef00d0ac 100644
--- a/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploaderThumbnailerTester_2.java
+++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploaderThumbnailerTester_2.java
@@ -23,7 +23,6 @@ import java.util.Set;
import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;
import javax.media.jai.operator.StreamDescriptor;
-import javax.media.jai.widget.ImageCanvas;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
@@ -107,7 +106,7 @@ public class ImageUploaderThumbnailerTester_2 extends Frame {
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add("South", l);
- p.add("Center", new ImageCanvas(image));
+ p.add("Center", new javax.media.jai.widget.ImageCanvas(image));
p.setBackground(new Color(0xFFFFFF));
p.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
From 65aafbc64cb5ec90bc18f8da191c0943fe39e27d Mon Sep 17 00:00:00 2001
From: j2blake
Date: Thu, 1 Aug 2013 17:18:06 -0400
Subject: [PATCH 09/16] VIVO-235 Improve build instructions.
Tell the user what to expect when they run "ant all", and how to distinguish success from failure.
---
doc/install.html | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/doc/install.html b/doc/install.html
index 101ae54b8..6f5091d39 100644
--- a/doc/install.html
+++ b/doc/install.html
@@ -774,6 +774,39 @@
to build Vitro and deploy to Tomcat's webapps directory.
+
+ The build script may run for as much as five minutes,
+ and creates more than 100 lines of output.
+ The process comprises several steps:
+
+
collecting the source files from the distribution directory,
+
compiling the Java source code,
+
compiling and running unit tests,
+
preparing the Solr search engine,
+
deploying Vitro and Solr to Tomcat.
+
+
+
+ The output of the build may include a variety of warning messages.
+ The Java compiler may warn of code that is outdated.
+ Unit tests may produce warning messages,
+ and some tests may be ignored if they do not produce consistent results.
+
+
+ BUILD SUCCESSFUL Total time: 1 minute 49 seconds
+
+
+ If the output ends with a success message, the build was successful.
+ Proceed to the next step.
+
+
+ BUILD FAILED Total time: 35 seconds
+
+
+ If the output ends with a failure message, the build has failed.
+ Find the cause of the failure, fix the problem, and run the script again.
+
+
VII. Configure Tomcat
Set JVM parameters
From f5161e14b72836958f8b029c27e1f42728163628 Mon Sep 17 00:00:00 2001
From: Brian Caruso
Date: Mon, 5 Aug 2013 12:41:15 -0400
Subject: [PATCH 10/16] Removing PageDataGetters and its related servlets and
tests. VIVO-218
---
.../controller/json/GetDataForPage.java | 39 --
.../webapp/controller/json/JsonServlet.java | 145 +++++++-
.../pageDataGetter/BrowseDataGetter.java | 234 ------------
.../pageDataGetter/ClassGroupPageData.java | 155 --------
.../IndividualsForClassesDataGetter.java | 316 ----------------
.../utils/pageDataGetter/PageDataGetter.java | 27 --
.../pageDataGetter/PageDataGetterUtils.java | 339 ------------------
.../utils/dataGetter/DataGetterUtilsTest.java | 11 +-
.../dataGetter/resources/dataGetterTest.n3 | 11 +-
.../PageDataGetterUtilsTest.java | 68 ----
.../resources/pageDataGetter.n3 | 30 --
11 files changed, 137 insertions(+), 1238 deletions(-)
delete mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/controller/json/GetDataForPage.java
delete mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/BrowseDataGetter.java
delete mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/ClassGroupPageData.java
delete mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/IndividualsForClassesDataGetter.java
delete mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetter.java
delete mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetterUtils.java
delete mode 100644 webapp/test/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetterUtilsTest.java
delete mode 100644 webapp/test/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/resources/pageDataGetter.n3
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/json/GetDataForPage.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/json/GetDataForPage.java
deleted file mode 100644
index 632a0a611..000000000
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/json/GetDataForPage.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-
-package edu.cornell.mannlib.vitro.webapp.controller.json;
-
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONObject;
-
-import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
-import edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter.PageDataGetterUtils;
-
-/**
- * Gets data based on data getter for page uri and returns in the form of Json objects
- */
-public class GetDataForPage extends JsonObjectProducer {
- private static final Log log = LogFactory.getLog(GetDataForPage.class);
-
- protected GetDataForPage(VitroRequest vreq) {
- super(vreq);
- }
-
- @Override
- protected JSONObject process() throws Exception {
- JSONObject rObj = null;
- String pageUri = vreq.getParameter("pageUri");
- if(pageUri != null && !pageUri.isEmpty()) {
- Map data = PageDataGetterUtils.getDataForPage(pageUri, vreq, ctx);
- //Convert to json version based on type of page
- if(data != null) {
- //Convert to json version based on type of page
- rObj = PageDataGetterUtils.covertDataToJSONForPage(pageUri, data, vreq, ctx);
- }
- }
- return rObj;
- }
-
-}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/json/JsonServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/json/JsonServlet.java
index 2fbd9d09f..3f516e109 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/json/JsonServlet.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/json/JsonServlet.java
@@ -3,8 +3,11 @@
package edu.cornell.mannlib.vitro.webapp.controller.json;
import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.Enumeration;
import java.util.List;
import java.util.Map;
@@ -15,17 +18,21 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.json.JSONArray;
import org.json.JSONObject;
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
+import edu.cornell.mannlib.vitro.webapp.beans.VClass;
+import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
+import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
+import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.utils.log.LogUtils;
-import edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter.PageDataGetterUtils;
/**
* This servlet is for servicing requests for JSON objects/data.
@@ -69,7 +76,9 @@ public class JsonServlet extends VitroHttpServlet {
log.debug("AJAX request to retrieve individuals by vclasses");
new GetSolrIndividualsByVClasses(vreq).process(resp);
} else if( vreq.getParameter("getDataForPage") != null ){
- new GetDataForPage(vreq).process(resp);
+ throw new IllegalArgumentException("The call invoked deprecated classes " +
+ "and the parameter for this call appeared nowhere in the code base, " +
+ "so it was removed in Aug 5th 2013.");
}else if( vreq.getParameter("getRenderedSolrIndividualsByVClass") != null ){
new GetRenderedSolrIndividualsByVClass(vreq).process(resp);
}else if( vreq.getParameter("getRandomSolrIndividualsByVClass") != null ){
@@ -85,7 +94,7 @@ public class JsonServlet extends VitroHttpServlet {
Map map = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
//last parameter indicates single vclass instead of multiple vclasses
- return processVClassResults(map, vreq, context, false);
+ return processVclassResultsJSON(map, vreq, false);
}
public static JSONObject getSolrIndividualsByVClasses(List vclassURIs, HttpServletRequest req, ServletContext context) throws Exception {
@@ -93,8 +102,8 @@ public class JsonServlet extends VitroHttpServlet {
log.debug("Retrieve solr results for vclasses" + vclassURIs.toString());
Map map = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
log.debug("Results returned from Solr for " + vclassURIs.toString() + " are of size " + map.size());
- JSONObject rObj = processVClassResults(map, vreq, context, true);
- return rObj;
+
+ return processVclassResultsJSON(map, vreq, true);
}
//Including version for Solr query for Vclass Intersections
@@ -119,10 +128,10 @@ public class JsonServlet extends VitroHttpServlet {
}
// Map given to process method includes the actual individuals returned from the search
- public static JSONObject processVClassResults(Map map, VitroRequest vreq, ServletContext context, boolean multipleVclasses) throws Exception{
- JSONObject rObj = PageDataGetterUtils.processVclassResultsJSON(map, vreq, multipleVclasses);
- return rObj;
- }
+// public static JSONObject processVClassResults(Map map, VitroRequest vreq, ServletContext context, boolean multipleVclasses) throws Exception{
+// JSONObject rObj = processVclassResultsJSON(map, vreq, multipleVclasses);
+// return rObj;
+// }
public static Collection getMostSpecificTypes(Individual individual, WebappDaoFactory wdf) {
ObjectPropertyStatementDao opsDao = wdf.getObjectPropertyStatementDao();
@@ -143,7 +152,7 @@ public class JsonServlet extends VitroHttpServlet {
Map map = getRandomSolrVClassResults(vclassURI, vreq, context);
//last parameter indicates single vclass instead of multiple vclasses
- return processVClassResults(map, vreq, context, false);
+ return processVclassResultsJSON(map, vreq, false);
}
//Including version for Random Solr query for Vclass Intersections
@@ -169,4 +178,120 @@ public class JsonServlet extends VitroHttpServlet {
}
+ /**
+ * Process results related to VClass or vclasses. Handles both single and multiple vclasses being sent.
+ */
+ public static JSONObject processVclassResultsJSON(Map map, VitroRequest vreq, boolean multipleVclasses) {
+ JSONObject rObj = new JSONObject();
+ VClass vclass=null;
+
+ try {
+
+ // Properties from ontologies used by VIVO - should not be in vitro
+ DataProperty fNameDp = (new DataProperty());
+ fNameDp.setURI("http://xmlns.com/foaf/0.1/firstName");
+ DataProperty lNameDp = (new DataProperty());
+ lNameDp.setURI("http://xmlns.com/foaf/0.1/lastName");
+ DataProperty preferredTitleDp = (new DataProperty());
+ preferredTitleDp.setURI("http://vivoweb.org/ontology/core#preferredTitle");
+
+ if( log.isDebugEnabled() ){
+ @SuppressWarnings("unchecked")
+ Enumeration e = vreq.getParameterNames();
+ while(e.hasMoreElements()){
+ String name = e.nextElement();
+ log.debug("parameter: " + name);
+ for( String value : vreq.getParameterValues(name) ){
+ log.debug("value for " + name + ": '" + value + "'");
+ }
+ }
+ }
+
+ //need an unfiltered dao to get firstnames and lastnames
+ WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
+
+ String[] vitroClassIdStr = vreq.getParameterValues("vclassId");
+ if ( vitroClassIdStr != null && vitroClassIdStr.length > 0){
+ for(String vclassId: vitroClassIdStr) {
+ vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassId);
+ if (vclass == null) {
+ log.error("Couldn't retrieve vclass ");
+ throw new Exception ("Class " + vclassId + " not found");
+ }
+ }
+ }else{
+ log.error("parameter vclassId URI parameter expected ");
+ throw new Exception("parameter vclassId URI parameter expected ");
+ }
+ List vclassIds = Arrays.asList(vitroClassIdStr);
+ //if single vclass expected, then include vclass. This relates to what the expected behavior is, not size of list
+ if(!multipleVclasses) {
+ //currently used for ClassGroupPage
+ rObj.put("vclass",
+ new JSONObject().put("URI",vclass.getURI())
+ .put("name",vclass.getName()));
+ } else {
+ //For now, utilize very last VClass (assume that that is the one to be employed)
+ //TODO: Find more general way of dealing with this
+ //put multiple ones in?
+ if(vclassIds.size() > 0) {
+ int numberVClasses = vclassIds.size();
+ vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassIds.get(numberVClasses - 1));
+ rObj.put("vclass", new JSONObject().put("URI",vclass.getURI())
+ .put("name",vclass.getName()));
+ }
+ // rObj.put("vclasses", new JSONObject().put("URIs",vitroClassIdStr)
+ // .put("name",vclass.getName()));
+ }
+ if (vclass != null) {
+
+ rObj.put("totalCount", map.get("totalCount"));
+ rObj.put("alpha", map.get("alpha"));
+
+ List inds = (List)map.get("entities");
+ log.debug("Number of individuals returned from request: " + inds.size());
+ JSONArray jInds = new JSONArray();
+ for(Individual ind : inds ){
+ JSONObject jo = new JSONObject();
+ jo.put("URI", ind.getURI());
+ jo.put("label",ind.getRdfsLabel());
+ jo.put("name",ind.getName());
+ jo.put("thumbUrl", ind.getThumbUrl());
+ jo.put("imageUrl", ind.getImageUrl());
+ jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
+
+ jo.put("mostSpecificTypes", JsonServlet.getMostSpecificTypes(ind,fullWdf));
+ jo.put("preferredTitle", JsonServlet.getDataPropertyValue(ind, preferredTitleDp, fullWdf));
+
+ jInds.put(jo);
+ }
+ rObj.put("individuals", jInds);
+
+ JSONArray wpages = new JSONArray();
+ //Made sure that PageRecord here is SolrIndividualListController not IndividualListController
+ List pages = (List)map.get("pages");
+ for( PageRecord pr: pages ){
+ JSONObject p = new JSONObject();
+ p.put("text", pr.text);
+ p.put("param", pr.param);
+ p.put("index", pr.index);
+ wpages.put( p );
+ }
+ rObj.put("pages",wpages);
+
+ JSONArray jletters = new JSONArray();
+ List letters = Controllers.getLetters();
+ for( String s : letters){
+ JSONObject jo = new JSONObject();
+ jo.put("text", s);
+ jo.put("param", "alpha=" + URLEncoder.encode(s, "UTF-8"));
+ jletters.put( jo );
+ }
+ rObj.put("letters", jletters);
+ }
+ } catch(Exception ex) {
+ log.error("Error occurred in processing JSON object", ex);
+ }
+ return rObj;
+ }
}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/BrowseDataGetter.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/BrowseDataGetter.java
deleted file mode 100644
index 7fbd63ada..000000000
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/BrowseDataGetter.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-
-package edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONArray;
-import org.json.JSONObject;
-
-import edu.cornell.mannlib.vitro.webapp.beans.Individual;
-import edu.cornell.mannlib.vitro.webapp.beans.VClass;
-import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
-import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
-import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
-import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
-import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
-import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
-import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
-import edu.cornell.mannlib.vitro.webapp.utils.JsonToFmModel;
-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.individuallist.ListedIndividual;
-
-public class BrowseDataGetter implements PageDataGetter {
- final static Log log = LogFactory.getLog(BrowseDataGetter.class);
-
- @Override
- public Map getData(ServletContext context,
- VitroRequest vreq, String pageUri, Map page) {
- try{
- Map params = vreq.getParameterMap();
-
- Mode mode = getMode( vreq, params );
- switch( mode ){
- case VCLASS_ALPHA:
- return doClassAlphaDisplay(params,vreq,context);
- case CLASS_GROUP:
- return doClassGroupDisplay(params, vreq, context);
- case VCLASS:
- return doClassDisplay(params, vreq, context);
- case ALL_CLASS_GROUPS:
- return doAllClassGroupsDisplay( params, page, vreq, context);
- default:
- return doAllClassGroupsDisplay( params, page, vreq, context);
- }
- }catch(Throwable th){
- log.error(th,th);
- return Collections.emptyMap();
- }
- }
-
- @Override
- public String getType() {
- return DisplayVocabulary.HOME_PAGE_TYPE;
- }
-
- //Get data servuice
- @Override
- public String getDataServiceUrl() {
- return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClass=1&vclassId=");
- }
- private Map doClassAlphaDisplay( Map params, VitroRequest request, ServletContext context) throws Exception {
- Map body = new HashMap();
- body.putAll(getCommonValues(context, request));
- body.putAll(getClassAlphaValues(params,request,context));
- return body;
- }
-
- private Map getClassAlphaValues( Map params, VitroRequest request, ServletContext context) throws Exception{
- Map map= new HashMap();
-
- String classUri = getParam(Mode.VCLASS, request, params);
- VitroRequest vreq = new VitroRequest(request);
- VClass vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(classUri);
- map.put("class", new VClassTemplateModel(vclass));
-
- JSONObject vclassRes = JsonServlet.getSolrIndividualsByVClass(vclass.getURI(), request, context);
- map.put("totalCount", JsonToFmModel.convertJSONObjectToMap( (String) vclassRes.get("totalCount") ));
- map.put("alpha", JsonToFmModel.convertJSONObjectToMap( (String) vclassRes.get("alpha") ));
- map.put("individuals", JsonToFmModel.convertJSONArrayToList( (JSONArray) vclassRes.get("individuals") ));
- map.put("pages", JsonToFmModel.convertJSONArrayToList( (JSONArray) vclassRes.get("pages") ));
- map.put("letters", JsonToFmModel.convertJSONArrayToList( (JSONArray) vclassRes.get("letters") ));
-
- return map;
- }
-
- private Map getCommonValues( ServletContext context, VitroRequest vreq){
- Map values = new HashMap();
-
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
- List cgList = vcgc.getGroups();
- LinkedList cgtmList = new LinkedList();
- for( VClassGroup classGroup : cgList){
- cgtmList.add( new VClassGroupTemplateModel( classGroup ));
- }
- values.put("vClassGroups",cgtmList);
-
- return values;
- }
-
- protected Map doAllClassGroupsDisplay( Map params, Map page, VitroRequest request, ServletContext context) {
- Map body = new HashMap();
- body.putAll(getCommonValues(context,request));
- body.putAll(getAllClassGroupData(request, params, page, context));
-
- return body;
- }
-
- /**
- * Gets a list of all VClassGroups with vclasses with individual counts.
- * @param params2
- */
- protected Map getAllClassGroupData(VitroRequest request, Map params, Map page, ServletContext context){
- Map map = new HashMap();
- return map;
- }
-
- protected Map doClassDisplay( Map params,
- VitroRequest request, ServletContext context) {
- Map body = new HashMap();
-
- body.putAll(getCommonValues(context,request));
- body.putAll(getClassData(request,params,context));
-
- return body;
- }
-
- private Map getClassData(VitroRequest request, Map params, ServletContext context) {
- Map map = new HashMap();
-
- map.putAll(getClassGroupData(request, params,context));
-
- String classUri = getParam(Mode.VCLASS, request, params);
- VitroRequest vreq = new VitroRequest(request);
- VClass vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(classUri);
- map.put("class", new VClassTemplateModel(vclass));
-
- List inds = vreq.getWebappDaoFactory().getIndividualDao()
- .getIndividualsByVClass(vclass);
-
- List tInds = new ArrayList(inds.size());
- for( Individual ind : inds){
- tInds.add(new ListedIndividual(ind, vreq));
- }
- map.put("individualsInClass", tInds);
-
- return map;
- }
-
- protected Map doClassGroupDisplay(Map params, VitroRequest request, ServletContext context) {
- Map body = new HashMap();
- body.putAll(getCommonValues(context,request));
- body.putAll( getClassGroupData(request,params, context));
-
- return body;
- }
-
- protected Map getClassGroupData(VitroRequest request, Map params, ServletContext context) {
- Map map = new HashMap();
-
- String vcgUri = getParam(Mode.CLASS_GROUP, request, params);
- VitroRequest vreq = new VitroRequest(request);
-
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(request);
- VClassGroup vcg = vcgc.getGroup(vcgUri);
-
- ArrayList classes = new ArrayList(vcg.size());
- for( VClass vc : vcg){
- classes.add(new VClassTemplateModel(vc));
- }
- map.put("classes", classes);
-
- map.put("classGroup", new VClassGroupTemplateModel(vcg));
-
- return map;
- }
-
-
- enum Mode{
- VCLASS_ALPHA("vclassAlpha"),
- VCLASS("vclassUri"),
- CLASS_GROUP("classgroupUri"),
- ALL_CLASS_GROUPS("all");
- String param;
- Mode(String param){
- this.param = param;
- }
- }
-
- protected final static Mode DEFAULT_MODE = Mode.ALL_CLASS_GROUPS;
-
- protected Mode getMode(VitroRequest request, Map params){
- for( Mode mode : Mode.values()){
- 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() ){
- return mode;
- }
- }
- return DEFAULT_MODE;
- }
-
- public static String getParam(Mode mode, VitroRequest 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;
- }
-
- /**
- * For processig of JSONObject
- */
- public JSONObject convertToJSON(Map dataMap, VitroRequest vreq) {
- JSONObject rObj = null;
- return rObj;
- }
-
-
-}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/ClassGroupPageData.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/ClassGroupPageData.java
deleted file mode 100644
index 0e68dd4b9..000000000
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/ClassGroupPageData.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-
-package edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONObject;
-
-import edu.cornell.mannlib.vitro.webapp.beans.VClass;
-import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
-import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
-import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
-import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
-import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
-import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
-
-/**
- * This will pass these variables to the template:
- * classGroupUri: uri of the classgroup associated with this page.
- * vClassGroup: a data structure that is the classgroup associated with this page.
- */
-public class ClassGroupPageData implements PageDataGetter{
- private static final Log log = LogFactory.getLog(ClassGroupPageData.class);
-
- @Override
- public Map getData(ServletContext context, VitroRequest vreq, String pageUri, Map page ){
- HashMap data = new HashMap();
- String classGroupUri = vreq.getWebappDaoFactory().getPageDao().getClassGroupPage(pageUri);
- data.put("classGroupUri", classGroupUri);
-
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
- List vcgList = vcgc.getGroups();
- VClassGroup group = null;
- for( VClassGroup vcg : vcgList){
- if( vcg.getURI() != null && vcg.getURI().equals(classGroupUri)){
- group = vcg;
- break;
- }
- }
- if( classGroupUri != null && !classGroupUri.isEmpty() && group == null ){
- /*This could be for two reasons: one is that the classgroup doesn't exist
- * The other is that there are no individuals in any of the classgroup's classes */
- group = vreq.getWebappDaoFactory().getVClassGroupDao().getGroupByURI(classGroupUri);
- if( group != null ){
- List vcgFullList = vreq.getWebappDaoFactory().getVClassGroupDao()
- .getPublicGroupsWithVClasses(false, true, false);
- for( VClassGroup vcg : vcgFullList ){
- if( classGroupUri.equals(vcg.getURI()) ){
- group = vcg;
- break;
- }
- }
- if( group == null ){
- log.error("Cannot get classgroup '" + classGroupUri + "' for page '" + pageUri + "'");
- }else{
- setAllClassCountsToZero(group);
- }
- }else{
- log.error("classgroup " + classGroupUri + " does not exist in the system");
- }
-
- }
- log.debug("Retrieved class group " + group.getURI() + " and returning to template");
- //if debug enabled, print out the number of entities within each class in the class gorup
- if(log.isDebugEnabled()){
- List groupClasses = group.getVitroClassList();
- for(VClass v: groupClasses) {
- log.debug("Class " + v.getName() + " - " + v.getURI() + " has " + v.getEntityCount() + " entities");
- }
- }
- data.put("vClassGroup", group); //may put null
-
- //This page level data getters tries to set its own template,
- // not all of the data getters need to do this.
- data.put("bodyTemplate", "page-classgroup.ftl");
-
- //Also add data service url
- //Hardcoding for now, need a more dynamic way of doing this
- data.put("dataServiceUrlIndividualsByVClass", this.getDataServiceUrl());
- return data;
- }
-
- public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){
-
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
- List vcgList = vcgc.getGroups();
- VClassGroup group = null;
- for( VClassGroup vcg : vcgList){
- if( vcg.getURI() != null && vcg.getURI().equals(classGroupUri)){
- group = vcg;
- break;
- }
- }
-
- if( classGroupUri != null && !classGroupUri.isEmpty() && group == null ){
- /*This could be for two reasons: one is that the classgroup doesn't exist
- * The other is that there are no individuals in any of the classgroup's classes */
- group = vreq.getWebappDaoFactory().getVClassGroupDao().getGroupByURI(classGroupUri);
- if( group != null ){
- List vcgFullList = vreq.getWebappDaoFactory().getVClassGroupDao()
- .getPublicGroupsWithVClasses(false, true, false);
- for( VClassGroup vcg : vcgFullList ){
- if( classGroupUri.equals(vcg.getURI()) ){
- group = vcg;
- break;
- }
- }
- if( group == null ){
- log.error("Cannot get classgroup '" + classGroupUri + "'");
- return null;
- }else{
- setAllClassCountsToZero(group);
- }
- }else{
- log.error("classgroup " + classGroupUri + " does not exist in the system");
- return null;
- }
- }
-
- return new VClassGroupTemplateModel(group);
- }
-
- @Override
- public String getType(){
- return PageDataGetterUtils.generateDataGetterTypeURI(ClassGroupPageData.class.getName());
- }
-
- //Get data servuice
- @Override
- public String getDataServiceUrl() {
- return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClass=1&vclassId=");
- }
-
-
- /**
- * For processing of JSONObject
- */
- //Currently empty, TODO: Review requirements
- @Override
- public JSONObject convertToJSON(Map dataMap, VitroRequest vreq) {
- JSONObject rObj = null;
- return rObj;
- }
- protected static void setAllClassCountsToZero(VClassGroup vcg){
- for(VClass vc : vcg){
- vc.setEntityCount(0);
- }
- }
-}
\ No newline at end of file
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/IndividualsForClassesDataGetter.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/IndividualsForClassesDataGetter.java
deleted file mode 100644
index 902f8ca9d..000000000
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/IndividualsForClassesDataGetter.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-
-package edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter;
-
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONObject;
-
-import edu.cornell.mannlib.vitro.webapp.beans.VClass;
-import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
-import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
-import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
-import edu.cornell.mannlib.vitro.webapp.dao.PageDao;
-import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
-import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
-import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
-
-/**
- * This will pass these variables to the template:
- * classGroupUri: uri of the classgroup associated with this page.
- * vClassGroup: a data structure that is the classgroup associated with this page.
- */
-public class IndividualsForClassesDataGetter implements PageDataGetter{
- private static final Log log = LogFactory.getLog(IndividualsForClassesDataGetter.class);
- protected static String restrictClassesTemplateName = null;
- @Override
- public Map getData(ServletContext context, VitroRequest vreq, String pageUri, Map page ){
- this.setTemplateName();
- HashMap data = new HashMap();
- //This is the old technique of getting class intersections
- PageDao pageDao = vreq.getWebappDaoFactory().getPageDao();
- Map classIntersectionsMap = getClassIntersectionsMap(pageDao, pageUri);
-
- try{
- List classes = retrieveClasses(context, classIntersectionsMap);
- List restrictClasses = retrieveRestrictClasses(context, classIntersectionsMap);
- log.debug("Retrieving classes for " + classes.toString() + " and restricting by " + restrictClasses.toString());
- processClassesAndRestrictions(vreq, context, data, classes, restrictClasses);
- //Also add data service url
- //Hardcoding for now, need a more dynamic way of doing this
- data.put("dataServiceUrlIndividualsByVClass", this.getDataServiceUrl());
- //this is the class group associated with the data getter utilized for display on menu editing, not the custom one created
- data.put("classGroupUri", pageDao.getClassGroupPage(pageUri));
- } catch(Exception ex) {
- log.error("An error occurred retrieving Vclass Intersection individuals", ex);
- }
-
- return data;
- }
-
- protected void setTemplateName() {
- this.restrictClassesTemplateName = "restricted";
- }
-
- protected Map getClassIntersectionsMap(PageDao pageDao,
- String pageUri) {
- // TODO Auto-generated method stub
- return pageDao.getClassesAndRestrictionsForPage(pageUri);
- }
-
- protected List retrieveClasses(
- ServletContext context, Map classIntersectionsMap) {
- List restrictClasses = (List) classIntersectionsMap.get("classes");
- return restrictClasses;
- }
-
- protected List retrieveRestrictClasses(
- ServletContext context, Map classIntersectionsMap) {
- List restrictClasses = (List) classIntersectionsMap.get("restrictClasses");
- return restrictClasses;
- }
-
- protected void processClassesAndRestrictions(VitroRequest vreq, ServletContext context,
- HashMap data, List classes, List restrictClasses ) {
- processClassesForDisplay(vreq, context, data, classes);
- processRestrictionClasses(vreq, context, data, restrictClasses);
- processIntersections(vreq, context, data);
-
- }
-
-
-
- //At this point, data specifices whether or not intersections included
- private void processIntersections(VitroRequest vreq,
- ServletContext context, HashMap data) {
- VClassGroup classesGroup = (VClassGroup) data.get("vClassGroup");
- List vclassList = classesGroup.getVitroClassList();
- List restrictClasses = (List) data.get("restrictVClasses");
- //if there are restrict classes, then update counts
- if(restrictClasses.size() > 0) {
- log.debug("Restriction classes exist");
- List newVClassList = new ArrayList();
- //Iterate through vclasses and get updated counts, iterated and saved in same order as initially included
- for(VClass v: vclassList) {
- int oldCount = v.getEntityCount();
- //Making a copy so as to ensure we don't touch the values in the cache
- VClass copyVClass = makeCopyVClass(v);
- int count = retrieveCount(vreq, context, v, restrictClasses);
- if(oldCount != count) {
- log.debug("Old count was " + v.getEntityCount() + " and New count for " + v.getURI() + " is " + count);
- copyVClass.setEntityCount(count);
- }
- newVClassList.add(copyVClass);
- }
- classesGroup.setVitroClassList(newVClassList);
- //TODO: Do we need to do this again or will this already be reset?
- data.put("vClassGroup", classesGroup);
- }
- }
-
- private VClass makeCopyVClass(VClass v) {
- VClass copyVClass = new VClass(v.getURI());
- copyVClass.setLocalName(copyVClass.getLocalName());
- copyVClass.setDisplayRank(v.getDisplayRank());
- copyVClass.setName(v.getName());
- copyVClass.setNamespace(v.getNamespace());
- copyVClass.setEntityCount(v.getEntityCount());
- return copyVClass;
- }
-
- //update class count based on restrict classes
- private int retrieveCount(VitroRequest vreq, ServletContext context, VClass v, List restrictClasses) {
- //Execute solr query that returns only count of individuals
- log.debug("Entity count is " + v.getEntityCount());
- List classUris = new ArrayList();
- classUris.add(v.getURI());
- for(VClass r: restrictClasses) {
- classUris.add(r.getURI());
- }
- long count = PageDataGetterUtils.getIndividualCountForIntersection(vreq, context, classUris);
- return new Long(count).intValue();
-
- }
-
- private void processClassesForDisplay(VitroRequest vreq, ServletContext context, HashMap data, List classes) {
- VClassGroup classesGroup = new VClassGroup();
- classesGroup.setURI("displayClasses");
- log.debug("Processing classes that will be displayed");
- List vClasses = new ArrayList();
-
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
- for(String classUri: classes) {
- //Retrieve vclass from cache to get the count
- VClass vclass = vcgc.getCachedVClass(classUri);
- //if not found in cache, possibly due to not being in any class group
- if(vclass == null) {
- vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(classUri);
- }
- if(vclass != null) {
- log.debug("VClass does exist for " + classUri + " and entity count is " + vclass.getEntityCount());
- vClasses.add(vclass);
- } else {
- log.debug("Vclass " + classUri + " does not exist in the cache");
- log.error("Error occurred, vclass does not exist for this uri " + classUri);
- //Throw exception here
- }
- }
- //Sort these classes
- Collections.sort(vClasses);
- log.debug("Sorting complete for V Classes");
- classesGroup.setVitroClassList(vClasses);
- log.debug("Returning vitro class list in data for template");
- //Set vclass group
- data.put("vClassGroup", classesGroup);
- }
-
- private void processRestrictionClasses(VitroRequest vreq, ServletContext context,
- HashMap data, List restrictClasses) {
- try {
- VClassGroup restrictClassesGroup = new VClassGroup();
- restrictClassesGroup.setURI("restrictClasses");
-
- List restrictVClasses = new ArrayList();
-
- List urlEncodedRestrictClasses = new ArrayList();
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
-
- if(restrictClasses.size() > 0) {
- //classes for restriction are not displayed so don't need to include their class individual counts
- for(String restrictClassUri: restrictClasses) {
- //Also uses cache to remain consistent with process classes and also allow
- //vclasses to be returned even if switched to display model, although
- //uris used within display model editing and not vclass objects
- VClass vclass = vcgc.getCachedVClass(restrictClassUri);
- //if not found in cache, possibly due to not being in any class group
- if(vclass == null) {
- vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(restrictClassUri);
- }
- if(vclass != null) {
- log.debug("Found restrict class and adding to list " + restrictClassUri);
- restrictVClasses.add(vclass);
- } else {
- log.error("Error occurred, vclass does not exist for this uri " + restrictClassUri);
- }
- //Assuming utf-8?
- urlEncodedRestrictClasses.add(URLEncoder.encode(restrictClassUri, "UTF-8"));
- }
-
- restrictClassesGroup.setVitroClassList(restrictVClasses);
- restrictClassesGroup.setIndividualCount(restrictVClasses.size());
- } else {
-
- }
- String[] restrictClassesArray = new String[urlEncodedRestrictClasses.size()];
- restrictClassesArray = urlEncodedRestrictClasses.toArray(restrictClassesArray);
-
- //In case just want uris
- log.debug("Variable name for including restriction classes " + getRestrictClassesTemplateName());
- data.put(getRestrictClassesTemplateName(), StringUtils.join(restrictClassesArray, ","));
- data.put("restrictVClasses", restrictVClasses);
- //not sure if this is useful
- data.put("restrictVClassGroup", restrictClassesGroup);
- } catch(Exception ex) {
- log.error("An error occurred in processing restriction classes ", ex);
- }
- }
-
- public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){
-
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
- List vcgList = vcgc.getGroups();
- VClassGroup group = null;
- for( VClassGroup vcg : vcgList){
- if( vcg.getURI() != null && vcg.getURI().equals(classGroupUri)){
- group = vcg;
- break;
- }
- }
-
- if( classGroupUri != null && !classGroupUri.isEmpty() && group == null ){
- /*This could be for two reasons: one is that the classgroup doesn't exist
- * The other is that there are no individuals in any of the classgroup's classes */
- group = vreq.getWebappDaoFactory().getVClassGroupDao().getGroupByURI(classGroupUri);
- if( group != null ){
- List vcgFullList = vreq.getWebappDaoFactory().getVClassGroupDao()
- .getPublicGroupsWithVClasses(false, true, false);
- for( VClassGroup vcg : vcgFullList ){
- if( classGroupUri.equals(vcg.getURI()) ){
- group = vcg;
- break;
- }
- }
- if( group == null ){
- log.error("Cannot get classgroup '" + classGroupUri + "'");
- return null;
- }else{
- setAllClassCountsToZero(group);
- }
- }else{
- log.error("classgroup " + classGroupUri + " does not exist in the system");
- return null;
- }
- }
-
- return new VClassGroupTemplateModel(group);
- }
-
- @Override
- public String getType(){
- return PageDataGetterUtils.generateDataGetterTypeURI(IndividualsForClassesDataGetter.class.getName());
- }
-
- //Get data servuice
- @Override
- public String getDataServiceUrl() {
- return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClasses=1&vclassId=");
- }
- /**
- * For processig of JSONObject
- */
- @Override
- public JSONObject convertToJSON(Map map, VitroRequest vreq) {
- JSONObject rObj = PageDataGetterUtils.processVclassResultsJSON(map, vreq, true);
- return rObj;
- }
-
- protected static void setAllClassCountsToZero(VClassGroup vcg){
- for(VClass vc : vcg){
- vc.setEntityCount(0);
- }
- }
-
- protected static String getAlphaParameter(VitroRequest request){
- return request.getParameter("alpha");
- }
-
- protected static int getPageParameter(VitroRequest request) {
- String pageStr = request.getParameter("page");
- if( pageStr != null ){
- try{
- return Integer.parseInt(pageStr);
- }catch(NumberFormatException nfe){
- log.debug("could not parse page parameter");
- return 1;
- }
- }else{
- return 1;
- }
- }
-
- //Get template parameter
- private static String getRestrictClassesTemplateName() {
- return restrictClassesTemplateName;
-
- }
-}
\ No newline at end of file
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetter.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetter.java
deleted file mode 100644
index 724ed0353..000000000
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetter.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-
-package edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter;
-
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
-import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
-
-import org.json.JSONObject;
-
-public interface PageDataGetter{
- Map getData(ServletContext contect, VitroRequest vreq, String pageUri, Map page );
-
- /** Gets the type that this class applies to */
- //This has been changed to return the class name for data getter used in menu management
- String getType();
-
- //get data service url based on data getter requirements
- //Get data servuice
- String getDataServiceUrl();
-
- /**Convert data to JSONObject based on what's required for the data processing**/
- JSONObject convertToJSON(Map map, VitroRequest vreq);
-}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetterUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetterUtils.java
deleted file mode 100644
index 94dd8d378..000000000
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetterUtils.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-
-package edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter;
-
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONArray;
-import org.json.JSONObject;
-
-import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
-import edu.cornell.mannlib.vitro.webapp.beans.Individual;
-import edu.cornell.mannlib.vitro.webapp.beans.VClass;
-import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
-import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
-import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
-import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
-import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
-import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
-import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
-import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
-import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
-import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
-
-public class PageDataGetterUtils {
- protected static final String DATA_GETTER_MAP = "pageTypeToDataGetterMap";
- private static final Log log = LogFactory.getLog(PageDataGetterUtils.class);
-
- public static Map getDataForPage(String pageUri, VitroRequest vreq, ServletContext context) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
- //Based on page type get the appropriate data getter
- Map page = vreq.getWebappDaoFactory().getPageDao().getPage(pageUri);
-
- Map data = new HashMap();
- List dataGetters = getPageDataGetterObjects(vreq, pageUri);
- for(PageDataGetter getter: dataGetters) {
- try{
- Map moreData = null;
- moreData = getAdditionalData(pageUri, getter.getType(), page, vreq, getter, context);
- if( moreData != null)
- data.putAll(moreData);
- }catch(Throwable th){
- log.error(th,th);
- }
- }
- return data;
- }
-
- /**
- *
- * Convert data to JSON for page uri based on type and related datagetters
- * TODO: How to handle different data getters? Will this replace json fields or add to them?
- * @throws ClassNotFoundException
- * @throws IllegalAccessException
- * @throws InstantiationException
- */
- public static JSONObject covertDataToJSONForPage(String pageUri, Map data, VitroRequest vreq, ServletContext context) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
- //Get PageDataGetter types associated with pageUri
- JSONObject rObj = null;
- List dataGetters = getPageDataGetterObjects(vreq, pageUri);
- for(PageDataGetter getter: dataGetters) {
- JSONObject typeObj = null;
- try{
- typeObj = getter.convertToJSON(data, vreq);
- if( typeObj != null) {
- //Copy over everything from this type Obj to
- //TODO: Review how to handle duplicate keys, etc.
- if(rObj != null) {
- //For now, just nests as separate entry
- rObj.put(getter.getType(), typeObj);
- } else {
- rObj = typeObj;
- }
- }
-
- } catch(Throwable th){
- log.error(th,th);
- }
- }
- return rObj;
- }
-
- public static Map getAdditionalData(
- String pageUri, String dataGetterName, Map page, VitroRequest vreq, PageDataGetter getter, ServletContext context) {
- if(dataGetterName == null || dataGetterName.isEmpty())
- return Collections.emptyMap();
-
-
- if( getter != null ){
- try{
- log.debug("Retrieve data for this data getter for " + pageUri);
- return getter.getData(context, vreq, pageUri, page);
- }catch(Throwable th){
- log.error(th,th);
- return Collections.emptyMap();
- }
- } else {
- return Collections.emptyMap();
- }
- }
-
- /***
- * For the page, get the actual Data Getters to be employed.
- * @throws ClassNotFoundException
- * @throws IllegalAccessException
- * @throws InstantiationException
- */
- public static List getPageDataGetterObjects(VitroRequest vreq, String pageUri) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
- List dataGetterObjects = new ArrayList();
-
- List dataGetterClassNames = vreq.getWebappDaoFactory().getPageDao().getDataGetterClass(pageUri);
- if( dataGetterClassNames == null )
- return Collections.emptyList();
-
- for(String dgClassName: dataGetterClassNames) {
- String className = getClassNameFromUri(dgClassName);
- Class> clz = Class.forName(className);
-
- if( PageDataGetter.class.isAssignableFrom(clz)){
- PageDataGetter pg = (PageDataGetter) clz.newInstance();
- dataGetterObjects.add(pg);
- }// else skip if class does not implement PageDataGetter
- }
-
- return dataGetterObjects;
- }
-
- //Class URIs returned include "java:" and to instantiate object need to remove java: portion
- public static String getClassNameFromUri(String dataGetterClassUri) {
- if( !StringUtils.isEmpty(dataGetterClassUri) && dataGetterClassUri.contains("java:")) {
- String[] splitArray = dataGetterClassUri.split("java:");
- if(splitArray.length > 1) {
- return splitArray[1];
- }
- }
- return dataGetterClassUri;
- }
-
- /**
- * Get Individual count for Solr query for intersection of multiple classes
- */
- public static long getIndividualCountForIntersection(VitroRequest vreq, ServletContext context, List classUris) {
- return IndividualListController.getIndividualCount(classUris, vreq.getWebappDaoFactory().getIndividualDao(), context);
- }
-
-
- /**
- * Process results related to VClass or vclasses. Handles both single and multiple vclasses being sent.
- */
- public static JSONObject processVclassResultsJSON(Map map, VitroRequest vreq, boolean multipleVclasses) {
- JSONObject rObj = new JSONObject();
- VClass vclass=null;
-
- try {
-
- // Properties from ontologies used by VIVO - should not be in vitro
- DataProperty fNameDp = (new DataProperty());
- fNameDp.setURI("http://xmlns.com/foaf/0.1/firstName");
- DataProperty lNameDp = (new DataProperty());
- lNameDp.setURI("http://xmlns.com/foaf/0.1/lastName");
- DataProperty preferredTitleDp = (new DataProperty());
- preferredTitleDp.setURI("http://vivoweb.org/ontology/core#preferredTitle");
-
- if( log.isDebugEnabled() ){
- @SuppressWarnings("unchecked")
- Enumeration e = vreq.getParameterNames();
- while(e.hasMoreElements()){
- String name = e.nextElement();
- log.debug("parameter: " + name);
- for( String value : vreq.getParameterValues(name) ){
- log.debug("value for " + name + ": '" + value + "'");
- }
- }
- }
-
- //need an unfiltered dao to get firstnames and lastnames
- WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
-
- String[] vitroClassIdStr = vreq.getParameterValues("vclassId");
- if ( vitroClassIdStr != null && vitroClassIdStr.length > 0){
- for(String vclassId: vitroClassIdStr) {
- vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassId);
- if (vclass == null) {
- log.error("Couldn't retrieve vclass ");
- throw new Exception ("Class " + vclassId + " not found");
- }
- }
- }else{
- log.error("parameter vclassId URI parameter expected ");
- throw new Exception("parameter vclassId URI parameter expected ");
- }
- List vclassIds = Arrays.asList(vitroClassIdStr);
- //if single vclass expected, then include vclass. This relates to what the expected behavior is, not size of list
- if(!multipleVclasses) {
- //currently used for ClassGroupPage
- rObj.put("vclass",
- new JSONObject().put("URI",vclass.getURI())
- .put("name",vclass.getName()));
- } else {
- //For now, utilize very last VClass (assume that that is the one to be employed)
- //TODO: Find more general way of dealing with this
- //put multiple ones in?
- if(vclassIds.size() > 0) {
- int numberVClasses = vclassIds.size();
- vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassIds.get(numberVClasses - 1));
- rObj.put("vclass", new JSONObject().put("URI",vclass.getURI())
- .put("name",vclass.getName()));
- }
- // rObj.put("vclasses", new JSONObject().put("URIs",vitroClassIdStr)
- // .put("name",vclass.getName()));
- }
- if (vclass != null) {
-
- rObj.put("totalCount", map.get("totalCount"));
- rObj.put("alpha", map.get("alpha"));
-
- List inds = (List)map.get("entities");
- log.debug("Number of individuals returned from request: " + inds.size());
- JSONArray jInds = new JSONArray();
- for(Individual ind : inds ){
- JSONObject jo = new JSONObject();
- jo.put("URI", ind.getURI());
- jo.put("label",ind.getRdfsLabel());
- jo.put("name",ind.getName());
- jo.put("thumbUrl", ind.getThumbUrl());
- jo.put("imageUrl", ind.getImageUrl());
- jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
-
- jo.put("mostSpecificTypes", JsonServlet.getMostSpecificTypes(ind,fullWdf));
- jo.put("preferredTitle", JsonServlet.getDataPropertyValue(ind, preferredTitleDp, fullWdf));
-
- jInds.put(jo);
- }
- rObj.put("individuals", jInds);
-
- JSONArray wpages = new JSONArray();
- //Made sure that PageRecord here is SolrIndividualListController not IndividualListController
- List pages = (List)map.get("pages");
- for( PageRecord pr: pages ){
- JSONObject p = new JSONObject();
- p.put("text", pr.text);
- p.put("param", pr.param);
- p.put("index", pr.index);
- wpages.put( p );
- }
- rObj.put("pages",wpages);
-
- JSONArray jletters = new JSONArray();
- List letters = Controllers.getLetters();
- for( String s : letters){
- JSONObject jo = new JSONObject();
- jo.put("text", s);
- jo.put("param", "alpha=" + URLEncoder.encode(s, "UTF-8"));
- jletters.put( jo );
- }
- rObj.put("letters", jletters);
- }
- } catch(Exception ex) {
- log.error("Error occurred in processing JSON object", ex);
- }
- return rObj;
- }
-
- /*
- * Copied from JSONServlet as expect this to be related to VitroClassGroup
- */
- public static JSONObject processVClassGroupJSON(VitroRequest vreq, ServletContext context, VClassGroup vcg) {
- JSONObject map = new JSONObject();
- try {
- ArrayList classes = new ArrayList(vcg.size());
- for( VClass vc : vcg){
- JSONObject vcObj = new JSONObject();
- vcObj.put("name", vc.getName());
- vcObj.put("URI", vc.getURI());
- vcObj.put("entityCount", vc.getEntityCount());
- classes.add(vcObj);
- }
- map.put("classes", classes);
- map.put("classGroupName", vcg.getPublicName());
- map.put("classGroupUri", vcg.getURI());
-
- } catch(Exception ex) {
- log.error("Error occurred in processing VClass group ", ex);
- }
- return map;
- }
-
-
- //Get All VClass Groups information
- //Used within menu management and processing
- //TODO: Check if more appropriate location possible
- public static List> getClassGroups(HttpServletRequest req) {
- //Wanted this to be
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(req);
- List vcgList = vcgc.getGroups();
- //For now encoding as hashmap with label and URI as trying to retrieve class group
- //results in errors for some reason
- List> classGroups = new ArrayList>();
- for(VClassGroup vcg: vcgList) {
- HashMap hs = new HashMap();
- hs.put("publicName", vcg.getPublicName());
- hs.put("URI", vcg.getURI());
- classGroups.add(hs);
- }
- return classGroups;
- }
-
- //Return data getter type to be employed in display model
- public static String generateDataGetterTypeURI(String dataGetterClassName) {
- return "java:" + dataGetterClassName;
- }
-
- //TODO: Check whether this needs to be put here or elsewhere, as this is data getter specific
- //with respect to class groups
- //Need to use VClassGroupCache to retrieve class group information - this is the information returned from "for class group"
- public static void getClassGroupForDataGetter(HttpServletRequest req, Map pageData, Map templateData) {
- //Get the class group from VClassGroup, this is the same as the class group for the class group page data getter
- //and the associated class group (not custom) for individuals datagetter
- String classGroupUri = (String) pageData.get("classGroupUri");
- VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(req);
- VClassGroup group = vcgc.getGroup(classGroupUri);
-
- templateData.put("classGroup", group);
- templateData.put("associatedPage", group.getPublicName());
- templateData.put("associatedPageURI", group.getURI());
- }
-
-}
\ No newline at end of file
diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterUtilsTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterUtilsTest.java
index 3c03fd856..a788e179e 100644
--- a/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterUtilsTest.java
+++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterUtilsTest.java
@@ -67,15 +67,6 @@ public class DataGetterUtilsTest extends AbstractTestClass{
}
- @Test
- public void testNonPageDataGetter() throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, ClassNotFoundException, InvocationTargetException, NoSuchMethodException{
- DataGetter dg = DataGetterUtils.dataGetterForURI(vreq, displayModel,dataGetterX);
- Assert.assertNull(dg);
-
- List dgList =
- DataGetterUtils.getDataGettersForPage(vreq, displayModel, pageX);
- Assert.assertNotNull(dgList);
- Assert.assertTrue("List should be, it was not", dgList.size() == 0);
- }
+
}
diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/resources/dataGetterTest.n3 b/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/resources/dataGetterTest.n3
index 4e1f95ad0..4c9ecc56c 100644
--- a/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/resources/dataGetterTest.n3
+++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/resources/dataGetterTest.n3
@@ -20,14 +20,5 @@ display:query1data
display:saveToVar "people" .
-### test of what happens with a PageDataGetter instead of a DataGetter ###
-
-display:pageX
- a display:Page ;
- display:title "A PageDataGetter, not a DataGetter" ;
- display:urlMapping "/query2" ;
- display:hasDataGetter display:pageDataGetterX .
-
-display:pageDataGetterX
- a .
+
\ No newline at end of file
diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetterUtilsTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetterUtilsTest.java
deleted file mode 100644
index a6745102c..000000000
--- a/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/PageDataGetterUtilsTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-package edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter;
-
-import java.io.InputStream;
-import java.util.List;
-
-import org.apache.log4j.Level;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import stubs.javax.servlet.http.HttpServletRequestStub;
-
-import com.hp.hpl.jena.ontology.OntModel;
-import com.hp.hpl.jena.ontology.OntModelSpec;
-import com.hp.hpl.jena.rdf.model.ModelFactory;
-import com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler;
-
-import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
-import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
-import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess;
-import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
-import edu.cornell.mannlib.vitro.webapp.dao.jena.SimpleOntModelSelector;
-import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena;
-
-public class PageDataGetterUtilsTest extends AbstractTestClass{
- OntModel displayModel;
- WebappDaoFactory wdf;
-
- String pageURI = "http://vitro.mannlib.cornell.edu/ontologies/display/1.1#pageX";
- String pageURI_2 = "http://vitro.mannlib.cornell.edu/ontologies/display/1.1#SPARQLPage";
-
- @Before
- public void setUp() throws Exception {
- // Suppress error logging.
- setLoggerLevel(RDFDefaultErrorHandler.class, Level.OFF);
-
- OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM);
- InputStream in = PageDataGetterUtilsTest.class.getResourceAsStream("resources/pageDataGetter.n3");
- model.read(in,"","N3");
- displayModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM,model);
-
- SimpleOntModelSelector sos = new SimpleOntModelSelector( ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM));
- sos.setDisplayModel(displayModel);
-
- wdf = new WebappDaoFactoryJena(sos);
- }
-
- @Test
- public void testGetPageDataGetterObjects() throws Exception{
- VitroRequest vreq = new VitroRequest( new HttpServletRequestStub() );
- ModelAccess.on(vreq).setWebappDaoFactory(wdf);
-
- List pdgList = PageDataGetterUtils.getPageDataGetterObjects(vreq, pageURI);
- Assert.assertNotNull(pdgList);
- Assert.assertTrue("should have one PageDataGetter", pdgList.size() == 1);
- }
-
- @Test
- public void testGetNonPageDataGetterObjects() throws Exception{
- VitroRequest vreq = new VitroRequest( new HttpServletRequestStub() );
- ModelAccess.on(vreq).setWebappDaoFactory(wdf);
-
- List pdgList = PageDataGetterUtils.getPageDataGetterObjects(vreq, pageURI_2);
- Assert.assertNotNull(pdgList);
- Assert.assertTrue("should have no PageDataGetters", pdgList.size() == 0);
- }
-}
diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/resources/pageDataGetter.n3 b/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/resources/pageDataGetter.n3
deleted file mode 100644
index f3ec2f4c0..000000000
--- a/webapp/test/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/resources/pageDataGetter.n3
+++ /dev/null
@@ -1,30 +0,0 @@
-# $This file is distributed under the terms of the license in /doc/license.txt$
-
-@prefix owl: .
-@prefix display: .
-@prefix rdf: .
-@prefix core: .
-@prefix xsd: .
-
-### This file is for the test PageDataGetterUtilsTest.java
-
-display:SPARQLPage
- a display:Page ;
- display:title "TestQuery" ;
- display:urlMapping "/query1" ;
- display:hasDataGetter display:query1data .
-
-display:query1data
- a ;
- display:query "SELECT * WHERE { ?uri a } " ;
- display:saveToVar "people" .
-
-display:pageX
- a display:Page ;
- display:title "A PageDataGetter, not a DataGetter" ;
- display:urlMapping "/query2" ;
- display:hasDataGetter display:pageDataGetterX .
-
-display:pageDataGetterX
- a .
-
\ No newline at end of file
From 37142c0231a98d6c645dfd41f06acfd9b2bf8e0d Mon Sep 17 00:00:00 2001
From: tworrall
Date: Mon, 5 Aug 2013 15:12:24 -0400
Subject: [PATCH 11/16] VIVO-208: all fields now displayed when custom forms
are rendered; customized 2-stage forms will still work as before
---
.../controller/AutocompleteController.java | 139 ++++++++++--------
.../forms/js/customFormWithAutocomplete.js | 92 ++++++++----
2 files changed, 143 insertions(+), 88 deletions(-)
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java
index 359a53529..51958ba45 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java
@@ -33,7 +33,7 @@ import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup;
/**
* AutocompleteController generates autocomplete content
- * via the search index.
+ * via the search index.
*/
public class AutocompleteController extends VitroAjaxController {
@@ -49,7 +49,7 @@ public class AutocompleteController extends VitroAjaxController {
String NORESULT_MSG = "";
- private static final int DEFAULT_MAX_HIT_COUNT = 1000;
+ private static final int DEFAULT_MAX_HIT_COUNT = 1000;
public static final int MAX_QUERY_LENGTH = 500;
@@ -57,50 +57,50 @@ public class AutocompleteController extends VitroAjaxController {
protected Actions requiredActions(VitroRequest vreq) {
return SimplePermission.USE_BASIC_AJAX_CONTROLLERS.ACTIONS;
}
-
+
@Override
protected void doRequest(VitroRequest vreq, HttpServletResponse response)
throws IOException, ServletException {
-
+
try {
-
+
String qtxt = vreq.getParameter(PARAM_QUERY);
-
- SolrQuery query = getQuery(qtxt, vreq);
+
+ SolrQuery query = getQuery(qtxt, vreq);
if (query == null ) {
log.debug("query for '" + qtxt +"' is null.");
doNoQuery(response);
return;
}
log.debug("query for '" + qtxt +"' is " + query.toString());
-
+
SolrServer solr = SolrSetup.getSolrServer(getServletContext());
QueryResponse queryResponse = solr.query(query);
if ( queryResponse == null) {
- log.error("Query response for a search was null");
+ log.error("Query response for a search was null");
doNoSearchResults(response);
return;
}
-
+
SolrDocumentList docs = queryResponse.getResults();
if ( docs == null) {
- log.error("Docs for a search was null");
+ log.error("Docs for a search was null");
doNoSearchResults(response);
return;
}
-
+
long hitCount = docs.getNumFound();
log.debug("Total number of hits = " + hitCount);
- if ( hitCount < 1 ) {
+ if ( hitCount < 1 ) {
doNoSearchResults(response);
return;
- }
+ }
List results = new ArrayList();
for (SolrDocument doc : docs) {
- try {
+ try {
String uri = doc.get(VitroSearchTermNames.URI).toString();
// RY 7/1/2011
// Comment was: VitroSearchTermNames.NAME_RAW is a multivalued field, so doc.get() returns a list.
@@ -116,61 +116,71 @@ public class AutocompleteController extends VitroAjaxController {
} else {
name = (String) nameRaw;
}
- SearchResult result = new SearchResult(name, uri);
+
+ Object mostSpecificType = doc.get(VitroSearchTermNames.MOST_SPECIFIC_TYPE_URIS);
+ String mst = null;
+ if (mostSpecificType instanceof List>) {
+ @SuppressWarnings("unchecked")
+ List mstList = (List) mostSpecificType;
+ mst = mstList.get(0);
+ } else {
+ mst = (String) mostSpecificType;
+ }
+
+ SearchResult result = new SearchResult(name, uri, mst);
results.add(result);
+ log.debug("results = " + results.toString());
} catch(Exception e){
log.error("problem getting usable individuals from search " +
"hits" + e.getMessage());
}
- }
+ }
Collections.sort(results);
-
+
JSONArray jsonArray = new JSONArray();
for (SearchResult result : results) {
jsonArray.put(result.toMap());
}
response.getWriter().write(jsonArray.toString());
-
+
} catch (Throwable e) {
- log.error(e, e);
+ log.error(e, e);
doSearchError(response);
}
}
private SolrQuery getQuery(String queryStr, VitroRequest vreq) {
-
+
if ( queryStr == null) {
- log.error("There was no parameter '"+ PARAM_QUERY
- +"' in the request.");
+ log.error("There was no parameter '"+ PARAM_QUERY
+ +"' in the request.");
return null;
} else if( queryStr.length() > MAX_QUERY_LENGTH ) {
log.debug("The search was too long. The maximum " +
"query length is " + MAX_QUERY_LENGTH );
return null;
}
-
+
SolrQuery query = new SolrQuery();
query.setStart(0)
- .setRows(DEFAULT_MAX_HIT_COUNT);
-
+ .setRows(DEFAULT_MAX_HIT_COUNT);
setNameQuery(query, queryStr, vreq);
-
// Filter by type
String typeParam = (String) vreq.getParameter(PARAM_RDFTYPE);
String multipleTypesParam = (String) vreq.getParameter(PARAM_MULTIPLE_RDFTYPE);
if (typeParam != null) {
addFilterQuery(query, typeParam, multipleTypesParam);
- }
-
- query.setFields(VitroSearchTermNames.NAME_RAW, VitroSearchTermNames.URI); // fields to retrieve
-
+ }
+
+ query.setFields(VitroSearchTermNames.NAME_RAW, VitroSearchTermNames.URI, VitroSearchTermNames.MOST_SPECIFIC_TYPE_URIS); // fields to retrieve
+
// Can't sort on multivalued field, so we sort the results in Java when we get them.
// query.setSortField(VitroSearchTermNames.NAME_LOWERCASE, SolrQuery.ORDER.asc);
-
+
return query;
}
-
+
private void addFilterQuery(SolrQuery query, String typeParam, String multipleTypesParam) {
if(multipleTypesParam == null || multipleTypesParam.equals("null") || multipleTypesParam.isEmpty()) {
//Single type parameter, process as usual
@@ -181,15 +191,13 @@ public class AutocompleteController extends VitroAjaxController {
int len = typeParams.length;
int i;
List filterQueries = new ArrayList();
-
+
for(i = 0; i < len; i++) {
filterQueries.add(VitroSearchTermNames.RDFTYPE + ":\"" + typeParams[i] + "\" ");
}
String filterQuery = StringUtils.join(filterQueries, " OR ");
query.addFilterQuery(filterQuery);
}
-
-
}
private void setNameQuery(SolrQuery query, String queryStr, HttpServletRequest request) {
@@ -197,10 +205,9 @@ public class AutocompleteController extends VitroAjaxController {
if (StringUtils.isBlank(queryStr)) {
log.error("No query string");
}
-
- String tokenizeParam = (String) request.getParameter("tokenize");
+ String tokenizeParam = (String) request.getParameter("tokenize");
boolean tokenize = "true".equals(tokenizeParam);
-
+
// Note: Stemming is only relevant if we are tokenizing: an untokenized name
// query will not be stemmed. So we don't look at the stem parameter until we get to
// setTokenizedNameQuery().
@@ -210,43 +217,43 @@ public class AutocompleteController extends VitroAjaxController {
setUntokenizedNameQuery(query, queryStr);
}
}
-
+
private void setTokenizedNameQuery(SolrQuery query, String queryStr, HttpServletRequest request) {
/* We currently have no use case for a tokenized, unstemmed autocomplete search field, so the option
* has been disabled. If needed in the future, will need to add a new field and field type which
* is like AC_NAME_STEMMED but doesn't include the stemmer.
- String stemParam = (String) request.getParameter("stem");
+ String stemParam = (String) request.getParameter("stem");
boolean stem = "true".equals(stemParam);
if (stem) {
String acTermName = VitroSearchTermNames.AC_NAME_STEMMED;
String nonAcTermName = VitroSearchTermNames.NAME_STEMMED;
} else {
String acTermName = VitroSearchTermNames.AC_NAME_UNSTEMMED;
- String nonAcTermName = VitroSearchTermNames.NAME_UNSTEMMED;
+ String nonAcTermName = VitroSearchTermNames.NAME_UNSTEMMED;
}
*/
-
+
String acTermName = VitroSearchTermNames.AC_NAME_STEMMED;
String nonAcTermName = VitroSearchTermNames.NAME_STEMMED;
String acQueryStr;
-
+
if (queryStr.endsWith(" ")) {
- acQueryStr = makeTermQuery(nonAcTermName, queryStr, true);
+ acQueryStr = makeTermQuery(nonAcTermName, queryStr, true);
} else {
int indexOfLastWord = queryStr.lastIndexOf(" ") + 1;
List terms = new ArrayList(2);
-
+
String allButLastWord = queryStr.substring(0, indexOfLastWord);
if (StringUtils.isNotBlank(allButLastWord)) {
terms.add(makeTermQuery(nonAcTermName, allButLastWord, true));
}
-
+
String lastWord = queryStr.substring(indexOfLastWord);
if (StringUtils.isNotBlank(lastWord)) {
terms.add(makeTermQuery(acTermName, lastWord, false));
}
-
+
acQueryStr = StringUtils.join(terms, " AND ");
}
@@ -255,26 +262,26 @@ public class AutocompleteController extends VitroAjaxController {
}
- private void setUntokenizedNameQuery(SolrQuery query, String queryStr) {
- queryStr = queryStr.trim();
+ private void setUntokenizedNameQuery(SolrQuery query, String queryStr) {
+ queryStr = queryStr.trim();
queryStr = makeTermQuery(VitroSearchTermNames.AC_NAME_UNTOKENIZED, queryStr, true);
query.setQuery(queryStr);
}
-
+
private String makeTermQuery(String term, String queryStr, boolean mayContainWhitespace) {
if (mayContainWhitespace) {
queryStr = "\"" + escapeWhitespaceInQueryString(queryStr) + "\"";
}
return term + ":" + queryStr;
}
-
+
private String escapeWhitespaceInQueryString(String queryStr) {
// Solr wants whitespace to be escaped with a backslash
return queryStr.replaceAll("\\s+", "\\\\ ");
}
-
+
private void doNoQuery(HttpServletResponse response) throws IOException {
- // For now, we are not sending an error message back to the client because
+ // For now, we are not sending an error message back to the client because
// with the default autocomplete configuration it chokes.
doNoSearchResults(response);
}
@@ -288,36 +295,46 @@ public class AutocompleteController extends VitroAjaxController {
private void doNoSearchResults(HttpServletResponse response) throws IOException {
response.getWriter().write("[]");
}
-
+
public class SearchResult implements Comparable