// Path: src/main/java/com/neva/felix/webconsole/plugins/search/core/SearchPaths.java
// public class SearchPaths {
// 
// 	public static final String APP_NAME = "search";
// 
// 	private static final String APP_ROOT_PROP = "felix.webconsole.manager.root";
// 
// 	private static final String APP_ROOT_DEFAULT = "/system/console";
// 
// 	private final BundleContext context;
// 
// 	public SearchPaths(BundleContext context) {
// 		this.context = context;
// 	}
// 
// 	public static SearchPaths from(BundleContext context) {
// 		return new SearchPaths(context);
// 	}
// 
// 	public String appRoot() {
// 		return StringUtils.defaultIfEmpty(context.getProperty(APP_ROOT_PROP), APP_ROOT_DEFAULT);
// 	}
// 
// 	public String appAlias(String alias) {
// 		return appRoot() + "/" + alias;
// 	}
// 
// 	public String pluginRoot() {
// 		return appRoot() + "/" + APP_NAME;
// 	}
// 
// 	public String pluginAlias(String alias) {
// 		return pluginRoot() + "/" + alias;
// 	}
// }
// 
// Path: src/main/java/com/neva/felix/webconsole/plugins/search/utils/TemplateRenderer.java
// public class TemplateRenderer {
// 
//     private static final Logger LOG = LoggerFactory.getLogger(TemplateRenderer.class);
// 
//     protected final Map<String, String> globalVars;
// 
//     public TemplateRenderer() {
//         this(Collections.<String, String>emptyMap());
//     }
// 
//     public TemplateRenderer(Map<String, String> globalVars) {
//         this.globalVars = globalVars;
//     }
// 
//     public static String render(String templateFile) {
//         return render(templateFile, Collections.<String, String>emptyMap());
//     }
// 
//     public static String render(String templateFile, Map<String, String> vars) {
//         return new TemplateRenderer().renderTemplate(templateFile, vars);
//     }
// 
//     public final String renderTemplate(String templateFile) {
//         return renderTemplate(templateFile, Collections.<String, String>emptyMap());
//     }
// 
//     public final String renderTemplate(String templateFile, Map<String, String> vars) {
//         String result = null;
// 
//         InputStream templateStream = getClass().getResourceAsStream("/" + templateFile);
//         if (templateStream == null) {
//             LOG.error(String.format("Template '%s' cannot be found.", templateFile));
//         } else {
//             try {
//                 result = IOUtils.toString(templateStream, "UTF-8");
//             } catch (IOException e) {
//                 LOG.error(String.format("Cannot load template '%s'", templateFile), e);
//             } finally {
//                 IOUtils.closeQuietly(templateStream);
//             }
//         }
// 
//         final Map<String, String> allVars = ImmutableMap.<String, String>builder()
//                 .putAll(globalVars)
//                 .putAll(vars)
//                 .build();
// 
//         return StrSubstitutor.replace(result, allVars);
//     }
// 
// }


import com.neva.felix.webconsole.plugins.search.core.SearchPaths;
import com.neva.felix.webconsole.plugins.search.utils.TemplateRenderer;
import org.osgi.framework.BundleContext;
import javax.servlet.http.HttpServlet;
import java.util.Dictionary;
import java.util.Hashtable;
package com.neva.felix.webconsole.plugins.search.rest;



public abstract class RestServlet extends HttpServlet {

	protected final BundleContext bundleContext;

// Path: src/main/java/com/neva/felix/webconsole/plugins/search/core/SearchPaths.java
// public class SearchPaths {
// 
// 	public static final String APP_NAME = "search";
// 
// 	private static final String APP_ROOT_PROP = "felix.webconsole.manager.root";
// 
// 	private static final String APP_ROOT_DEFAULT = "/system/console";
// 
// 	private final BundleContext context;
// 
// 	public SearchPaths(BundleContext context) {
// 		this.context = context;
// 	}
// 
// 	public static SearchPaths from(BundleContext context) {
// 		return new SearchPaths(context);
// 	}
// 
// 	public String appRoot() {
// 		return StringUtils.defaultIfEmpty(context.getProperty(APP_ROOT_PROP), APP_ROOT_DEFAULT);
// 	}
// 
// 	public String appAlias(String alias) {
// 		return appRoot() + "/" + alias;
// 	}
// 
// 	public String pluginRoot() {
// 		return appRoot() + "/" + APP_NAME;
// 	}
// 
// 	public String pluginAlias(String alias) {
// 		return pluginRoot() + "/" + alias;
// 	}
// }
// 
// Path: src/main/java/com/neva/felix/webconsole/plugins/search/utils/TemplateRenderer.java
// public class TemplateRenderer {
// 
//     private static final Logger LOG = LoggerFactory.getLogger(TemplateRenderer.class);
// 
//     protected final Map<String, String> globalVars;
// 
//     public TemplateRenderer() {
//         this(Collections.<String, String>emptyMap());
//     }
// 
//     public TemplateRenderer(Map<String, String> globalVars) {
//         this.globalVars = globalVars;
//     }
// 
//     public static String render(String templateFile) {
//         return render(templateFile, Collections.<String, String>emptyMap());
//     }
// 
//     public static String render(String templateFile, Map<String, String> vars) {
//         return new TemplateRenderer().renderTemplate(templateFile, vars);
//     }
// 
//     public final String renderTemplate(String templateFile) {
//         return renderTemplate(templateFile, Collections.<String, String>emptyMap());
//     }
// 
//     public final String renderTemplate(String templateFile, Map<String, String> vars) {
//         String result = null;
// 
//         InputStream templateStream = getClass().getResourceAsStream("/" + templateFile);
//         if (templateStream == null) {
//             LOG.error(String.format("Template '%s' cannot be found.", templateFile));
//         } else {
//             try {
//                 result = IOUtils.toString(templateStream, "UTF-8");
//             } catch (IOException e) {
//                 LOG.error(String.format("Cannot load template '%s'", templateFile), e);
//             } finally {
//                 IOUtils.closeQuietly(templateStream);
//             }
//         }
// 
//         final Map<String, String> allVars = ImmutableMap.<String, String>builder()
//                 .putAll(globalVars)
//                 .putAll(vars)
//                 .build();
// 
//         return StrSubstitutor.replace(result, allVars);
//     }
// 
// }


// Path: src/main/java/com/neva/felix/webconsole/plugins/search/rest/RestServlet.java
import com.neva.felix.webconsole.plugins.search.core.SearchPaths;
import com.neva.felix.webconsole.plugins.search.utils.TemplateRenderer;
import org.osgi.framework.BundleContext;
import javax.servlet.http.HttpServlet;
import java.util.Dictionary;
import java.util.Hashtable;

package com.neva.felix.webconsole.plugins.search.rest;



public abstract class RestServlet extends HttpServlet {

	protected final BundleContext bundleContext;

	protected final TemplateRenderer templateRenderer;