diff --git a/solr/core/src/java/org/apache/solr/servlet/LogLevelSelection.java b/solr/core/src/java/org/apache/solr/servlet/LogLevelSelection.java
deleted file mode 100644
index 5a93d539a68..00000000000
--- a/solr/core/src/java/org/apache/solr/servlet/LogLevelSelection.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.solr.servlet;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.solr.handler.admin.LogLevelHandler;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.LogManager;
-import java.util.logging.Logger;
-
-
-/**
- * Admin JDK Logger level report and selection servlet.
- *
- * @since solr 1.3
- * @deprecated {@link LogLevelHandler} this servlet will be removed before solr 4.0
- */
-public final class LogLevelSelection extends HttpServlet {
- @Override
- public void init() throws ServletException {
- }
-
- /**
- * Processes an HTTP GET request and changes the logging level as
- * specified.
- */
- @Override
- public void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException {
- // Output page
-
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
- out.write("
This will be removed before Solr 4.0. See logging");
-
- out.write("
Below is the complete JDK Log hierarchy with " +
- "intermediate logger/categories synthesized. " +
- "The effective logging level is shown to the " +
- "far right. If a logger has unset level, then " +
- "the effective level is that of the nearest ancestor " +
- "with a level setting. Note that this only shows " +
- "JDK Log levels.
\n");
-
- out.write("\n");
-
- out.write("\n");
- }
-
-
- @Override
- public void doPost(HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException {
- if (request.getParameter("submit").equals("set")) {
-
- Map paramMap = request.getParameterMap();
-
- Iterator iParams = paramMap.entrySet().iterator();
- while (iParams.hasNext()) {
- Map.Entry p = (Map.Entry) iParams.next();
- String name = (String) p.getKey();
- String value = ((String[]) p.getValue())[0];
-
- if (name.equals("submit")) continue;
- Logger logger;
- LogManager logManager = LogManager.getLogManager();
- if ("root".equals(name)) {
- logger = logManager.getLogger("");
- } else logger = logManager.getLogger(name);
-
- if ("unset".equals(value)) {
- if ((logger != null) && (logger.getLevel() != null)) {
- logger.setLevel(null);
- log.info("Unset log level on '" + name + "'.");
- }
- } else {
- Level level = Level.parse(value);
- if (logger == null) logger = Logger.getLogger(name);
- if (logger.getLevel() != level) {
- logger.setLevel(level);
- log.info("Set '" + name + "' to " +
- level + " level.");
- }
- }
- }
- } else {
- log.fine("Selection form cancelled");
- }
-
- // Redirect back to standard get page.
- response.sendRedirect(request.getRequestURI());
- }
-
-
- private Collection buildWrappers() {
- // Use tree to get sorted results
- SortedSet roots = new TreeSet();
-
- roots.add(LogWrapper.ROOT);
-
- LogManager logManager = LogManager.getLogManager();
-
- Enumeration loggerNames = logManager.getLoggerNames();
- while (loggerNames.hasMoreElements()) {
- String name = loggerNames.nextElement();
- Logger logger = Logger.getLogger(name);
- LogWrapper wrapper = new LogWrapper(logger);
- roots.remove(wrapper); // Make sure add occurs
- roots.add(wrapper);
-
- while (true) {
- int dot = name.lastIndexOf(".");
- if (dot < 0) break;
- name = name.substring(0, dot);
- roots.add(new LogWrapper(name)); // if not already
- }
- }
-
- return roots;
- }
-
- private Level getEffectiveLevel(Logger logger) {
- Level level = logger.getLevel();
- if (level != null) {
- return level;
- }
- for (Level l : LEVELS) {
- if (l == null) {
- // avoid NPE
- continue;
- }
- if (logger.isLoggable(l)) {
- // return first level loggable
- return l;
- }
- }
- return Level.OFF;
- }
-
- private static class LogWrapper
- implements Comparable {
- public static LogWrapper ROOT =
- new LogWrapper(LogManager.getLogManager().getLogger(""));
-
- public LogWrapper(Logger logger) {
- this.logger = logger;
- this.name = logger.getName();
- }
-
- public LogWrapper(String name) {
- this.name = name;
- }
-
-
- public int compareTo(Object other) {
- if (this.equals(other)) return 0;
- if (this == ROOT) return -1;
- if (other == ROOT) return 1;
-
- return name.compareTo(((LogWrapper) other).name);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- LogWrapper other = (LogWrapper) obj;
- if (name == null) {
- if (other.name != null)
- return false;
- } else if (!name.equals(other.name))
- return false;
- return true;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- public Level level() {
- if (logger != null) return logger.getLevel();
- return null;
- }
-
- public Logger logger = null;
- public String name;
- }
-
- private static Level[] LEVELS = {
- null, // aka unset
- Level.FINEST,
- Level.FINE,
- Level.CONFIG,
- Level.INFO,
- Level.WARNING,
- Level.SEVERE,
- Level.OFF
- // Level.ALL -- ignore. It is useless.
- };
-
- private Logger log = Logger.getLogger(getClass().getName());
-}
diff --git a/solr/core/src/java/org/apache/solr/servlet/RedirectServlet.java b/solr/core/src/java/org/apache/solr/servlet/RedirectServlet.java
new file mode 100644
index 00000000000..abbfa85de21
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/servlet/RedirectServlet.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.servlet;
+
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * A Simple redirection servlet to help us deprecate old UI elements
+ */
+public class RedirectServlet extends HttpServlet{
+
+ static final String CONTEXT_KEY = "${context}";
+
+ String destination;
+ int code = HttpServletResponse.SC_MOVED_PERMANENTLY;
+
+ public void init(ServletConfig config) throws ServletException {
+ super.init(config);
+
+ destination = config.getInitParameter("destination");
+ if(destination==null) {
+ throw new ServletException("RedirectServlet missing destination configuration");
+ }
+ if( "false".equals(config.getInitParameter("permanent") )) {
+ code = HttpServletResponse.SC_MOVED_TEMPORARILY;
+ }
+
+ // Replace the context key
+ if(destination.startsWith(CONTEXT_KEY)) {
+ destination = config.getServletContext().getContextPath()
+ +destination.substring(CONTEXT_KEY.length());
+ }
+ }
+
+ public void doGet(HttpServletRequest req, HttpServletResponse res)
+ throws ServletException,IOException {
+
+ res.setStatus(code);
+ res.setHeader("Location", destination);
+ }
+
+ public void doPost(HttpServletRequest req, HttpServletResponse res)
+ throws ServletException,IOException {
+ doGet(req,res);
+ }
+}
\ No newline at end of file
diff --git a/solr/webapp/web/WEB-INF/web.xml b/solr/webapp/web/WEB-INF/web.xml
index 76ca640e0d7..fe96fd769dc 100644
--- a/solr/webapp/web/WEB-INF/web.xml
+++ b/solr/webapp/web/WEB-INF/web.xml
@@ -83,11 +83,6 @@
/*
-
- Logging
- org.apache.solr.servlet.LogLevelSelection
-
-
Zookeeperorg.apache.solr.servlet.ZookeeperInfoServlet
@@ -97,13 +92,54 @@
LoadAdminUIorg.apache.solr.servlet.LoadAdminUiServlet
-
-
+
+
+
+
+ RedirectOldAdminUI
+ org.apache.solr.servlet.RedirectServlet
+
+ destination
+ ${context}/#/
+
+
+
+
+ RedirectOldZookeeper
+ org.apache.solr.servlet.RedirectServlet
+
+ destination
+ ${context}/zookeeper
+
+
+
+
+ RedirectLogging
+ org.apache.solr.servlet.RedirectServlet
+
+ destination
+ ${context}/#/~logging
+
+
+
- Logging
+ RedirectOldAdminUI
+ /admin/
+
+
+ RedirectOldAdminUI
+ /admin
+
+
+ RedirectOldZookeeper
+ /zookeeper.jsp
+
+
+ RedirectLogging/logging
-
+
+
Zookeeper/zookeeper
@@ -113,7 +149,7 @@
LoadAdminUI/admin.html
-
+
.xsl