Alex: fix the search broken under HTTPS situation
diff --git a/org.eclipse.epf.web.search/epf-web-search.jardesc b/org.eclipse.epf.web.search/epf-web-search.jardesc
index f8f2994..c50302a 100644
--- a/org.eclipse.epf.web.search/epf-web-search.jardesc
+++ b/org.eclipse.epf.web.search/epf-web-search.jardesc
@@ -1,16 +1,15 @@
-<?xml version="1.0" encoding="WINDOWS-1252"?>
-<jardesc>
-<jar path="C:/ec/epf1/org.eclipse.epf.publishing/docroot/WEB-INF/lib/epf-web-search.jar"/>
-<options buildIfNeeded="true" compress="true" descriptionLocation="/org.eclipse.epf.web.search/epf-web-search.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
-<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
-<selectedProjects/>
-<manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
-<sealing sealJar="false">
-<packagesToSeal/>
-<packagesToUnSeal/>
-</sealing>
-</manifest>
-<selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
-<javaElement handleIdentifier="=org.eclipse.epf.web.search/src"/>
-</selectedElements>
-</jardesc>
+<?xml version="1.0" encoding="WINDOWS-1252"?><jardesc>
+    <jar path="C:/download/jar/epf-web-search.jar"/>
+    <options buildIfNeeded="true" compress="true" descriptionLocation="/org.eclipse.epf.web.search/epf-web-search.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
+    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+    <selectedProjects/>
+    <manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
+        <sealing sealJar="false">
+            <packagesToSeal/>
+            <packagesToUnSeal/>
+        </sealing>
+    </manifest>
+    <selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
+        <javaElement handleIdentifier="=org.eclipse.epf.web.search/src"/>
+    </selectedElements>
+</jardesc>
\ No newline at end of file
diff --git a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
index 05af15b..4c6f26a 100644
--- a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
+++ b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexLoader.java
@@ -14,12 +14,22 @@
 import java.io.FileWriter;
 import java.io.InputStreamReader;
 import java.net.URL;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
 import org.eclipse.epf.web.search.utils.UNCUtil;
 
 
@@ -292,12 +302,23 @@
 			URL url = new URL(documentBase + "/search/index/version.txt"); //$NON-NLS-1$
 			// handle UNC
 			url = UNCUtil.handleURLForUNC(url);
-
-			BufferedInputStream inputS = new BufferedInputStream(url
-					.openStream());
-			InputStreamReader iStreamReader = new InputStreamReader(inputS);
-			BufferedReader read = new BufferedReader(iStreamReader);
-			String version = read.readLine();
+			
+	        BufferedReader in = null;	        
+	        if (documentBase.startsWith("http:")) { //$NON-NLS-1$
+	        	in = new BufferedReader(new InputStreamReader(url.openStream()));
+	        } else if (documentBase.startsWith("https:")) { //$NON-NLS-1$
+	        	TrustManager[] tm = {new EPFX509TrustManager()};
+	        	SSLContext sslContext = SSLContext.getInstance("SSL"); //$NON-NLS-1$
+	        	sslContext.init(null, tm, null);	        	
+	        	SSLSocketFactory sslFactory = sslContext.getSocketFactory();
+	        	
+	        	HttpsURLConnection.setDefaultSSLSocketFactory(sslFactory);
+	        	HttpsURLConnection.setDefaultHostnameVerifier(new EPFHostnameVerifier());
+	        		        	
+	        	in = new BufferedReader(new InputStreamReader(url.openStream())); 
+	        }
+						
+			String version = in.readLine();
 			int idx = (version != null) ? version.indexOf(VERSION_DELIMITER)
 					: -1;
 			if (idx > -1) {
@@ -307,13 +328,13 @@
 				throw new FileNotFoundException();
 			}
 			
-			String analyzer = read.readLine();
+			String analyzer = in.readLine();
 			if (analyzer != null) {
 				analyzer = analyzer.trim();
 			}
 			setAnalyzerName(analyzer);
 			
-			read.close();
+			in.close();
 		
 			if (siteFolderName == null) {
 				throw new FileNotFoundException();
@@ -347,4 +368,28 @@
 	private synchronized static void setAnalyzerName(String analyzerName) {
 		IndexLoader.analyzerName = analyzerName;
 	}
-}
\ No newline at end of file
+}
+
+class EPFX509TrustManager implements X509TrustManager {
+	private X509Certificate[] serverCertificate;
+	
+	public void checkClientTrusted(X509Certificate[] arg0, String arg1)
+			throws CertificateException {	
+		//
+	}
+
+	public void checkServerTrusted(X509Certificate[] arg0, String arg1)
+			throws CertificateException {		
+		serverCertificate = arg0;
+	}
+
+	public X509Certificate[] getAcceptedIssuers() {
+		return serverCertificate;
+	}	
+}
+
+class EPFHostnameVerifier implements HostnameVerifier {
+	public boolean verify(String arg0, SSLSession arg1) {
+		return true;
+	}	
+}
diff --git a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
index daebf4f..d25f5c9 100644
--- a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
+++ b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/IndexSearch.java
@@ -14,6 +14,7 @@
 import org.eclipse.epf.web.search.analysis.CJKAnalyzer;
 import org.eclipse.epf.web.search.analysis.ChineseAnalyzer;
 import org.eclipse.epf.web.search.analysis.TextAnalyzer;
+import org.eclipse.epf.web.search.utils.DebugUtil;
 
 import com.ibm.icu.text.DecimalFormat;
 
@@ -75,7 +76,9 @@
 				if (analyzer == null) { 	
 					analyzer = new TextAnalyzer();				
 				}				
