blob: 88b64b6ba22ba9d807f87890f74a59b1e9a26e03 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.publishing.services.index;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Hashtable;
import org.eclipse.epf.common.utils.FileUtil;
import com.ibm.icu.util.StringTokenizer;
class MiscStatic
{
static Hashtable twoValueFile=null;
static String topDir=null;
static int topDirL=0;
static boolean speccharfound=false;
static boolean tmpspeccharfound=false;
static long diff;
//Reads a file where each row contains two values separated with \t sign
// The syntax of each line can be eighter
// value value
// or
// "value" "value"
//
// The syntax must be the same for each row in the file.
static boolean readTwoValueFile(String file, String characterSet)
{
IO.printDebug("readTwoValueFile " ); //$NON-NLS-1$
if(file==null)
{
System.err.println("MiscStatic:readTwoValueFile" + HelpMessages.INPUT_PARAMETER_NULL); //$NON-NLS-1$
return false;
}
IO.printDebug("before loadfile " + file); //$NON-NLS-1$
String infile = loadFile(file,characterSet);
IO.printDebug("after loadfile"); //$NON-NLS-1$
if(!infile.equals(Def.None))
{
if(infile.charAt(0)=='"')
{
StringTokenizer parser = new StringTokenizer(
infile, "\n"); //$NON-NLS-1$
twoValueFile = new Hashtable();
while(parser.hasMoreTokens())
{
String line = parser.nextToken();
int firstFnutt = getIndex(line,"\"",0); //$NON-NLS-1$
int secondFnutt = getIndex(line,"\"", firstFnutt+1); //$NON-NLS-1$
int thirdFnutt = getIndex(line,"\"", secondFnutt+1); //$NON-NLS-1$
int forthFnutt = getIndex(line,"\"", thirdFnutt+1); //$NON-NLS-1$
if(firstFnutt==-1 || secondFnutt==-1 ||
thirdFnutt==-1 || forthFnutt==-1)
{
return false;
}
String def = line.substring(firstFnutt+1, secondFnutt);
String text = line.substring(thirdFnutt+1, forthFnutt);
twoValueFile.put(def,text);
}
}
else
{
StringTokenizer parser = new StringTokenizer(
infile, "\t\n"); //$NON-NLS-1$
twoValueFile = new Hashtable();
while(parser.hasMoreTokens())
{
twoValueFile.put(parser.nextToken().trim(),parser.nextToken().trim());
}
}
return true;
}
return false;
}
//---------------------------------------------------------------------------------------------------
//Returns the text within the title tags in the input string
static String getTitle(String realString)
{
if(realString==null)
{
System.err.println("MiscStatic:getTitle" + HelpMessages.INPUT_PARAMETER_NULL); //$NON-NLS-1$
return null;
}
String upperString = realString.toUpperCase();
int titleStart = getIndex(upperString, "TITLE",0); //$NON-NLS-1$
if(titleStart!=-1)
{
int titleStartEndT = getIndex(upperString, ">",titleStart); //$NON-NLS-1$
if(titleStartEndT!=-1)
{
int titleEnd = getIndex(upperString, "</TITLE",titleStartEndT+1); //$NON-NLS-1$
if(titleEnd!=-1)
{
String title = realString.substring(titleStartEndT+1,titleEnd).trim();
return title;
}
}
}
return null;
}
//--------------------------------------------------------------------------------------------------
//Return the index within the input string where the first occurance of the sting match
// starts. Searches from the index defined by the parameter start
static int getIndex(String str, String match, int start)
{
if(str==null)
{
System.err.println("MiscStatic:getIndex\n" + HelpMessages.INPUT_PARAMETER_NULL); //$NON-NLS-1$
return -1;
}
if(match==null)
{
System.err.println("MiscStatic:getIndex\n" + HelpMessages.INPUT_PARAMETER_NULL); //$NON-NLS-1$
return -1;
}
int found = str.indexOf(match.toUpperCase(), start);
if(found==-1)
{
found = str.indexOf(match.toLowerCase(), start);
}
if(found==-1)
{
found = str.indexOf(match, start);
}
return found;
}
//--------------------------------------------------------------------------------------------------
// Prints the a string to a DataOutputStream
static boolean print(OutputStreamWriter outP, String str)
{
if(outP==null)
{
System.err.println("MiscStatic:print\n" + HelpMessages.BAD_OUTPUT_STREAM); //$NON-NLS-1$
return false;
}
if(str==null)
{
System.err.println("MiscStatic:print\n" + HelpMessages.INPUT_PARAMETER_NULL); //$NON-NLS-1$
return false;
}
try
{
outP.write(str,0,str.length());
return true;
}
catch(Exception e)
{
System.err.println("MiscStatic:print" + HelpMessages.WRITE_EXCEPTION + //$NON-NLS-1$
e.toString());
}
return false;
}
// Prints the a string to a DataOutputStream in UTF format
static boolean printUTF(DataOutputStream outP, String str)
{
if(outP==null)
{
System.err.println("MiscStatic:printUTF\n" + HelpMessages.BAD_OUTPUT_STREAM); //$NON-NLS-1$
return false;
}
if(str==null)
{
System.err.println("MiscStatic:printUTF\n" + HelpMessages.INPUT_PARAMETER_NULL); //$NON-NLS-1$
return false;
}
try
{
outP.writeUTF(str);
return true;
}
catch(Exception e)
{
System.err.println("MiscStatic:printUTF" + HelpMessages.WRITE_EXCEPTION + //$NON-NLS-1$
e.toString());
return false;
}
}
static void printSpace(OutputStreamWriter outP, int noOfSpace)
{
for(int i=0;i<noOfSpace;i++)
{
try
{
outP.write("&nbsp;",0,6); //$NON-NLS-1$
}
catch(Exception e)
{
System.err.println("MiscStatic:printSpace" + HelpMessages.WRITE_EXCEPTION + //$NON-NLS-1$
e.toString());
}
}
}
//---------------------------------------------------------------------------------------------------
// Read a file and return it as a concatenated string.
static String loadFile(String fileName,String characterset)
{
try
{
return FileUtil.readFile(new File(fileName), characterset).toString();
}
catch (Exception ex)
{
;
}
return "";
}
// Converts all letters like \ufffd,\ufffd,\ufffd to special codes
static void specChar(String in, String out, String characterset)
{
if(in==null)
{
System.err.println("MiscStatic:specChar\n" + HelpMessages.INPUT_PARAMETER_NULL); //$NON-NLS-1$
return;
}
if(out==null)
{
System.err.println("MiscStatic:specChar\n" + HelpMessages.INPUT_PARAMETER_NULL); //$NON-NLS-1$
return;
}
String tmpFile = "13d84.hwr"; //$NON-NLS-1$
String infile = null;
String tmpInfile = MiscStatic.loadFile(in,characterset);
boolean writeResult = true;
try
{
OutputStreamWriter outP;
if(characterset!=null)
{
outP = new OutputStreamWriter(
new FileOutputStream(tmpFile),characterset);
}
else
{
outP = new OutputStreamWriter(
new FileOutputStream(tmpFile));
}
writeResult = MiscStatic.print(outP,tmpInfile);
if(!writeResult)
{
System.err.println("MiscStatic:specChar" + HelpMessages.WRITE_EXCEPTION + //$NON-NLS-1$
in);
}
outP.close();
}
catch(Exception e)
{
System.err.println("MiscStatic:specChar" + HelpMessages.WRITE_EXCEPTION + //$NON-NLS-1$
e);
}
if(writeResult)
{
infile = MiscStatic.loadFile(tmpFile,characterset);
}
else
{
infile=null;
}
if(infile!=null)
{
try
{
StringBuffer resultfile= new StringBuffer();
for(int i=0;i<infile.length();i++)
{
tmpspeccharfound=false;
char t = infile.charAt(i);
if(t!='&')
{
if((t>'a' && t<'z') || (t>'A' && t<'Z') || (t>'0' && t<'9') ||
t=='<' || t=='>' || t=='/' || t=='.' || t=='=' ||
t=='-' || t=='%' || t=='@')
{
resultfile.append(t);
}
else
{
resultfile.append(MiscStatic.toSpecChar(t));
}
}
else
{
char t2 = infile.charAt(i+1);
if(t2==' ' || t2=='\n')
{
resultfile.append("&amp;"); //$NON-NLS-1$
tmpspeccharfound=true;
}
else
{
resultfile.append(MiscStatic.toSpecChar(t));
}
}
if(tmpspeccharfound==true)
{
speccharfound=true;
}
}
if(speccharfound)
{
System.out.println(HelpMessages.WRITE_FILE + out);
OutputStreamWriter outP;
if(characterset!=null)
{
outP = new OutputStreamWriter(
new FileOutputStream(out),characterset);
}
else
{
outP = new OutputStreamWriter(
new FileOutputStream(out));
}
MiscStatic.print(outP, resultfile.toString());
outP.close();
}
speccharfound=false;
}
catch(Exception e)
{
System.err.println("MiscStatic:specChar" + HelpMessages.WRITE_EXCEPTION + //$NON-NLS-1$
e);
}
File tmp = new File(tmpFile);
tmp.delete();
}
}
//converts a character to a special code if needed
static String toSpecChar(char token)
{
tmpspeccharfound=true;
if(token=='\ufffd')
{
return "&aring;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Aring;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Auml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&auml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Ouml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ouml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Eacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Egrave;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Uuml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&aacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Aacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&agrave;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&eacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&egrave;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&iacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&igrave;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&euml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&oacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ograve;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&uacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ugrave;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&uuml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&yuml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&acirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Acirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ecirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Ecirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ucirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Ucirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ocirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Ocirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&icirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&AElig;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&aelig;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Icirc;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Agrave;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Atilde;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&atilde;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ETH;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&eth;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Igrave;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Ntilde;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ntilde;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Otilde;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&otilde;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&szlig;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&THORN;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&thorn;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Oslash;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&oslash;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Ograve;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Ugrave;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&iuml;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Yacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&yacute;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&Ccedil;"; //$NON-NLS-1$
}
if(token=='\ufffd')
{
return "&ccedil;"; //$NON-NLS-1$
}
/*if(token=='\ufffd')
{
return "&frac12;";
}*/
tmpspeccharfound = false;
return new Character(token).toString();
}
/**
* Trims double quotes from an argument.
* @param str the string to trim.
* @return the trimmed string.
**/
static String trimQuotes(String str) {
int len = str.length();
if(len <= 0) return str;
if(str.charAt(len - 1) == '"') str = str.substring(0, len - 1);
if(str.charAt(0) == '"') str = str.substring(1);
return str;
}
}