| //------------------------------------------------------------------------------ |
| // 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.File; |
| import java.io.IOException; |
| import java.io.OutputStreamWriter; |
| import java.util.Hashtable; |
| import java.util.Vector; |
| |
| import com.ibm.icu.util.StringTokenizer; |
| |
| //Object holding definitionfile information |
| public class DefinitionObject |
| { |
| private String indextitle = "Index - Basic Unified Process"; //$NON-NLS-1$ |
| private String see = ", See "; //$NON-NLS-1$ |
| private String seealso = ", See also "; //$NON-NLS-1$ |
| private String characterset = "utf-8"; //$NON-NLS-1$ |
| String keyWordSeparator = "|"; //$NON-NLS-1$ |
| String levelSeparatorReplace = ":"; //$NON-NLS-1$ |
| String wwwRoot = null; |
| int stipLength=0; |
| String relativepath = null; |
| String target=null; |
| String specKeyWordFile=null; |
| String mainResultFile=null; |
| String indexResultFile=null; |
| String indexTarget=null; |
| String indexHeight=null; |
| String keywordTarget=null; |
| String keywordResultFile=null; |
| String headerFile=null; |
| String footerFile=null; |
| String keyWordPrefix=Def.DefaultKeyWordPrefix; |
| String keyWordLevelSeparator=Def.DefaultKeyWordLevelSeparator; |
| |
| boolean multidocumentkeyword=false; |
| boolean showdocumenttitle=false; |
| Vector stopDirsV=null; |
| Hashtable fontDefinitions=null; |
| Hashtable styleDefinitions=null; |
| |
| private File defFileRoot; |
| |
| //Constructor that parses the definitionfile |
| DefinitionObject(String pubDir, String deffile, String charSet) |
| { |
| setwwwRoot(pubDir); |
| defFileRoot = new File(deffile).getParentFile(); |
| |
| // Read the definition file and split the deffile into it's individual lines. |
| String infile = MiscStatic.loadFile(deffile,charSet); |
| StringTokenizer parser = new StringTokenizer(infile, "\t\n"); //$NON-NLS-1$ |
| |
| stopDirsV = new Vector(); |
| fontDefinitions = new Hashtable(10); |
| styleDefinitions = new Hashtable(10); |
| while(parser.hasMoreTokens()) |
| { |
| String param = parser.nextToken().trim(); |
| |
| if(param.equalsIgnoreCase(Def.LevelFont)) |
| { |
| asignFont(parser); |
| } |
| else if(param.equalsIgnoreCase(Def.LevelStyle)) |
| { |
| asignStyle(parser); |
| } |
| else |
| { |
| String value = parser.nextToken().trim(); |
| if(value==null) |
| { |
| System.err.println("DefinitionObject:addValue\n" + //$NON-NLS-1$ |
| HelpMessages.PARAMETER_MISSING_VALUE + param); |
| return; |
| } |
| asignValue(param, value); |
| } |
| } |
| |
| } |
| |
| //Check if enough input is read |
| boolean enoughInput() |
| { |
| boolean enough=true; |
| StringBuffer buff = new StringBuffer(); |
| buff.append("\n"); //$NON-NLS-1$ |
| if(wwwRoot==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.WWWRootParam); |
| enough=false; |
| } |
| |
| if(keywordResultFile==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.KeyWordResultFile); |
| enough=false; |
| } |
| |
| if(indexResultFile!=null && mainResultFile==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.MainResultFile); |
| enough=false; |
| } |
| |
| if(indexResultFile!=null && indexTarget==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.IndexTarget); |
| enough=false; |
| } |
| |
| if(indexResultFile!=null && keywordTarget==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.KeyWordTarget); |
| enough=false; |
| } |
| |
| if(indexResultFile!=null && indexHeight==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.IndexHeight); |
| enough=false; |
| } |
| |
| if(relativepath==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.RelPath); |
| enough=false; |
| } |
| |
| if(headerFile==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.HeaderFile); |
| enough=false; |
| } |
| |
| if(footerFile==null) |
| { |
| buff.append(HelpMessages.PARAMETER_MISSING + Def.FooterFile); |
| enough=false; |
| } |
| |
| FontObject f = (FontObject)fontDefinitions.get(Def.DefaultFont); |
| FontObject fs = (FontObject)styleDefinitions.get(Def.DefaultStyle); |
| if(f==null && fs==null) |
| { |
| buff.append(HelpMessages.FONT_AND_STYLE_MISSING + Def.DefaultFont + " " + Def.DefaultStyle); //$NON-NLS-1$ |
| enough=false; |
| } |
| if(!enough) |
| { |
| buff.append("\n"); //$NON-NLS-1$ |
| System.err.println(buff); |
| } |
| return enough; |
| } |
| |
| |
| //Asigns values to the different attributes |
| private void asignValue(String param, String value) |
| { |
| |
| if(param.equalsIgnoreCase(Def.MainResultFile)) |
| { |
| mainResultFile = value; |
| } |
| else if(param.equalsIgnoreCase(Def.CharacterSet)) |
| { |
| characterset = value; |
| } |
| else if(param.equalsIgnoreCase(Def.See)) |
| { |
| see = value; |
| } |
| else if(param.equalsIgnoreCase(Def.SeeAlso)) |
| { |
| seealso = value; |
| } |
| else if(param.equalsIgnoreCase(Def.IndexResultFile)) |
| { |
| indexResultFile = value; |
| } |
| else if(param.equalsIgnoreCase(Def.KeyWordResultFile)) |
| { |
| keywordResultFile = value; |
| } |
| else if(param.equalsIgnoreCase(Def.HeaderFile)) |
| { |
| headerFile = new File(defFileRoot, value).getAbsolutePath();; |
| } |
| else if(param.equalsIgnoreCase(Def.FooterFile)) |
| { |
| footerFile = new File(defFileRoot, value).getAbsolutePath();; |
| } |
| else if(param.equalsIgnoreCase(Def.RelPath)) |
| { |
| relativepath = value; |
| } |
| else if(param.equalsIgnoreCase(Def.DefaultTargetParam)) |
| { |
| target = value; |
| } |
| else if(param.equalsIgnoreCase(Def.KeyWordFile)) |
| { |
| specKeyWordFile = new File(defFileRoot, value).getAbsolutePath(); |
| } |
| else if(param.equalsIgnoreCase(Def.IndexTitle)) |
| { |
| indextitle = value; |
| } |
| else if(param.equalsIgnoreCase(Def.KeyWordTarget)) |
| { |
| keywordTarget = value; |
| } |
| else if(param.equalsIgnoreCase(Def.IndexTarget)) |
| { |
| indexTarget = value; |
| } |
| else if(param.equalsIgnoreCase(Def.IndexHeight)) |
| { |
| indexHeight = value; |
| } |
| else if(param.equalsIgnoreCase(Def.MultiDocKeyWord)) |
| { |
| multidocumentkeyword = value.equalsIgnoreCase(Def.True); |
| } |
| else if(param.equalsIgnoreCase(Def.ShowDocTitle)) |
| { |
| showdocumenttitle = value.equalsIgnoreCase(Def.True); |
| } |
| else if(param.equalsIgnoreCase(Def.LeaveDir)) |
| { |
| stopDirsV.addElement(value); |
| } |
| else if(param.equalsIgnoreCase(Def.KeyWordPrefix)) |
| { |
| keyWordPrefix = value; |
| } |
| else if(param.equalsIgnoreCase(Def.KeyWordLevelSeparator)) |
| { |
| keyWordLevelSeparator = value; |
| } |
| else |
| { |
| |
| System.err.println(HelpMessages.INVALID_PARAMETER_NAME + param); |
| } |
| |
| } |
| |
| //Parses a fontdefinition |
| private void asignFont(StringTokenizer parser) |
| { |
| String stringLevel = parser.nextToken().trim(); |
| Object key = stringLevel; |
| if(!stringLevel.equalsIgnoreCase(Def.DefaultFont) && !stringLevel.equalsIgnoreCase(Def.HeadLineFont)) |
| { |
| key = new Integer(stringLevel); |
| } |
| String name = parser.nextToken().trim(); |
| String style = parser.nextToken().trim(); |
| String size = parser.nextToken().trim(); |
| |
| fontDefinitions.put(key,new FontObject(name, style, size)); |
| } |
| |
| //Parses a styledefinition |
| private void asignStyle(StringTokenizer parser) |
| { |
| String stringLevel = parser.nextToken().trim(); |
| Object key = stringLevel; |
| if(!stringLevel.equalsIgnoreCase(Def.DefaultStyle) && !stringLevel.equalsIgnoreCase(Def.HeadLineStyle)) |
| { |
| key = new Integer(stringLevel); |
| } |
| |
| String style = parser.nextToken().trim(); |
| styleDefinitions.put(key,new FontObject(style)); |
| } |
| |
| //Check if the reached directory is whithin the stopdirlist |
| boolean isInStopdir(String str) |
| { |
| for(int i=0;i<stopDirsV.size();i++) |
| { |
| String tmpStr = (String) stopDirsV.elementAt(i); |
| if(str.substring(KeyWordIndexHelper.defObj.getWwwRoot().length()+1).compareTo(tmpStr)==0) |
| { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| //Accessmethods |
| String getIndexTitle() |
| { |
| return indextitle; |
| } |
| |
| String getSee() |
| { |
| return see; |
| } |
| |
| String getSeeAlso() |
| { |
| return seealso; |
| } |
| |
| String getCharacterSet() |
| { |
| return characterset; |
| } |
| boolean getMulitDocumentKeyword() |
| { |
| return multidocumentkeyword; |
| } |
| |
| boolean getShowDocumentTitle() |
| { |
| return showdocumenttitle; |
| } |
| |
| String getKeyWordTarget() |
| { |
| return keywordTarget; |
| } |
| |
| String getIndexTarget() |
| { |
| return indexTarget; |
| } |
| |
| String getIndexHeight() |
| { |
| return indexHeight; |
| } |
| |
| String getWwwRoot() |
| { |
| return wwwRoot; |
| } |
| |
| int getWwwRootLength() |
| { |
| return stipLength; |
| } |
| |
| String getTarget() |
| { |
| return target; |
| } |
| |
| String getKeyWordFile() |
| { |
| return specKeyWordFile; |
| } |
| |
| String getMainResultFile() |
| { |
| return mainResultFile; |
| } |
| |
| String getIndexResultFile() |
| { |
| return indexResultFile; |
| } |
| |
| String getKeywordResultFile() |
| { |
| return keywordResultFile; |
| } |
| |
| |
| String getRelativePath() |
| { |
| return relativepath; |
| } |
| |
| String getHeaderFile() |
| { |
| return headerFile; |
| } |
| |
| String getFooterFile() |
| { |
| return footerFile; |
| } |
| |
| String getKeyWordPrefix() |
| { |
| return keyWordPrefix; |
| } |
| |
| String getKeyWordLevelSeparator() |
| { |
| return keyWordLevelSeparator; |
| } |
| |
| FontObject getFont(int level) |
| { |
| FontObject f = (FontObject)fontDefinitions.get(new Integer(level)); |
| if(f==null) |
| { |
| f = (FontObject)fontDefinitions.get(Def.DefaultFont); |
| } |
| return f; |
| } |
| |
| FontObject getFont(Object key) |
| { |
| return (FontObject)fontDefinitions.get(key); |
| |
| } |
| |
| FontObject getStyleSheet(int level) |
| { |
| FontObject f = (FontObject)styleDefinitions.get(new Integer(level)); |
| if(f==null) |
| { |
| f = (FontObject)styleDefinitions.get(Def.DefaultStyle); |
| } |
| return f; |
| } |
| |
| FontObject getStyleSheet(Object key) |
| { |
| return (FontObject)styleDefinitions.get(key); |
| } |
| |
| void printStart(OutputStreamWriter outP,int level) |
| { |
| if(getStyleSheet(Def.DefaultStyle)==null) |
| { |
| FontObject f = getFont(level); |
| if(f==null) |
| { |
| f = getFont(Def.DefaultFont); |
| } |
| printStart(outP, f); |
| } |
| else |
| { |
| FontObject f = getStyleSheet(level); |
| if(f==null) |
| { |
| f = getStyleSheet(Def.DefaultStyle); |
| } |
| printStart(outP, f); |
| } |
| } |
| void printStart(OutputStreamWriter outP,FontObject f) |
| { |
| |
| if(outP==null) |
| { |
| System.out.println("DefinitionObject:printStart\n" + HelpMessages.BAD_OUTPUT_STREAM); //$NON-NLS-1$ |
| return; |
| } |
| |
| |
| if(f!=null && f.getStyleSheet()==null) |
| { |
| MiscStatic.print(outP,"<FONT FACE=\"" + f.getName() + "\" SIZE=\"" + f.getSize() + "\" >\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| if(f.isItalic()) |
| { |
| MiscStatic.print(outP,"<I>"); //$NON-NLS-1$ |
| } |
| |
| if(f.isBold()) |
| { |
| MiscStatic.print(outP,"<B>"); //$NON-NLS-1$ |
| } |
| } |
| else |
| { |
| MiscStatic.print(outP, "<P CLASS=\"" + f.getStyleSheet() + "\">\n"); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } |
| |
| void printEnd(OutputStreamWriter outP, int level) |
| { |
| |
| if(outP==null) |
| { |
| System.out.println("DefinitionObject:printEnd\n" + HelpMessages.BAD_OUTPUT_STREAM); //$NON-NLS-1$ |
| return; |
| } |
| |
| if(getStyleSheet(Def.DefaultStyle)==null) |
| { |
| FontObject f = getFont(level); |
| if(f==null) |
| { |
| f = getFont(Def.DefaultFont); |
| } |
| printEnd(outP, f); |
| } |
| else |
| { |
| printEnd(outP, null); |
| } |
| } |
| |
| void printEnd(OutputStreamWriter outP, FontObject f) |
| { |
| if(outP==null) |
| { |
| System.out.println("DefinitionObject:printEnd\n" + HelpMessages.BAD_OUTPUT_STREAM); //$NON-NLS-1$ |
| return; |
| } |
| |
| if(f!=null && f.getStyleSheet()==null) |
| { |
| if(f.isBold()) |
| { |
| MiscStatic.print(outP,"</B>"); //$NON-NLS-1$ |
| } |
| |
| if(f.isItalic()) |
| { |
| MiscStatic.print(outP,"</I>"); //$NON-NLS-1$ |
| } |
| MiscStatic.print(outP,"</FONT>\n"); //$NON-NLS-1$ |
| } |
| else |
| { |
| MiscStatic.print(outP,"</P>\n"); //$NON-NLS-1$ |
| } |
| } |
| //--------------------------------------------------------------------------------------------- |
| // |
| // RPW 2.0 Integration -- Do not modify this code unless you know what you are doing. |
| // // Because RPW calls these applications from a different location than the batch file |
| // it is neccessary to override the defaults in the config file. |
| // |
| // The following methods simply allow the values to be over-ridden. |
| // |
| //---------------------------------------------------------------------------------------------- |
| public void setwwwRoot(String newRoot) |
| { |
| try { |
| File wwwDir = new File(newRoot); |
| wwwRoot = wwwDir.getCanonicalPath() + "/"; //$NON-NLS-1$ |
| wwwRoot = wwwRoot.replace('\\' , '/'); |
| stipLength = wwwRoot.length()-1; |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| void setRelativePath(String newPath) |
| { |
| relativepath = newPath; |
| } |
| |
| /** |
| * set the index title |
| * |
| * @param title String |
| */ |
| public void setIndexTitle(String title) |
| { |
| indextitle = title; |
| } |
| } |