Merge branch 'develop' of github.com:vivo-project/Vitro into develop
This commit is contained in:
commit
f243511526
57 changed files with 533 additions and 390 deletions
|
@ -0,0 +1,401 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.utilities.containerneutral;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.ServletContextListener;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.xml.namespace.NamespaceContext;
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
import javax.xml.xpath.XPath;
|
||||||
|
import javax.xml.xpath.XPathConstants;
|
||||||
|
import javax.xml.xpath.XPathExpression;
|
||||||
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
|
import javax.xml.xpath.XPathFactory;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Look at web.xml, and check for conditions that violate the Servlet 2.4 spec,
|
||||||
|
* but that might not be noticed because Tomcat doesn't complain.
|
||||||
|
*
|
||||||
|
* ------
|
||||||
|
*
|
||||||
|
* Values of the <dispatcher/> tag:
|
||||||
|
*
|
||||||
|
* The spec permits only these values: "FORWARD", "REQUEST", "INCLUDE", "ERROR",
|
||||||
|
* but Tomcat also allows the lower-case equivalents. GlassFish or WebLogic will
|
||||||
|
* barf on lower-case.
|
||||||
|
*
|
||||||
|
* Check to see that only the upper-case values are used.
|
||||||
|
*
|
||||||
|
* ------
|
||||||
|
*
|
||||||
|
* Existence of Servlet classes:
|
||||||
|
*
|
||||||
|
* The spec allows the container to either load all servlets at startup, or to
|
||||||
|
* load them when requested. Since Tomcat only loads servlet when requested, it
|
||||||
|
* doesn't notice or complain if web.xml cites a <servlet-class/> that doesn't
|
||||||
|
* exist, as long as it is never invoked. On the other hand, WebLogic loads all
|
||||||
|
* serlvets at startup, and will barf if the class is not found.
|
||||||
|
*
|
||||||
|
* Check each <servlet-class/> to insure that the class can be loaded and
|
||||||
|
* instantiated and assigned to HttpServlet.
|
||||||
|
*
|
||||||
|
* ------
|
||||||
|
*
|
||||||
|
* Embedded URIs in taglibs.
|
||||||
|
*
|
||||||
|
* I can't find this definitively in the JSP spec, but some containers complain
|
||||||
|
* if web.xml specifies a <taglib-uri/> that conflicts with the <uri/> embedded
|
||||||
|
* in the taglib itself. As far as I can see in the spec, the embedded <uri/>
|
||||||
|
* tag is not required or referenced unless we are using
|
||||||
|
* "Implicit Map Entries From TLDs", which in turn is only relevant for TLDs
|
||||||
|
* packaged in JAR files. So, I can't find support for this complaint, but it
|
||||||
|
* seems a reasonable one.
|
||||||
|
*
|
||||||
|
* Check each <taglib/> specified in web.xml. If the taglib has an embedded
|
||||||
|
* <uri/> tag, it should match the <taglib-uri/> from web.xml.
|
||||||
|
*
|
||||||
|
* ------
|
||||||
|
*
|
||||||
|
* Existence of Listener and Filter classes.
|
||||||
|
*
|
||||||
|
* As far as I can tell, there is no ambiguity here, and every container will
|
||||||
|
* complain if any of the <listener-class/> or <filter-class/> entries are
|
||||||
|
* unsuitable. I check them anyway, since the mechanism was already assembled
|
||||||
|
* for checking <servlet-class/> entries.
|
||||||
|
*
|
||||||
|
* Check each <listener-class/> to insure that the class can be loaded and
|
||||||
|
* instantiated and assigned to ServletContextListener.
|
||||||
|
*
|
||||||
|
* Check each <filter-class/> to insure that the class can be loaded and
|
||||||
|
* instantiated and assigned to Filter.
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Although this class is executed as a JUnit test, it doesn't have the usual
|
||||||
|
* structure for a unit test.
|
||||||
|
*
|
||||||
|
* In order to produce the most diagnostic information, the test does not abort
|
||||||
|
* on the first failure. Rather, failure messages are accumulated until all
|
||||||
|
* checks have been performed, and the test list all such messages on failure.
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Since this is not executed as part of the standard Vitro unit tests, it also
|
||||||
|
* cannot use the standard logging mechanism. Log4J has not been initialized.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CheckContainerNeutrality {
|
||||||
|
private static final String PROPERTY_WEBAPP_DIR = "CheckContainerNeutrality.webapp.dir";
|
||||||
|
|
||||||
|
private static DocumentBuilder docBuilder;
|
||||||
|
private static XPath xpath;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void createDocBuilder() {
|
||||||
|
try {
|
||||||
|
DocumentBuilderFactory factory = DocumentBuilderFactory
|
||||||
|
.newInstance();
|
||||||
|
factory.setNamespaceAware(true); // never forget this!
|
||||||
|
docBuilder = factory.newDocumentBuilder();
|
||||||
|
} catch (ParserConfigurationException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void createXPath() {
|
||||||
|
xpath = XPathFactory.newInstance().newXPath();
|
||||||
|
xpath.setNamespaceContext(new StupidNamespaceContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
private File webappDir;
|
||||||
|
private File webXmlFile;
|
||||||
|
private Document webXmlDoc;
|
||||||
|
private List<String> messages;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() throws SAXException, IOException {
|
||||||
|
String webappDirPath = System.getProperty(PROPERTY_WEBAPP_DIR);
|
||||||
|
if (webappDirPath == null) {
|
||||||
|
fail("System property '" + PROPERTY_WEBAPP_DIR
|
||||||
|
+ "' was not provided.");
|
||||||
|
}
|
||||||
|
webappDir = new File(webappDirPath);
|
||||||
|
if (!webappDir.isDirectory()) {
|
||||||
|
fail("'" + webappDirPath + "' is not a directory");
|
||||||
|
}
|
||||||
|
webXmlFile = new File(webappDir, "WEB-INF/web.xml");
|
||||||
|
if (!webXmlFile.isFile()) {
|
||||||
|
fail("Can't find '" + webXmlFile.getAbsolutePath() + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
webXmlDoc = docBuilder.parse(webXmlFile);
|
||||||
|
|
||||||
|
messages = new ArrayList<String>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void checkAll() throws IOException {
|
||||||
|
checkDispatcherValues();
|
||||||
|
checkServletClasses();
|
||||||
|
checkListenerClasses();
|
||||||
|
checkFilterClasses();
|
||||||
|
checkTaglibLocations();
|
||||||
|
|
||||||
|
if (!messages.isEmpty()) {
|
||||||
|
fail("Found these problems with '" + webXmlFile.getCanonicalPath()
|
||||||
|
+ "'\n " + StringUtils.join(messages, "\n "));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkDispatcherValues() {
|
||||||
|
List<String> okValues = Arrays.asList(new String[] { "FORWARD",
|
||||||
|
"REQUEST", "INCLUDE", "ERROR" });
|
||||||
|
for (Node n : findNodes("//j2ee:dispatcher")) {
|
||||||
|
String text = n.getTextContent();
|
||||||
|
if (!okValues.contains(text)) {
|
||||||
|
messages.add("<dispatcher>" + text
|
||||||
|
+ "</dispatcher> is not valid. Acceptable values are "
|
||||||
|
+ okValues);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkServletClasses() {
|
||||||
|
for (Node n : findNodes("//j2ee:servlet-class")) {
|
||||||
|
String text = n.getTextContent();
|
||||||
|
String problem = confirmClassNameIsValid(text, HttpServlet.class);
|
||||||
|
if (problem != null) {
|
||||||
|
messages.add("<servlet-class>" + text
|
||||||
|
+ "</servlet-class> is not valid: " + problem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkListenerClasses() {
|
||||||
|
for (Node n : findNodes("//j2ee:listener-class")) {
|
||||||
|
String text = n.getTextContent();
|
||||||
|
String problem = confirmClassNameIsValid(text,
|
||||||
|
ServletContextListener.class);
|
||||||
|
if (problem != null) {
|
||||||
|
messages.add("<listener-class>" + text
|
||||||
|
+ "</listener-class> is not valid: " + problem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkFilterClasses() {
|
||||||
|
for (Node n : findNodes("//j2ee:filter-class")) {
|
||||||
|
String text = n.getTextContent();
|
||||||
|
String problem = confirmClassNameIsValid(text, Filter.class);
|
||||||
|
if (problem != null) {
|
||||||
|
messages.add("<filter-class>" + text
|
||||||
|
+ "</filter-class> is not valid: " + problem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkTaglibLocations() {
|
||||||
|
for (Node n : findNodes("//j2ee:jsp-config/j2ee:taglib")) {
|
||||||
|
String taglibUri = findNode("j2ee:taglib-uri", n).getTextContent();
|
||||||
|
String taglibLocation = findNode("j2ee:taglib-location", n)
|
||||||
|
.getTextContent();
|
||||||
|
// System.out.println("taglibUri='" + taglibUri
|
||||||
|
// + "', taglibLocation='" + taglibLocation + "'");
|
||||||
|
String message = checkTaglibUri(taglibUri, taglibLocation);
|
||||||
|
if (message != null) {
|
||||||
|
messages.add(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String checkTaglibUri(String taglibUri, String taglibLocation) {
|
||||||
|
File taglibFile = new File(webappDir, taglibLocation);
|
||||||
|
if (!taglibFile.isFile()) {
|
||||||
|
return "File '" + taglibLocation + "' can't be found ('"
|
||||||
|
+ taglibFile.getAbsolutePath() + "')";
|
||||||
|
}
|
||||||
|
|
||||||
|
Document taglibDoc;
|
||||||
|
try {
|
||||||
|
taglibDoc = docBuilder.parse(taglibFile);
|
||||||
|
} catch (SAXException e) {
|
||||||
|
return "Failed to parse the taglib file '" + taglibFile + "': " + e;
|
||||||
|
} catch (IOException e) {
|
||||||
|
return "Failed to parse the taglib file '" + taglibFile + "': " + e;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Node> uriNodes = findNodes("/j2ee:taglib/j2ee:uri",
|
||||||
|
taglibDoc.getDocumentElement());
|
||||||
|
// System.out.println("uriNodes: " + uriNodes);
|
||||||
|
if (uriNodes.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (uriNodes.size() > 1) {
|
||||||
|
return "taglib '" + taglibLocation + "' contains "
|
||||||
|
+ uriNodes.size()
|
||||||
|
+ " <uri> nodes. Expecting no more than 1";
|
||||||
|
}
|
||||||
|
|
||||||
|
String embeddedUri = uriNodes.get(0).getTextContent();
|
||||||
|
if (taglibUri.equals(embeddedUri)) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return "URI in taglib doesn't match the one in web.xml: taglib='"
|
||||||
|
+ taglibLocation + "', internal URI='"
|
||||||
|
+ uriNodes.get(0).getTextContent()
|
||||||
|
+ "', URI from web.xml='" + taglibUri + "'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for an Xpath in web.xml, returning a handy list.
|
||||||
|
*/
|
||||||
|
private List<Node> findNodes(String pattern) {
|
||||||
|
return findNodes(pattern, webXmlDoc.getDocumentElement());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for an Xpath within a node of web.xml, returning a handy list.
|
||||||
|
*/
|
||||||
|
private List<Node> findNodes(String pattern, Node context) {
|
||||||
|
try {
|
||||||
|
XPathExpression xpe = xpath.compile(pattern);
|
||||||
|
NodeList nodes = (NodeList) xpe.evaluate(context,
|
||||||
|
XPathConstants.NODESET);
|
||||||
|
List<Node> list = new ArrayList<Node>();
|
||||||
|
for (int i = 0; i < nodes.getLength(); i++) {
|
||||||
|
list.add(nodes.item(i));
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
} catch (XPathExpressionException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for an Xpath within a node of web.xml, returning a single node or
|
||||||
|
* throwing an exception.
|
||||||
|
*/
|
||||||
|
private Node findNode(String pattern, Node context) {
|
||||||
|
List<Node> list = findNodes(pattern, context);
|
||||||
|
if (list.size() != 1) {
|
||||||
|
throw new RuntimeException("Expecting 1 node, but found "
|
||||||
|
+ list.size() + " nodes using '" + pattern + "'");
|
||||||
|
} else {
|
||||||
|
return list.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check that the supplied className can be instantiated with a
|
||||||
|
* zero-argument constructor, and assigned to a variable of the target
|
||||||
|
* class.
|
||||||
|
*/
|
||||||
|
private String confirmClassNameIsValid(String className,
|
||||||
|
Class<?> targetClass) {
|
||||||
|
try {
|
||||||
|
Class<?> specifiedClass = Class.forName(className);
|
||||||
|
Object o = specifiedClass.newInstance();
|
||||||
|
if (!targetClass.isInstance(o)) {
|
||||||
|
return specifiedClass.getSimpleName()
|
||||||
|
+ " is not a subclass of "
|
||||||
|
+ targetClass.getSimpleName() + ".";
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
return "The class does not exist.";
|
||||||
|
} catch (InstantiationException e) {
|
||||||
|
return "The class does not have a public constructor "
|
||||||
|
+ "that takes zero arguments.";
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
return "The class does not have a public constructor "
|
||||||
|
+ "that takes zero arguments.";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dump the first 20 nodes of an XML context, excluding comments and blank
|
||||||
|
* text nodes.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private int dumpXml(Node xmlNode, int... parms) {
|
||||||
|
int remaining = (parms.length == 0) ? 20 : parms[0];
|
||||||
|
int level = (parms.length < 2) ? 1 : parms[1];
|
||||||
|
|
||||||
|
Node n = xmlNode;
|
||||||
|
|
||||||
|
if (Node.COMMENT_NODE == n.getNodeType()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (Node.TEXT_NODE == n.getNodeType()) {
|
||||||
|
if (StringUtils.isBlank(n.getTextContent())) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int used = 1;
|
||||||
|
|
||||||
|
System.out.println(StringUtils.repeat("-->", level) + n);
|
||||||
|
NodeList nl = n.getChildNodes();
|
||||||
|
for (int i = 0; (i < nl.getLength() && remaining > used); i++) {
|
||||||
|
used += dumpXml(nl.item(i), remaining - used, level + 1);
|
||||||
|
}
|
||||||
|
return used;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper classes
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private static class StupidNamespaceContext implements NamespaceContext {
|
||||||
|
@Override
|
||||||
|
public String getNamespaceURI(String prefix) {
|
||||||
|
if ("j2ee".equals(prefix)) {
|
||||||
|
return "http://java.sun.com/xml/ns/j2ee";
|
||||||
|
} else {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPrefix(String namespaceURI) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<?> getPrefixes(String namespaceURI) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -84,8 +84,13 @@
|
||||||
<target name="compileBuildtools">
|
<target name="compileBuildtools">
|
||||||
<path id="utility.compile.classpath">
|
<path id="utility.compile.classpath">
|
||||||
<fileset dir="${buildtools.lib.dir}" includes="*.jar" />
|
<fileset dir="${buildtools.lib.dir}" includes="*.jar" />
|
||||||
|
<fileset dir="${appbase.dir}/lib">
|
||||||
|
<include name="commons-io-2.0.1.jar" />
|
||||||
|
<include name="commons-lang-2.6.jar" />
|
||||||
|
<include name="servlet-api.jar" />
|
||||||
|
</fileset>
|
||||||
</path>
|
</path>
|
||||||
|
|
||||||
<mkdir dir="${buildtools.compiled.dir}" />
|
<mkdir dir="${buildtools.compiled.dir}" />
|
||||||
<javac srcdir="${buildtools.source.dir}"
|
<javac srcdir="${buildtools.source.dir}"
|
||||||
destdir="${buildtools.compiled.dir}"
|
destdir="${buildtools.compiled.dir}"
|
||||||
|
@ -110,7 +115,7 @@
|
||||||
<target name="prepare">
|
<target name="prepare">
|
||||||
<mkdir dir="${build.dir}" />
|
<mkdir dir="${build.dir}" />
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- - - - - - - - - - - - - - - - - -
|
<!-- - - - - - - - - - - - - - - - - -
|
||||||
target: prepareWebappDir
|
target: prepareWebappDir
|
||||||
- - - - - - - - - - - - - - - - - -->
|
- - - - - - - - - - - - - - - - - -->
|
||||||
|
@ -160,7 +165,7 @@
|
||||||
<filename name="runtime.properties" />
|
<filename name="runtime.properties" />
|
||||||
</fileset>
|
</fileset>
|
||||||
</copy>
|
</copy>
|
||||||
|
|
||||||
<!-- copy any xml files from source tree to the war directory -->
|
<!-- copy any xml files from source tree to the war directory -->
|
||||||
<copy todir="${main.compiled.dir}">
|
<copy todir="${main.compiled.dir}">
|
||||||
<fileset dir="${appbase.dir}/src" includes="**/*.xml" />
|
<fileset dir="${appbase.dir}/src" includes="**/*.xml" />
|
||||||
|
@ -210,7 +215,7 @@
|
||||||
<pathelement location="${main.compiled.dir}" />
|
<pathelement location="${main.compiled.dir}" />
|
||||||
<path refid="main.compile.classpath" />
|
<path refid="main.compile.classpath" />
|
||||||
</path>
|
</path>
|
||||||
|
|
||||||
<mkdir dir="${unittests.compiled.dir}" />
|
<mkdir dir="${unittests.compiled.dir}" />
|
||||||
<javac srcdir="${appbase.dir}/test"
|
<javac srcdir="${appbase.dir}/test"
|
||||||
destdir="${unittests.compiled.dir}"
|
destdir="${unittests.compiled.dir}"
|
||||||
|
@ -335,7 +340,7 @@
|
||||||
</fileset>
|
</fileset>
|
||||||
</copy>
|
</copy>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- =================================
|
<!-- =================================
|
||||||
target: deploy
|
target: deploy
|
||||||
================================= -->
|
================================= -->
|
||||||
|
@ -422,6 +427,21 @@ deploy - Deploy the application directly into the Tomcat webapps directory.
|
||||||
<ant dir="${corebase.dir}/../opensocial" antfile="build_orng.xml" target="all" />
|
<ant dir="${corebase.dir}/../opensocial" antfile="build_orng.xml" target="all" />
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
<!-- =================================
|
||||||
|
target: checkContainerNeutrality
|
||||||
|
================================= -->
|
||||||
|
<target name="checkContainerNeutrality" depends="compile, compileBuildtools" description="Look for things that Tomcat tolerates but shouldn't">
|
||||||
|
<junit haltonfailure="true">
|
||||||
|
<test name="edu.cornell.mannlib.vitro.utilities.containerneutral.CheckContainerNeutrality" />
|
||||||
|
<sysproperty key="CheckContainerNeutrality.webapp.dir" value="${main.webapp.dir}"/>
|
||||||
|
<classpath>
|
||||||
|
<path refid="utility.run.classpath" />
|
||||||
|
<path refid="main.compile.classpath" />
|
||||||
|
<pathelement location="${main.compiled.dir}" />
|
||||||
|
</classpath>
|
||||||
|
<formatter type="plain" usefile="false"/>
|
||||||
|
</junit>
|
||||||
|
</target>
|
||||||
|
|
||||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
MACROS
|
MACROS
|
||||||
|
@ -463,4 +483,3 @@ deploy - Deploy the application directly into the Tomcat webapps directory.
|
||||||
</macrodef>
|
</macrodef>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -116,6 +116,9 @@ public class JenaIngestController extends BaseEditController {
|
||||||
private static final String RENAME_RESOURCE = "/jenaIngest/renameResource.jsp";
|
private static final String RENAME_RESOURCE = "/jenaIngest/renameResource.jsp";
|
||||||
private static final String RENAME_RESULT = "/jenaIngest/renameResult.jsp";
|
private static final String RENAME_RESULT = "/jenaIngest/renameResult.jsp";
|
||||||
private static final String CREATED_GRAPH_BASE_URI = "http://vitro.mannlib.cornell.edu/a/graph/";
|
private static final String CREATED_GRAPH_BASE_URI = "http://vitro.mannlib.cornell.edu/a/graph/";
|
||||||
|
public static final boolean MAIN_STORE_STATE = true;
|
||||||
|
public static final boolean AUXILIARY_STORE_STATE = false;
|
||||||
|
private static final String INGEST_STORE_ATTR = JenaIngestController.class.getName() + ".isUsingMainStoreForIngest";
|
||||||
|
|
||||||
private static final Map<String, Model> attachedModels = new HashMap<String, Model>();
|
private static final Map<String, Model> attachedModels = new HashMap<String, Model>();
|
||||||
|
|
||||||
|
@ -214,15 +217,30 @@ public class JenaIngestController extends BaseEditController {
|
||||||
showModelList(vreq, maker, modelType);
|
showModelList(vreq, maker, modelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isUsingMainStoreForIngest(VitroRequest vreq) {
|
||||||
|
Boolean storeState = (Boolean) vreq.getSession().getAttribute(INGEST_STORE_ATTR);
|
||||||
|
if (storeState == null) {
|
||||||
|
return MAIN_STORE_STATE;
|
||||||
|
} else {
|
||||||
|
return storeState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUsingMainStoreForIngest(VitroRequest vreq, boolean storeState) {
|
||||||
|
vreq.getSession().setAttribute(INGEST_STORE_ATTR, storeState);
|
||||||
|
}
|
||||||
|
|
||||||
private void processRDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
private void processRDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
||||||
ModelMaker vjmm = (ModelMaker) getServletContext().getAttribute("vitroJenaModelMaker");
|
ModelMaker vjmm = (ModelMaker) getServletContext().getAttribute("vitroJenaModelMaker");
|
||||||
vreq.getSession().setAttribute("vitroJenaModelMaker", vjmm);
|
vreq.getSession().setAttribute("vitroJenaModelMaker", vjmm);
|
||||||
|
setUsingMainStoreForIngest(vreq, AUXILIARY_STORE_STATE);
|
||||||
showModelList(vreq, vjmm, "rdb");
|
showModelList(vreq, vjmm, "rdb");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processSDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
private void processSDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
||||||
ModelMaker vsmm = (ModelMaker) getServletContext().getAttribute("vitroJenaSDBModelMaker");
|
ModelMaker vsmm = (ModelMaker) getServletContext().getAttribute("vitroJenaSDBModelMaker");
|
||||||
vreq.getSession().setAttribute("vitroJenaModelMaker", vsmm);
|
vreq.getSession().setAttribute("vitroJenaModelMaker", vsmm);
|
||||||
|
setUsingMainStoreForIngest(vreq, MAIN_STORE_STATE);
|
||||||
showModelList(vreq, vsmm, "sdb");
|
showModelList(vreq, vsmm, "sdb");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,9 +53,7 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
|
|
||||||
private static int maxFileSizeInBytes = 1024 * 1024 * 2000; //2000mb
|
private static int maxFileSizeInBytes = 1024 * 1024 * 2000; //2000mb
|
||||||
private static FileItem fileStream = null;
|
private static FileItem fileStream = null;
|
||||||
private static final String INGEST_MENU_JSP = "/jenaIngest/ingestMenu.jsp";
|
|
||||||
private static final String LOAD_RDF_DATA_JSP="/jenaIngest/loadRDFData.jsp";
|
private static final String LOAD_RDF_DATA_JSP="/jenaIngest/loadRDFData.jsp";
|
||||||
private static final String LIST_MODELS_JSP = "/jenaIngest/listModels.jsp";
|
|
||||||
|
|
||||||
public void doPost(HttpServletRequest rawRequest,
|
public void doPost(HttpServletRequest rawRequest,
|
||||||
HttpServletResponse response) throws ServletException, IOException {
|
HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
@ -244,9 +242,11 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
String languageStr = request.getParameter("language");
|
String languageStr = request.getParameter("language");
|
||||||
ModelMaker maker = getVitroJenaModelMaker(request);
|
ModelMaker maker = getVitroJenaModelMaker(request);
|
||||||
|
|
||||||
if (docLoc!=null && modelName != null) {
|
if (modelName == null) {
|
||||||
RDFService rdfService = RDFServiceUtils.getRDFServiceFactory(
|
request.setAttribute("title","Load RDF Data");
|
||||||
getServletContext()).getRDFService();
|
request.setAttribute("bodyJsp",LOAD_RDF_DATA_JSP);
|
||||||
|
} else {
|
||||||
|
RDFService rdfService = getRDFService(request, maker, modelName);
|
||||||
try {
|
try {
|
||||||
doLoadRDFData(modelName, docLoc, filePath, languageStr, rdfService);
|
doLoadRDFData(modelName, docLoc, filePath, languageStr, rdfService);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -254,10 +254,7 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
}
|
}
|
||||||
String modelType = getModelType(request, maker);
|
String modelType = getModelType(request, maker);
|
||||||
showModelList(request, maker, modelType);
|
showModelList(request, maker, modelType);
|
||||||
} else {
|
}
|
||||||
request.setAttribute("title","Load RDF Data");
|
|
||||||
request.setAttribute("bodyJsp",LOAD_RDF_DATA_JSP);
|
|
||||||
}
|
|
||||||
|
|
||||||
RequestDispatcher rd = request.getRequestDispatcher(
|
RequestDispatcher rd = request.getRequestDispatcher(
|
||||||
Controllers.BASIC_JSP);
|
Controllers.BASIC_JSP);
|
||||||
|
@ -272,6 +269,18 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RDFService getRDFService(VitroRequest vreq, ModelMaker maker, String modelName) {
|
||||||
|
if (JenaIngestController.isUsingMainStoreForIngest(vreq)) {
|
||||||
|
log.debug("Using main RDFService");
|
||||||
|
return RDFServiceUtils.getRDFServiceFactory(
|
||||||
|
getServletContext()).getRDFService();
|
||||||
|
} else {
|
||||||
|
log.debug("Making RDFService for single model from ModelMaker");
|
||||||
|
Model m = maker.getModel(modelName);
|
||||||
|
return new RDFServiceModel(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private long operateOnModel(WebappDaoFactory webappDaoFactory,
|
private long operateOnModel(WebappDaoFactory webappDaoFactory,
|
||||||
OntModel mainModel,
|
OntModel mainModel,
|
||||||
Model changesModel,
|
Model changesModel,
|
||||||
|
|
|
@ -9,11 +9,12 @@ import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import com.hp.hpl.jena.query.DataSource;
|
||||||
import com.hp.hpl.jena.query.Dataset;
|
import com.hp.hpl.jena.query.Dataset;
|
||||||
|
import com.hp.hpl.jena.query.DatasetFactory;
|
||||||
import com.hp.hpl.jena.rdf.model.Model;
|
import com.hp.hpl.jena.rdf.model.Model;
|
||||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
||||||
import com.hp.hpl.jena.shared.Lock;
|
import com.hp.hpl.jena.shared.Lock;
|
||||||
import com.hp.hpl.jena.sparql.core.DatasetImpl;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.DatasetWrapper;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.DatasetWrapper;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet;
|
||||||
|
@ -28,14 +29,25 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
||||||
private final static Log log = LogFactory.getLog(RDFServiceModel.class);
|
private final static Log log = LogFactory.getLog(RDFServiceModel.class);
|
||||||
|
|
||||||
private Model model;
|
private Model model;
|
||||||
|
private String modelName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an RDFService to access a single default graph
|
||||||
|
* @param model
|
||||||
|
*/
|
||||||
public RDFServiceModel(Model model) {
|
public RDFServiceModel(Model model) {
|
||||||
this.model = model;
|
this.model = model;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected DatasetWrapper getDatasetWrapper() {
|
protected DatasetWrapper getDatasetWrapper() {
|
||||||
DatasetWrapper datasetWrapper = new DatasetWrapper(new DatasetImpl(model));
|
DataSource d = DatasetFactory.create();
|
||||||
|
if (modelName == null) {
|
||||||
|
d.setDefaultModel(this.model);
|
||||||
|
} else {
|
||||||
|
d.addNamedModel(this.modelName, model);
|
||||||
|
}
|
||||||
|
DatasetWrapper datasetWrapper = new DatasetWrapper(d);
|
||||||
return datasetWrapper;
|
return datasetWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +62,7 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Dataset dataset = getDatasetWrapper().getDataset();
|
//Dataset dataset = getDatasetWrapper().getDataset();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (Object o : changeSet.getPreChangeEvents()) {
|
for (Object o : changeSet.getPreChangeEvents()) {
|
||||||
|
@ -65,15 +77,7 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
||||||
modelChange.setSerializedModel(new ByteArrayInputStream(bytes));
|
modelChange.setSerializedModel(new ByteArrayInputStream(bytes));
|
||||||
}
|
}
|
||||||
modelChange.getSerializedModel().mark(Integer.MAX_VALUE);
|
modelChange.getSerializedModel().mark(Integer.MAX_VALUE);
|
||||||
dataset.getLock().enterCriticalSection(Lock.WRITE);
|
operateOnModel(model, modelChange, null);
|
||||||
try {
|
|
||||||
Model model = (modelChange.getGraphURI() == null)
|
|
||||||
? dataset.getDefaultModel()
|
|
||||||
: dataset.getNamedModel(modelChange.getGraphURI());
|
|
||||||
operateOnModel(model, modelChange, dataset);
|
|
||||||
} finally {
|
|
||||||
dataset.getLock().leaveCriticalSection();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// notify listeners of triple changes
|
// notify listeners of triple changes
|
||||||
|
|
|
@ -1,308 +0,0 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp;
|
|
||||||
|
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
|
||||||
import javax.servlet.ServletContextListener;
|
|
||||||
import javax.servlet.http.HttpServlet;
|
|
||||||
import javax.xml.namespace.NamespaceContext;
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import javax.xml.xpath.XPath;
|
|
||||||
import javax.xml.xpath.XPathConstants;
|
|
||||||
import javax.xml.xpath.XPathExpression;
|
|
||||||
import javax.xml.xpath.XPathExpressionException;
|
|
||||||
import javax.xml.xpath.XPathFactory;
|
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.apache.commons.io.filefilter.IOFileFilter;
|
|
||||||
import org.apache.commons.io.filefilter.NameFileFilter;
|
|
||||||
import org.apache.commons.io.filefilter.NotFileFilter;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.junit.runners.Parameterized;
|
|
||||||
import org.junit.runners.Parameterized.Parameters;
|
|
||||||
import org.w3c.dom.Document;
|
|
||||||
import org.w3c.dom.Node;
|
|
||||||
import org.w3c.dom.NodeList;
|
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check to see that web.xml doesn't include any constructs that are permitted
|
|
||||||
* by Tomcat but prohibited by the Servlet 2.4 Specification.
|
|
||||||
*
|
|
||||||
* These are things that might not be noticed when testing Vitro on Tomcat, but
|
|
||||||
* might show up as problems on other containers like GlassFish or WebLogic.
|
|
||||||
* <ul>
|
|
||||||
* <li>
|
|
||||||
* The contents of <dispatcher/> elements must be upper-case. Tomcat permits
|
|
||||||
* lower-case, but the specification does not.</li>
|
|
||||||
* <li>
|
|
||||||
* All <servlet-class/> tags must point to existing classes. Tomcat does not try
|
|
||||||
* to load a servlet until it is necessary to service a request, but WebLogic
|
|
||||||
* loads them on startup. Either method is permitted by the specification.</li>
|
|
||||||
* </ul>
|
|
||||||
*
|
|
||||||
* As long as we're here, let's check some things that would cause Vitro to fail
|
|
||||||
* in any servlet container.
|
|
||||||
* <ul>
|
|
||||||
* <li>
|
|
||||||
* All <listener-class/> tags must point to existing classes.</li>
|
|
||||||
* <li>
|
|
||||||
* All <filter-class/> tags must point to existing classes.</li>
|
|
||||||
* <li>
|
|
||||||
* All <taglib-location/> tags must point to existing files.</li>
|
|
||||||
* </ul>
|
|
||||||
*/
|
|
||||||
@RunWith(value = Parameterized.class)
|
|
||||||
public class WebXmlTest extends AbstractTestClass {
|
|
||||||
private static final Log log = LogFactory.getLog(WebXmlTest.class);
|
|
||||||
|
|
||||||
@Parameters
|
|
||||||
public static Collection<Object[]> findWebXmlFiles() {
|
|
||||||
IOFileFilter fileFilter = new NameFileFilter("web.xml");
|
|
||||||
IOFileFilter dirFilter = new NotFileFilter(new NameFileFilter(".build"));
|
|
||||||
Collection<File> files = FileUtils.listFiles(new File("."), fileFilter,
|
|
||||||
dirFilter);
|
|
||||||
if (files.isEmpty()) {
|
|
||||||
System.out.println("WARNING: could not find web.xml");
|
|
||||||
} else {
|
|
||||||
if (files.size() > 1) {
|
|
||||||
System.out
|
|
||||||
.println("WARNING: testing more than one web.xml file: "
|
|
||||||
+ files);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Collection<Object[]> parameters = new ArrayList<Object[]>();
|
|
||||||
for (File file : files) {
|
|
||||||
parameters.add(new Object[] { file });
|
|
||||||
}
|
|
||||||
return parameters;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static DocumentBuilder docBuilder = createDocBuilder();
|
|
||||||
private static XPath xpath = createXPath();
|
|
||||||
|
|
||||||
private static DocumentBuilder createDocBuilder() {
|
|
||||||
try {
|
|
||||||
DocumentBuilderFactory factory = DocumentBuilderFactory
|
|
||||||
.newInstance();
|
|
||||||
factory.setNamespaceAware(true); // never forget this!
|
|
||||||
return factory.newDocumentBuilder();
|
|
||||||
} catch (ParserConfigurationException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static XPath createXPath() {
|
|
||||||
XPath xp = XPathFactory.newInstance().newXPath();
|
|
||||||
xp.setNamespaceContext(new StupidNamespaceContext());
|
|
||||||
return xp;
|
|
||||||
}
|
|
||||||
|
|
||||||
private File webXmlFile;
|
|
||||||
private Document webXmlDoc;
|
|
||||||
private List<String> messages = new ArrayList<String>();
|
|
||||||
|
|
||||||
public WebXmlTest(File file) {
|
|
||||||
this.webXmlFile = file;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void parseWebXml() throws SAXException, IOException {
|
|
||||||
if (webXmlDoc == null) {
|
|
||||||
webXmlDoc = docBuilder.parse(webXmlFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void checkAll() throws IOException {
|
|
||||||
checkDispatcherValues();
|
|
||||||
checkServletClasses();
|
|
||||||
checkListenerClasses();
|
|
||||||
checkFilterClasses();
|
|
||||||
checkTaglibLocations();
|
|
||||||
|
|
||||||
if (!messages.isEmpty()) {
|
|
||||||
for (String message : messages) {
|
|
||||||
System.out.println(message);
|
|
||||||
}
|
|
||||||
fail("Found these problems with '" + webXmlFile.getCanonicalPath()
|
|
||||||
+ "'\n " + StringUtils.join(messages, "\n "));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkDispatcherValues() {
|
|
||||||
List<String> okValues = Arrays.asList(new String[] { "FORWARD",
|
|
||||||
"REQUEST", "INCLUDE", "ERROR" });
|
|
||||||
for (Node n : findNodes("//j2ee:dispatcher")) {
|
|
||||||
String text = n.getTextContent();
|
|
||||||
if (!okValues.contains(text)) {
|
|
||||||
messages.add("<dispatcher>" + text
|
|
||||||
+ "</dispatcher> is not valid. Acceptable values are "
|
|
||||||
+ okValues);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkServletClasses() {
|
|
||||||
for (Node n : findNodes("//j2ee:servlet-class")) {
|
|
||||||
String text = n.getTextContent();
|
|
||||||
String problem = confirmClassNameIsValid(text, HttpServlet.class);
|
|
||||||
if (problem != null) {
|
|
||||||
messages.add("<servlet-class>" + text
|
|
||||||
+ "</servlet-class> is not valid: " + problem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkListenerClasses() {
|
|
||||||
for (Node n : findNodes("//j2ee:listener-class")) {
|
|
||||||
String text = n.getTextContent();
|
|
||||||
String problem = confirmClassNameIsValid(text,
|
|
||||||
ServletContextListener.class);
|
|
||||||
if (problem != null) {
|
|
||||||
messages.add("<listener-class>" + text
|
|
||||||
+ "</listener-class> is not valid: " + problem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkFilterClasses() {
|
|
||||||
for (Node n : findNodes("//j2ee:filter-class")) {
|
|
||||||
String text = n.getTextContent();
|
|
||||||
String problem = confirmClassNameIsValid(text, Filter.class);
|
|
||||||
if (problem != null) {
|
|
||||||
messages.add("<filter-class>" + text
|
|
||||||
+ "</filter-class> is not valid: " + problem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkTaglibLocations() {
|
|
||||||
// TODO Don't know how to do this one. Where do we look for the taglibs?
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// Helper methods
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Search for an Xpath, returning a handy list.
|
|
||||||
*/
|
|
||||||
private List<Node> findNodes(String pattern) {
|
|
||||||
try {
|
|
||||||
XPathExpression xpe = xpath.compile(pattern);
|
|
||||||
NodeList nodes = (NodeList) xpe.evaluate(
|
|
||||||
webXmlDoc.getDocumentElement(), XPathConstants.NODESET);
|
|
||||||
List<Node> list = new ArrayList<Node>();
|
|
||||||
for (int i = 0; i < nodes.getLength(); i++) {
|
|
||||||
list.add(nodes.item(i));
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
} catch (XPathExpressionException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check that the supplied className can be instantiated with a
|
|
||||||
* zero-argument constructor, and assigned to a variable of the target
|
|
||||||
* class.
|
|
||||||
*/
|
|
||||||
private String confirmClassNameIsValid(String className,
|
|
||||||
Class<?> targetClass) {
|
|
||||||
try {
|
|
||||||
Class<?> specifiedClass = Class.forName(className);
|
|
||||||
Object o = specifiedClass.newInstance();
|
|
||||||
if (!targetClass.isInstance(o)) {
|
|
||||||
return specifiedClass.getSimpleName()
|
|
||||||
+ " is not a subclass of "
|
|
||||||
+ targetClass.getSimpleName() + ".";
|
|
||||||
}
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
return "The class does not exist.";
|
|
||||||
} catch (InstantiationException e) {
|
|
||||||
return "The class does not have a public constructor "
|
|
||||||
+ "that takes zero arguments.";
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
return "The class does not have a public constructor "
|
|
||||||
+ "that takes zero arguments.";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dump the first 20 nodes of an XML context, excluding comments and blank
|
|
||||||
* text nodes.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private int dumpXml(Node xmlNode, int... parms) {
|
|
||||||
int remaining = (parms.length == 0) ? 20 : parms[0];
|
|
||||||
int level = (parms.length < 2) ? 1 : parms[1];
|
|
||||||
|
|
||||||
Node n = xmlNode;
|
|
||||||
|
|
||||||
if (Node.COMMENT_NODE == n.getNodeType()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (Node.TEXT_NODE == n.getNodeType()) {
|
|
||||||
if (StringUtils.isBlank(n.getTextContent())) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int used = 1;
|
|
||||||
|
|
||||||
System.out.println(StringUtils.repeat("-->", level) + n);
|
|
||||||
NodeList nl = n.getChildNodes();
|
|
||||||
for (int i = 0; (i < nl.getLength() && remaining > used); i++) {
|
|
||||||
used += dumpXml(nl.item(i), remaining - used, level + 1);
|
|
||||||
}
|
|
||||||
return used;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// Helper classes
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
private static class StupidNamespaceContext implements NamespaceContext {
|
|
||||||
@Override
|
|
||||||
public String getNamespaceURI(String prefix) {
|
|
||||||
if ("j2ee".equals(prefix)) {
|
|
||||||
return "http://java.sun.com/xml/ns/j2ee";
|
|
||||||
} else {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPrefix(String namespaceURI) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterator<?> getPrefixes(String namespaceURI) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -53,8 +53,8 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() {
|
public void setup() {
|
||||||
setLoggerLevel(this.getClass(), Level.DEBUG);
|
// setLoggerLevel(this.getClass(), Level.DEBUG);
|
||||||
setLoggerLevel(LanguageFilteringRDFService.class, Level.DEBUG);
|
// setLoggerLevel(LanguageFilteringRDFService.class, Level.DEBUG);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
|
@ -1186,12 +1186,12 @@
|
||||||
</taglib>
|
</taglib>
|
||||||
|
|
||||||
<taglib>
|
<taglib>
|
||||||
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
|
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
|
||||||
<taglib-location>/WEB-INF/tlds/c.tld</taglib-location>
|
<taglib-location>/WEB-INF/tlds/c.tld</taglib-location>
|
||||||
</taglib>
|
</taglib>
|
||||||
|
|
||||||
<taglib>
|
<taglib>
|
||||||
<taglib-uri>http://java.sun.com/jstl/functions</taglib-uri>
|
<taglib-uri>http://java.sun.com/jsp/jstl/functions</taglib-uri>
|
||||||
<taglib-location>/WEB-INF/tlds/fn.tld</taglib-location>
|
<taglib-location>/WEB-INF/tlds/fn.tld</taglib-location>
|
||||||
</taglib>
|
</taglib>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep"%>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep"%>
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<%@page import="java.util.Properties"%>
|
<%@page import="java.util.Properties"%>
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
<%@ page isErrorPage="true" %>
|
<%@ page isErrorPage="true" %>
|
||||||
<%@ page import="com.oreilly.servlet.ServletUtils,edu.cornell.mannlib.vitro.webapp.web.*" %>
|
<%@ page import="com.oreilly.servlet.ServletUtils,edu.cornell.mannlib.vitro.webapp.web.*" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<%/* this is used by the FedoraDatastreamController and not by the N3 editing system.*/%>
|
<%/* this is used by the FedoraDatastreamController and not by the N3 editing system.*/%>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<div>The file ${orginalFileName} was updated. The file received from you had the MD5 checksum ${checksum}.</div>
|
<div>The file ${orginalFileName} was updated. The file received from you had the MD5 checksum ${checksum}.</div>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<div>${checksum} "${fileName}"</div>
|
<div>${checksum} "${fileName}"</div>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
<%@ taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@ taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
|
|
||||||
<%@ page import="com.hp.hpl.jena.ontology.Individual" %>
|
<%@ page import="com.hp.hpl.jena.ontology.Individual" %>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestUtils.MergeResult"%>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestUtils.MergeResult"%>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
<%@ page import="com.hp.hpl.jena.rdf.model.Model"%>
|
<%@ page import="com.hp.hpl.jena.rdf.model.Model"%>
|
||||||
|
|
||||||
<h2>Individual Not Found</h2>
|
<h2>Individual Not Found</h2>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<%@ page import="java.util.Iterator"%>
|
<%@ page import="java.util.Iterator"%>
|
||||||
<%@ page import="java.net.URLEncoder"%>
|
<%@ page import="java.net.URLEncoder"%>
|
||||||
<%@ page import="java.util.List"%>
|
<%@ page import="java.util.List"%>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<%@ page import="java.util.List"%>
|
<%@ page import="java.util.List"%>
|
||||||
<%@ page import="java.net.URLEncoder"%>
|
<%@ page import="java.net.URLEncoder"%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<%@ page import="com.hp.hpl.jena.rdf.model.ModelMaker" %>
|
<%@ page import="com.hp.hpl.jena.rdf.model.ModelMaker" %>
|
||||||
<%@ page import="java.util.Iterator" %>
|
<%@ page import="java.util.Iterator" %>
|
||||||
<%@ page import="java.net.URLEncoder" %>
|
<%@ page import="java.net.URLEncoder" %>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<%@ page import="org.apache.commons.logging.Log" %>
|
<%@ page import="org.apache.commons.logging.Log" %>
|
||||||
<%@ page import="org.apache.commons.logging.LogFactory" %>
|
<%@ page import="org.apache.commons.logging.LogFactory" %>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><%/* this odd thing points to something in web.xml */ %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%/* this odd thing points to something in web.xml */ %>
|
||||||
<%@ page errorPage="/error.jsp"%>
|
<%@ page errorPage="/error.jsp"%>
|
||||||
<% /***********************************************
|
<% /***********************************************
|
||||||
alphaIndex.jsp will just display the just the index, no entites.
|
alphaIndex.jsp will just display the just the index, no entites.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<%@ page import="java.util.ArrayList" %>
|
<%@ page import="java.util.ArrayList" %>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
|
|
||||||
wtffff
|
wtffff
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
|
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
|
||||||
xmlns:c="http://java.sun.com/jstl/core"
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags"
|
xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags"
|
||||||
version="2.0">
|
version="2.0">
|
||||||
<jsp:directive.page import="edu.cornell.mannlib.vitro.webapp.beans.VClass"/>
|
<jsp:directive.page import="edu.cornell.mannlib.vitro.webapp.beans.VClass"/>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
<%-- colspan set to 4 in DatapropRetryController.java --%>
|
<%-- colspan set to 4 in DatapropRetryController.java --%>
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
<td valign="top" colspan="2">
|
<td valign="top" colspan="2">
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
|
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
|
||||||
xmlns:c ="http://java.sun.com/jstl/core"
|
xmlns:c ="http://java.sun.com/jsp/jstl/core"
|
||||||
xmlns:fn ="http://java.sun.com/jsp/jstl/functions">
|
xmlns:fn ="http://java.sun.com/jsp/jstl/functions">
|
||||||
|
|
||||||
<div class="editingForm">
|
<div class="editingForm">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
<tr class="editformcell" id="entityNameTr">
|
<tr class="editformcell" id="entityNameTr">
|
||||||
<td valign="bottom" id="entityNameTd" colspan="2">
|
<td valign="bottom" id="entityNameTd" colspan="2">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
<tr class="editformcell" id="entityNameTr">
|
<tr class="editformcell" id="entityNameTr">
|
||||||
<td valign="bottom" id="entityNameTd" colspan="1">
|
<td valign="bottom" id="entityNameTd" colspan="1">
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
<% /* For now, not using XML syntax because the output XHTML is not indented */ %>
|
<% /* For now, not using XML syntax because the output XHTML is not indented */ %>
|
||||||
<% /* <?xml version="1.0" encoding="UTF-8"?> */ %>
|
<% /* <?xml version="1.0" encoding="UTF-8"?> */ %>
|
||||||
<% /* <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
|
<% /* <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
|
||||||
xmlns:c="http://java.sun.com/jstl/core"
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags"
|
xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags"
|
||||||
version="2.0"> */ %>
|
version="2.0"> */ %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
<td>
|
<td>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
|
||||||
|
|
||||||
<h2><a href="ingest">Ingest Home</a></h2>
|
<h2><a href="ingest">Ingest Home</a></h2>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
|
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
|
||||||
xmlns:c="http://java.sun.com/jstl/core"
|
xmlns:c="http://java.sun.com/jsp/jstl/core"
|
||||||
xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags"
|
xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags"
|
||||||
version="2.0">
|
version="2.0">
|
||||||
<jsp:directive.page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers"/>
|
<jsp:directive.page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers"/>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
<td valign="bottom" colspan="3">
|
<td valign="bottom" colspan="3">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
<td valign="top" colspan="3">
|
<td valign="top" colspan="3">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
<%-- colspan set to 6 in PropertyRetryController.java --%>
|
<%-- colspan set to 6 in PropertyRetryController.java --%>
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
|
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
|
||||||
xmlns:c ="http://java.sun.com/jstl/core"
|
xmlns:c ="http://java.sun.com/jsp/jstl/core"
|
||||||
xmlns:fn ="http://java.sun.com/jsp/jstl/functions">
|
xmlns:fn ="http://java.sun.com/jsp/jstl/functions">
|
||||||
|
|
||||||
<div class="editingForm">
|
<div class="editingForm">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
|
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
|
||||||
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission" %>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
|
|
||||||
<div class="staticPageBackground">
|
<div class="staticPageBackground">
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jstl/core" xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags" version="2.0">
|
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags" version="2.0">
|
||||||
|
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
<td valign="bottom" colspan="2">
|
<td valign="bottom" colspan="2">
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jstl/core" xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags" version="2.0">
|
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:form="http://vitro.mannlib.cornell.edu/edit/tags" version="2.0">
|
||||||
|
|
||||||
<tr class="editformcell">
|
<tr class="editformcell">
|
||||||
<td valign="bottom" colspan="2">
|
<td valign="bottom" colspan="2">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%><%/* this odd thing points to something in web.xml */ %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%/* this odd thing points to something in web.xml */ %>
|
||||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||||
<%@ page errorPage="/error.jsp"%>
|
<%@ page errorPage="/error.jsp"%>
|
||||||
<% /***********************************************
|
<% /***********************************************
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%><%/* this odd thing points to something in web.xml */ %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%/* this odd thing points to something in web.xml */ %>
|
||||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||||
|
|
||||||
<%-- Show pages to select from --%>
|
<%-- Show pages to select from --%>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><%/* this odd thing points to something in web.xml */ %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%/* this odd thing points to something in web.xml */ %>
|
||||||
<div class="contents">
|
<div class="contents">
|
||||||
|
|
||||||
<h1>Page Not Found</h1>
|
<h1>Page Not Found</h1>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.web.*" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.web.*" %>
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest" %>
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory" %>
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
<%@ page errorPage="/error.jsp"%>
|
<%@ page errorPage="/error.jsp"%>
|
||||||
<%@ page contentType="text/html; charset=UTF-8"%>
|
<%@ page contentType="text/html; charset=UTF-8"%>
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep" %>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep" %>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
<% /***********************************************
|
<% /***********************************************
|
||||||
Display a single Page in the most basic fashion.
|
Display a single Page in the most basic fashion.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
||||||
<%@ page import="javax.servlet.ServletException" %>
|
<%@ page import="javax.servlet.ServletException" %>
|
||||||
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%>
|
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
||||||
|
|
||||||
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
<div id="content" class="staticPageBackground">
|
<div id="content" class="staticPageBackground">
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue