// Path: src/main/java/com/neva/felix/webconsole/plugins/search/core/BundleClass.java
// public class BundleClass {
// 
//     private Bundle bundle;
// 
//     private String className;
// 
//     public BundleClass(Bundle bundle, String className) {
//         this.bundle = bundle;
//         this.className = className;
//     }
// 
//     public Bundle getBundle() {
//         return bundle;
//     }
// 
//     public String getClassName() {
//         return className;
//     }
// 
//     public String getClassPath() {
//         return StringUtils.replace(className, ".", "/");
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         BundleClass that = (BundleClass) o;
// 
//         return new EqualsBuilder()
//                 .append(bundle, that.bundle)
//                 .append(className, that.className)
//                 .isEquals();
//     }
// 
//     @Override
//     public int hashCode() {
//         return new HashCodeBuilder()
//                 .append(bundle)
//                 .append(className)
//                 .toHashCode();
//     }
// }
// 
// Path: src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassDecompileServlet.java
// public class ClassDecompileServlet extends RestServlet {
// 
// 	public static final String ALIAS_NAME = "class-decompile";
// 
// 	public static final String BUNDLE_ID = "bundleId";
// 
// 	public static final String CLASS_NAME = "className";
// 
// 	private final OsgiExplorer osgiExplorer;
// 
// 	public ClassDecompileServlet(BundleContext bundleContext) {
// 		super(bundleContext);
// 		this.osgiExplorer = new OsgiExplorer(bundleContext);
// 	}
// 
// 	public static String url(BundleContext context, Bundle bundle, String className) {
// 		return url(context, bundle.getBundleId(), className);
// 	}
// 
// 	public static String url(BundleContext context, long bundleId, String className) {
// 		return String.format("%s?%s=%d&%s=%s", SearchPaths.from(context).pluginAlias(ALIAS_NAME), BUNDLE_ID, bundleId, CLASS_NAME, className);
// 	}
// 
// 	@Override
// 	protected String getAliasName() {
// 		return ALIAS_NAME;
// 	}
// 
// 	@Override
// 	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 		final String bundleId = StringUtils.trimToEmpty(request.getParameter(BUNDLE_ID));
// 		final String className = StringUtils.trimToEmpty(request.getParameter(CLASS_NAME));
// 
// 		final Bundle bundle = bundleContext.getBundle(Long.valueOf(bundleId));
// 		if (bundle == null) {
// 			JsonUtils.writeMessage(response, MessageType.ERROR, String.format("Bundle '%s' not be found.", bundleId));
// 			return;
// 		}
// 
// 		final File bundleJar = osgiExplorer.findJar(Long.valueOf(bundleId));
// 		if (bundleJar == null) {
// 			JsonUtils.writeMessage(response, MessageType.ERROR, String.format("Bundle '%s' JAR cannot be found.", bundleId));
// 			return;
// 		}
// 
// 		final String classSource = osgiExplorer.decompileClass(bundleJar, className);
// 
// 		JsonUtils.writeMessage(response, MessageType.SUCCESS, "Class details",
// 				ImmutableMap.of(
// 						"className", className,
// 						"classSource", classSource,
// 						"bundleId", bundleId,
// 						"bundleSymbolicName", bundle.getSymbolicName(),
// 						"bundleJarPath", bundleJar.getAbsolutePath()
// 				));
// 	}
// 
// }


import com.neva.felix.webconsole.plugins.search.core.BundleClass;
import com.neva.felix.webconsole.plugins.search.rest.ClassDecompileServlet;
import org.osgi.framework.BundleContext;
import java.io.Serializable;
import java.util.List;
package com.neva.felix.webconsole.plugins.search.core.classsearch;



public class ClassSearchResult implements Serializable {

	private final long bundleId;

	private final String className;

	private final List<String> contexts;