-				System.out.println("LD> analyzer: " + analyzer);
+				if (DebugUtil.DEBUG) {
+					System.out.println("LD> analyzer: " + analyzer);
+				}
 				q = QueryParser.parse(queryString, searchField,
 						analyzer);
 				if ( q != null ) {
diff --git a/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/utils/DebugUtil.java b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/utils/DebugUtil.java
new file mode 100644
index 0000000..0053b08
--- /dev/null
+++ b/org.eclipse.epf.web.search/src/org/eclipse/epf/web/search/utils/DebugUtil.java
@@ -0,0 +1,9 @@
+//------------------------------------------------------------------------------
+//Copyright (c) 2004, 2011 IBM Corporation.  All Rights Reserved.
+//------------------------------------------------------------------------------
+
+package org.eclipse.epf.web.search.utils;
+
+public interface DebugUtil {
+	public static final boolean DEBUG = false;
+}
diff --git a/org.eclipse.epf.web/epf-web.jardesc b/org.eclipse.epf.web/epf-web.jardesc
index ea0f7f8..69babf0 100644
--- a/org.eclipse.epf.web/epf-web.jardesc
+++ b/org.eclipse.epf.web/epf-web.jardesc
@@ -1,16 +1,15 @@
-<?xml version="1.0" encoding="WINDOWS-1252"?>
-<jardesc>
-<jar path="C:/ec/epf1/org.eclipse.epf.publishing/docroot/WEB-INF/lib/epf-web.jar"/>
-<options buildIfNeeded="true" compress="true" descriptionLocation="/org.eclipse.epf.web/epf-web.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="true" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
-<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
-<selectedProjects/>
-<manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
-<sealing sealJar="false">
-<packagesToSeal/>
-<packagesToUnSeal/>
-</sealing>
-</manifest>
-<selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
-<javaElement handleIdentifier="=org.eclipse.epf.web/src"/>
-</selectedElements>
-</jardesc>
+<?xml version="1.0" encoding="WINDOWS-1252"?><jardesc>
+    <jar path="C:/download/jar/epf-web.jar"/>
+    <options buildIfNeeded="true" compress="true" descriptionLocation="/org.eclipse.epf.web/epf-web.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
+    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+    <selectedProjects/>
+    <manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
+        <sealing sealJar="false">
+            <packagesToSeal/>
+            <packagesToUnSeal/>
+        </sealing>
+    </manifest>
+    <selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
+        <javaElement handleIdentifier="=org.eclipse.epf.web/src"/>
+    </selectedElements>
+</jardesc>
\ No newline at end of file
diff --git a/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java b/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
index 203dbe9..c0d52f0 100644
--- a/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
+++ b/org.eclipse.epf.web/src/org/eclipse/epf/web/servlet/SearchServlet.java
@@ -23,6 +23,7 @@
 import org.eclipse.epf.web.search.IndexLoader;
 import org.eclipse.epf.web.search.IndexSearch;
 import org.eclipse.epf.web.search.SearchResources;
+import org.eclipse.epf.web.search.utils.DebugUtil;
 import org.eclipse.epf.web.search.utils.StrUtil;
 import org.eclipse.epf.web.search.utils.UNCUtil;
 import org.eclipse.epf.web.search.utils.XMLUtil;
@@ -111,7 +112,11 @@
 				} else {
 					
 					String searchString = request.getParameter("searchString");
-					System.out.println("LD> searchString: " + searchString);
+					if (DebugUtil.DEBUG) {
+						System.out.println("LD> searchString: " + searchString);
+						System.out.println("LD> documentBasePath: " + _pathDocumentBase);
+						System.out.println("LD> siteFolderName: " + _siteFolderName);
+					}
 					
 					if (searchString == null || searchString.length() == 0) {
 						response.sendError(HttpServletResponse.SC_NO_CONTENT);
@@ -188,18 +193,26 @@
 		boolean result = false;
 		//_currentSearchString = "\u57FA\u672C\u539F\u5247";
 		try {
-			System.out.println("LD> _indexPath: " + _indexPath);//$NON-NLS-1$
-			System.out.println("LD> _currentSearchString: " + _currentSearchString);//$NON-NLS-1$
+			if (DebugUtil.DEBUG) {
+				System.out.println("LD> _indexPath: " + _indexPath);//$NON-NLS-1$
+				System.out.println("LD> _currentSearchString: " + _currentSearchString);//$NON-NLS-1$
+			}
 			if (_currentSearchString != null) {
-				System.out.println("LD> unicodes: " + 
-					escapeUnicodeString(_currentSearchString, false));//$NON-NLS-1$
+				if (DebugUtil.DEBUG) {
+					System.out.println("LD> unicodes: " + 
+						escapeUnicodeString(_currentSearchString, false));//$NON-NLS-1$
+				}
 			}
 			
-			System.out.println("LD> analyzerName: " + analyzerName);//$NON-NLS-1$
+			if (DebugUtil.DEBUG) {
+				System.out.println("LD> analyzerName: " + analyzerName);//$NON-NLS-1$
+			}
 			
 			_hits = IndexSearch.search(_indexPath, _currentSearchString, searchField, analyzerName);// new
-			System.out.println("LD> _hits: " + 
-					(_hits == null ? "null" : Integer.toString(_hits.length())));//$NON-NLS-1$ //$NON-NLS-2$
+			if (DebugUtil.DEBUG) {
+				System.out.println("LD> _hits: " + 
+						(_hits == null ? "null" : Integer.toString(_hits.length())));//$NON-NLS-1$ //$NON-NLS-2$
+			}
 			
 			// SortedHits(hits);