	private final String decompileUrl;

// Path: src/main/java/com/neva/felix/webconsole/plugins/search/core/BundleClass.java
// public class BundleClass {
// 
//     private Bundle bundle;
// 
//     private String className;
// 
//     public BundleClass(Bundle bundle, String className) {
//         this.bundle = bundle;
//         this.className = className;
//     }
// 
//     public Bundle getBundle() {
//         return bundle;
//     }
// 
//     public String getClassName() {
//         return className;
//     }
// 
//     public String getClassPath() {
//         return StringUtils.replace(className, ".", "/");
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         BundleClass that = (BundleClass) o;
// 
//         return new EqualsBuilder()
//                 .append(bundle, that.bundle)
//                 .append(className, that.className)
//                 .isEquals();
//     }
// 
//     @Override
//     public int hashCode() {
//         return new HashCodeBuilder()
//                 .append(bundle)
//                 .append(className)
//                 .toHashCode();
//     }
// }
// 
// Path: src/main/java/com/neva/felix/webconsole/plugins/search/rest/ClassDecompileServlet.java
// public class ClassDecompileServlet extends RestServlet {
// 
// 	public static final String ALIAS_NAME = "class-decompile";
// 
// 	public static final String BUNDLE_ID = "bundleId";
// 
// 	public static final String CLASS_NAME = "className";
// 
// 	private final OsgiExplorer osgiExplorer;
// 
// 	public ClassDecompileServlet(BundleContext bundleContext) {
// 		super(bundleContext);
// 		this.osgiExplorer = new OsgiExplorer(bundleContext);
// 	}
// 
// 	public static String url(BundleContext context, Bundle bundle, String className) {
// 		return url(context, bundle.getBundleId(), className);
// 	}
// 
// 	public static String url(BundleContext context, long bundleId, String className) {
// 		return String.format("%s?%s=%d&%s=%s", SearchPaths.from(context).pluginAlias(ALIAS_NAME), BUNDLE_ID, bundleId, CLASS_NAME, className);
// 	}
// 
// 	@Override
// 	protected String getAliasName() {
// 		return ALIAS_NAME;
// 	}
// 
// 	@Override
// 	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 		final String bundleId = StringUtils.trimToEmpty(request.getParameter(BUNDLE_ID));
// 		final String className = StringUtils.trimToEmpty(request.getParameter(CLASS_NAME));
// 
// 		final Bundle bundle = bundleContext.getBundle(Long.valueOf(bundleId));
// 		if (bundle == null) {
// 			JsonUtils.writeMessage(response, MessageType.ERROR, String.format("Bundle '%s' not be found.", bundleId));
// 			return;
// 		}
// 
// 		final File bundleJar = osgiExplorer.findJar(Long.valueOf(bundleId));
// 		if (bundleJar == null) {
// 			JsonUtils.writeMessage(response, MessageType.ERROR, String.format("Bundle '%s' JAR cannot be found.", bundleId));
// 			return;
// 		}
// 
// 		final String classSource = osgiExplorer.decompileClass(bundleJar, className);
// 
// 		JsonUtils.writeMessage(response, MessageType.SUCCESS, "Class details",
// 				ImmutableMap.of(
// 						"className", className,
// 						"classSource", classSource,
// 						"bundleId", bundleId,
// 						"bundleSymbolicName", bundle.getSymbolicName(),
// 						"bundleJarPath", bundleJar.getAbsolutePath()
// 				));
// 	}
// 
// }


// Path: src/main/java/com/neva/felix/webconsole/plugins/search/core/classsearch/ClassSearchResult.java
import com.neva.felix.webconsole.plugins.search.core.BundleClass;
import com.neva.felix.webconsole.plugins.search.rest.ClassDecompileServlet;
import org.osgi.framework.BundleContext;
import java.io.Serializable;
import java.util.List;

package com.neva.felix.webconsole.plugins.search.core.classsearch;



public class ClassSearchResult implements Serializable {

	private final long bundleId;

	private final String className;

	private final List<String> contexts;

	private final String decompileUrl;

	public ClassSearchResult(BundleContext context, BundleClass clazz, List<String> contexts) {