diff options
author | Matúš Kukan <matus.kukan@gmail.com> | 2013-03-09 12:34:34 +0100 |
---|---|---|
committer | Matúš Kukan <matus.kukan@gmail.com> | 2013-03-11 15:59:16 +0100 |
commit | 17b2ace79b86bd772d9eb48b9c4ad69c0713695c (patch) | |
tree | f561c8235905ebc740b1b7ac2802de638bf6cd8c /l10ntools | |
parent | 77e21bb36a2cdaaa0f4049dee0d45c5b2325c6e9 (diff) |
filter: use python version of FCFGMerge
Change-Id: I23124b919359c1217529724338b8d4906e051306
Diffstat (limited to 'l10ntools')
-rw-r--r-- | l10ntools/Jar_FCFGMerge.mk | 48 | ||||
-rw-r--r-- | l10ntools/Module_l10ntools.mk | 6 | ||||
-rw-r--r-- | l10ntools/Package_inc.mk | 2 | ||||
-rw-r--r-- | l10ntools/source/filter/merge/FCFGMerge.cfg | 112 | ||||
-rw-r--r-- | l10ntools/source/filter/merge/FCFGMerge.java | 114 | ||||
-rw-r--r-- | l10ntools/source/filter/merge/Manifest.mf | 1 | ||||
-rw-r--r-- | l10ntools/source/filter/merge/Merger.java | 345 | ||||
-rw-r--r-- | l10ntools/source/filter/utils/AnalyzeStartupLog.java | 316 | ||||
-rw-r--r-- | l10ntools/source/filter/utils/Cache.java | 2428 | ||||
-rw-r--r-- | l10ntools/source/filter/utils/ConfigHelper.java | 291 | ||||
-rw-r--r-- | l10ntools/source/filter/utils/FileHelper.java | 754 | ||||
-rw-r--r-- | l10ntools/source/filter/utils/Logger.java | 156 | ||||
-rw-r--r-- | l10ntools/source/filter/utils/MalformedCommandLineException.java | 38 | ||||
-rw-r--r-- | l10ntools/source/filter/utils/XMLHelper.java | 812 |
14 files changed, 0 insertions, 5423 deletions
diff --git a/l10ntools/Jar_FCFGMerge.mk b/l10ntools/Jar_FCFGMerge.mk deleted file mode 100644 index 7719f5f0d014..000000000000 --- a/l10ntools/Jar_FCFGMerge.mk +++ /dev/null @@ -1,48 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# Version: MPL 1.1 / GPLv3+ / LGPLv3+ -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License or as specified alternatively below. You may obtain a copy of -# the License at http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# Major Contributor(s): -# Copyright (C) 2012 David Ostrovsky <d.ostrovsky@gmx.de> (initial developer) -# -# All Rights Reserved. -# -# For minor contributions see the git repository. -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 3 or later (the "GPLv3+"), or -# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), -# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable -# instead of those above. - -$(eval $(call gb_Jar_Jar,FCFGMerge)) - -$(eval $(call gb_Jar_set_packageroot,FCFGMerge,com)) - -$(eval $(call gb_Jar_set_manifest,FCFGMerge,$(SRCDIR)/l10ntools/source/filter/merge/Manifest.mf)) - -$(eval $(call gb_Jar_add_sourcefiles,FCFGMerge,\ - l10ntools/source/filter/merge/FCFGMerge \ - l10ntools/source/filter/merge/Merger \ - l10ntools/source/filter/utils/AnalyzeStartupLog \ - l10ntools/source/filter/utils/Cache \ - l10ntools/source/filter/utils/ConfigHelper \ - l10ntools/source/filter/utils/FileHelper \ - l10ntools/source/filter/utils/Logger \ - l10ntools/source/filter/utils/MalformedCommandLineException \ - l10ntools/source/filter/utils/XMLHelper \ -)) - -$(eval $(call gb_Jar_add_packagefile,FCFGMerge,\ - com/sun/star/filter/config/tools/merge/FCFGMerge.cfg,\ - $(SRCDIR)/l10ntools/source/filter/merge/FCFGMerge.cfg \ -)) diff --git a/l10ntools/Module_l10ntools.mk b/l10ntools/Module_l10ntools.mk index 1d174a33ee2a..2982fd6d6692 100644 --- a/l10ntools/Module_l10ntools.mk +++ b/l10ntools/Module_l10ntools.mk @@ -43,10 +43,4 @@ $(eval $(call gb_Module_add_targets,l10ntools,\ Package_ulfconv \ )) -ifneq ($(SOLAR_JAVA),) -$(eval $(call gb_Module_add_targets,l10ntools,\ - Jar_FCFGMerge \ -)) -endif - # vim:set noet sw=4 ts=4: diff --git a/l10ntools/Package_inc.mk b/l10ntools/Package_inc.mk index c990c154f502..dc7b32ef2995 100644 --- a/l10ntools/Package_inc.mk +++ b/l10ntools/Package_inc.mk @@ -29,7 +29,5 @@ $(eval $(call gb_Package_Package,l10ntools_inc,$(SRCDIR)/l10ntools)) $(eval $(call gb_Package_add_file,l10ntools_inc,inc/l10ntools/export.hxx,inc/export.hxx)) $(eval $(call gb_Package_add_file,l10ntools_inc,inc/l10ntools/directory.hxx,inc/l10ntools/directory.hxx)) $(eval $(call gb_Package_add_file,l10ntools_inc,inc/l10ntools/file.hxx,inc/l10ntools/file.hxx)) -$(eval $(call gb_Package_add_file,l10ntools_inc,inc/l10ntools/FCFGMerge.cfg,source/filter/merge/FCFGMerge.cfg)) - # vim: set noet sw=4 ts=4: diff --git a/l10ntools/source/filter/merge/FCFGMerge.cfg b/l10ntools/source/filter/merge/FCFGMerge.cfg deleted file mode 100644 index 4516a777bc57..000000000000 --- a/l10ntools/source/filter/merge/FCFGMerge.cfg +++ /dev/null @@ -1,112 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# - -#************************************************ -# Specify the verbose mode of this tool. -# 1 = show errors only -# 2 = show errors/warnings (default) -# 3 = show errors/warnings and some generic infos -# 4 = show anything (including detailed infos) -# -# [OPTIONAL] -#************************************************ - -loglevel = 2 - -#************************************************ -# This extension is used for all XML files. It doesnt -# matter if its used for reading fragments or writing -# XML packages. -# Must be given without any additional signes like "." -# or "*."! -# -# [REQUIRED] -#************************************************ - -extension_xcu=xcu - -#************************************************ -# This extension is used for all Package files. It doesnt -# matter if its used for reading such files or writing -# it. -# Must be given without any additional signes like "." -# or "*."! -# -# [REQUIRED] -#************************************************ - -extension_pkg=pkg - -#************************************************ -# These values are used to generate a correct XML -# header. -# Note: The property "xmlpackage" must be specified -# via command line. There exists more then one -# possible value. -# -# [REQUIRED] -#************************************************ - -xmlversion = 1.0 -xmlencoding = UTF-8 -xmlpath = org.openoffice.TypeDetection -#xmlpackage = - -#************************************************ -# These values are used to name the configuration -# sets inside the generated XCM file for different -# item groups like e.g. types, filters etcpp. -# -# [REQUIRED] -#************************************************ - -setname_types = Types -setname_filters = Filters -setname_frameloaders = FrameLoaders -setname_contenthandlers = ContentHandlers - -subdir_types = types -subdir_filters = filters -subdir_frameloaders = frameloaders -subdir_contenthandlers = contenthandlers - -#************************************************ -# This delimiter is used to split every -# item list of the package configuration files -# (which are temp. created by the make proccess) -# into its tokens. -# -# [REQUIRED] -#************************************************ -delimiter=, - -#************************************************ -# Enable/disable removing of leading/trailing withespaces -# during splitting stringlists. -# -# [REQUIRED] -#************************************************ -trim=true - -#************************************************ -# Enable/disable removing of leading/trailing "-signs -# during splitting stringlists. -# -# [REQUIRED] -#************************************************ -decode=false diff --git a/l10ntools/source/filter/merge/FCFGMerge.java b/l10ntools/source/filter/merge/FCFGMerge.java deleted file mode 100644 index ce3d510be48d..000000000000 --- a/l10ntools/source/filter/merge/FCFGMerge.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.filter.config.tools.merge; - -import java.lang.*; -import java.util.*; -import java.io.*; -import com.sun.star.filter.config.tools.utils.*; - -/** - * Its a simple command line tool, which can merge different XML fragments - * together. Such fragments must exist as files on disk, will be moved into - * one file together on disk. - * - * - */ -public class FCFGMerge -{ - private static final java.lang.String CFGFILE = "com/sun/star/filter/config/tools/merge/FCFGMerge.cfg"; - private static final java.lang.String PROP_LOGLEVEL = "loglevel"; - - //___________________________________________ - // main - - public static void main(java.lang.String[] sCmdLine) - { - // create log object in default mode "WARNINGS" - // If a command line parameter indicates another - // level - change it! - Logger aLog = new Logger(); - - try - { - // merge config file and overwrite properties - // via command line - ConfigHelper aCfg = null; - aCfg = new ConfigHelper(CFGFILE, sCmdLine); - - // update log level - int nLogLevel = aCfg.getInt(PROP_LOGLEVEL, Logger.LEVEL_WARNINGS); - aLog = new Logger(nLogLevel); - - // help requested? - if (aCfg.isHelp()) - { - FCFGMerge.printCopyright(); - FCFGMerge.printHelp(); - System.exit(-1); - } - - // create new merge object and start operation - Merger aMerger = new Merger(aCfg, aLog); - aMerger.merge(); - } - catch(java.lang.Throwable ex) - { - aLog.setException(ex); - System.exit(-1); - } - - System.exit(0); - } - - //___________________________________________ - - /** prints out a copyright message on stdout. - */ - private static void printCopyright() - { - java.lang.StringBuffer sOut = new java.lang.StringBuffer(256); - sOut.append("FCFGMerge (LibreOffice)\n\n"); - sOut.append("Copyright (C) 2003 Sun Microsystems, Inc.\n"); - sOut.append("Copyright (C) 2012 The Document Foundation\n"); - sOut.append("License LGPLv3: GNU LGPL version 3 <http://www.gnu.org/licenses/lgpl.html>.\n"); - sOut.append("This is free software: you are free to change and redistribute it.\n"); - sOut.append("There is NO WARRANTY, to the extent permitted by law.\n"); - System.out.println(sOut.toString()); - } - - //___________________________________________ - - /** prints out a help message on stdout. - */ - private static void printHelp() - { - java.lang.StringBuffer sOut = new java.lang.StringBuffer(256); - sOut.append("____________________________________________________________\n"); - sOut.append("usage: FCFGMerge cfg=<file name>\n" ); - sOut.append("parameters:\n" ); - sOut.append("\tcfg=<file name>\n" ); - sOut.append("\t\tmust point to a system file, which contains\n" ); - sOut.append("\t\tall neccessary configuration data for the merge process.\n"); - sOut.append("\n\tFurther cou can specify every parameter allowed in the\n" ); - sOut.append("\n\tconfig file as command line parameter too, to overwrite\n" ); - sOut.append("\n\tthe value from the file.\n" ); - System.out.println(sOut.toString()); - } -} diff --git a/l10ntools/source/filter/merge/Manifest.mf b/l10ntools/source/filter/merge/Manifest.mf deleted file mode 100644 index 1337eaf4d39a..000000000000 --- a/l10ntools/source/filter/merge/Manifest.mf +++ /dev/null @@ -1 +0,0 @@ -Main-Class: com.sun.star.filter.config.tools.merge.FCFGMerge diff --git a/l10ntools/source/filter/merge/Merger.java b/l10ntools/source/filter/merge/Merger.java deleted file mode 100644 index e0eff4d45e28..000000000000 --- a/l10ntools/source/filter/merge/Merger.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.filter.config.tools.merge; - -import java.lang.*; -import java.util.*; -import java.io.*; -import com.sun.star.filter.config.tools.utils.*; - -/** can merge different xml fragments together. - * - * - */ -public class Merger -{ - private static final java.lang.String PROP_XMLVERSION = "xmlversion" ; // <= global cfg file - private static final java.lang.String PROP_XMLENCODING = "xmlencoding" ; // <= global cfg file - private static final java.lang.String PROP_XMLPATH = "xmlpath" ; // <= global cfg file - private static final java.lang.String PROP_XMLPACKAGE = "xmlpackage" ; // <= global cfg file - - private static final java.lang.String PROP_SETNAME_TYPES = "setname_types" ; // <= global cfg file - private static final java.lang.String PROP_SETNAME_FILTERS = "setname_filters" ; // <= global cfg file - private static final java.lang.String PROP_SETNAME_LOADERS = "setname_frameloaders" ; // <= global cfg file - private static final java.lang.String PROP_SETNAME_HANDLERS = "setname_contenthandlers" ; // <= global cfg file - - private static final java.lang.String PROP_SUBDIR_TYPES = "subdir_types" ; // <= global cfg file - private static final java.lang.String PROP_SUBDIR_FILTERS = "subdir_filters" ; // <= global cfg file - private static final java.lang.String PROP_SUBDIR_LOADERS = "subdir_frameloaders" ; // <= global cfg file - private static final java.lang.String PROP_SUBDIR_HANDLERS = "subdir_contenthandlers" ; // <= global cfg file - - private static final java.lang.String PROP_EXTENSION_XCU = "extension_xcu" ; // <= global cfg file - private static final java.lang.String PROP_EXTENSION_PKG = "extension_pkg" ; // <= global cfg file - - private static final java.lang.String PROP_DELIMITER = "delimiter" ; // <= global cfg file - private static final java.lang.String PROP_TRIM = "trim" ; // <= global cfg file - private static final java.lang.String PROP_DECODE = "decode" ; // <= global cfg file - - private static final java.lang.String PROP_FRAGMENTSDIR = "fragmentsdir" ; // <= cmdline - private static final java.lang.String PROP_TEMPDIR = "tempdir" ; // <= cmdline - private static final java.lang.String PROP_OUTDIR = "outdir" ; // <= cmdline - private static final java.lang.String PROP_PKG = "pkg" ; // <= cmdline - private static final java.lang.String PROP_DEBUG = "debug" ; // <= cmdline - - private static final java.lang.String PROP_TCFG = "tcfg" ; // <= cmdline - private static final java.lang.String PROP_FCFG = "fcfg" ; // <= cmdline - private static final java.lang.String PROP_LCFG = "lcfg" ; // <= cmdline - private static final java.lang.String PROP_CCFG = "ccfg" ; // <= cmdline - private static final java.lang.String PROP_LANGUAGEPACK = "languagepack" ; // <= cmdline - - private static final java.lang.String PROP_ITEMS = "items" ; // <= pkg cfg files! - - //___________________________________________ - // member - - //------------------------------------------- - /** TODO */ - private ConfigHelper m_aCfg; - - //------------------------------------------- - /** TODO */ - private Logger m_aLog; - - //------------------------------------------- - /** TODO */ - private java.io.File m_aFragmentsDir; - - //------------------------------------------- - /** TODO */ - private java.io.File m_aTempDir; - - //------------------------------------------- - /** TODO */ - private java.io.File m_aOutDir; - - //------------------------------------------- - /** TODO */ - private java.util.Vector m_lTypes; - private java.util.Vector m_lFilters; - private java.util.Vector m_lLoaders; - private java.util.Vector m_lHandlers; - - //___________________________________________ - // interface - - //------------------------------------------- - /** initialize a new instance of this class and - * try to get all needed resources from the config module. - * - * @param aCfg - * provides access to all values of the global - * config file and to the command line. - * - * @param aLog - * can be used to print out log informations. - */ - public Merger(ConfigHelper aCfg, - Logger aLog) - throws java.lang.Exception - { - m_aCfg = aCfg; - m_aLog = aLog; - - m_aFragmentsDir = new java.io.File(m_aCfg.getString(PROP_FRAGMENTSDIR)); - m_aTempDir = new java.io.File(m_aCfg.getString(PROP_TEMPDIR )); -// m_aOutDir = new java.io.File(m_aCfg.getString(PROP_OUTDIR )); - - java.lang.String sDelimiter = m_aCfg.getString(PROP_DELIMITER); - boolean bTrim = m_aCfg.getBoolean(PROP_TRIM); - boolean bDecode = m_aCfg.getBoolean(PROP_DECODE); - - try - { - ConfigHelper aFcfg = new ConfigHelper(m_aCfg.getString(PROP_TCFG), null); - m_lTypes = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode); - } - catch(java.util.NoSuchElementException ex1) - { - m_lTypes = new java.util.Vector(); - //m_aLog.setWarning("Fragment list of types is missing. Parameter \"items\" seems to be invalid."); - } - - try - { - ConfigHelper aFcfg = new ConfigHelper(m_aCfg.getString(PROP_FCFG), null); - m_lFilters = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode); - } - catch(java.util.NoSuchElementException ex1) - { - m_lFilters = new java.util.Vector(); - //m_aLog.setWarning("Fragment list of filters is missing. Parameter \"items\" seems to be invalid."); - } - - try - { - ConfigHelper aFcfg = new ConfigHelper(m_aCfg.getString(PROP_LCFG), null); - m_lLoaders = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode); - } - catch(java.util.NoSuchElementException ex1) - { - m_lLoaders = new java.util.Vector(); - //m_aLog.setWarning("Fragment list of frame loader objects is missing. Parameter \"items\" seems to be invalid."); - } - - try - { - ConfigHelper aFcfg = new ConfigHelper(m_aCfg.getString(PROP_CCFG), null); - m_lHandlers = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode); - } - catch(java.util.NoSuchElementException ex1) - { - m_lHandlers = new java.util.Vector(); - //m_aLog.setWarning("Fragment list of content handler objects is missing. Parameter \"items\" seems to be invalid."); - } - } - - //------------------------------------------- - /** TODO */ - public synchronized void merge() - throws java.lang.Exception - { - java.lang.StringBuffer sBuffer = new java.lang.StringBuffer(1000000); - java.lang.String sPackage = m_aCfg.getString(PROP_PKG); - - m_aLog.setGlobalInfo("create package \""+sPackage+"\" ..."); - m_aLog.setDetailedInfo("generate package header ... "); - - sBuffer.append( - XMLHelper.generateHeader( - m_aCfg.getString (PROP_XMLVERSION ), - m_aCfg.getString (PROP_XMLENCODING ), - m_aCfg.getString (PROP_XMLPATH ), - m_aCfg.getString (PROP_XMLPACKAGE ), - m_aCfg.getBoolean(PROP_LANGUAGEPACK, false))); - - // counts all transferred fragments - // Can be used later to decide, if a generated package file - // contains "nothing"! - int nItemCount = 0; - - for (int i=0; i<4; ++i) - { - java.lang.String sSetName = null; - java.lang.String sSubDir = null; - java.util.Vector lFragments = null; - - try - { - switch(i) - { - case 0: // types - { - m_aLog.setDetailedInfo("generate set for types ... "); - sSetName = m_aCfg.getString(PROP_SETNAME_TYPES); - sSubDir = m_aCfg.getString(PROP_SUBDIR_TYPES ); - lFragments = m_lTypes; - } - break; - - case 1: // filters - { - m_aLog.setDetailedInfo("generate set for filter ... "); - sSetName = m_aCfg.getString(PROP_SETNAME_FILTERS); - sSubDir = m_aCfg.getString(PROP_SUBDIR_FILTERS ); - lFragments = m_lFilters; - } - break; - - case 2: // loaders - { - m_aLog.setDetailedInfo("generate set for frame loader ... "); - sSetName = m_aCfg.getString(PROP_SETNAME_LOADERS); - sSubDir = m_aCfg.getString(PROP_SUBDIR_LOADERS ); - lFragments = m_lLoaders; - } - break; - - case 3: // handlers - { - m_aLog.setDetailedInfo("generate set for content handler ... "); - sSetName = m_aCfg.getString(PROP_SETNAME_HANDLERS); - sSubDir = m_aCfg.getString(PROP_SUBDIR_HANDLERS ); - lFragments = m_lHandlers; - } - break; - } - - nItemCount += lFragments.size(); - - getFragments( - new java.io.File(m_aFragmentsDir, sSubDir), - sSetName, - lFragments, - 1, - sBuffer); - } - catch(java.util.NoSuchElementException exIgnore) - { continue; } - } - - m_aLog.setDetailedInfo("generate package footer ... "); - sBuffer.append(XMLHelper.generateFooter()); - - // Attention! - // If the package seem to be empty, it make no sense to generate a corresponding - // xml file. We should suppress writing of this file on disk completely ... - if (nItemCount < 1) - { - m_aLog.setWarning("Package is empty and will not result into a xml file on disk!? Please check configuration file."); - return; - } - m_aLog.setGlobalInfo("package contains "+nItemCount+" items"); - - java.io.File aPackage = new File(sPackage); - m_aLog.setGlobalInfo("write temp package \""+aPackage.getPath()); // TODO encoding must be readed from the configuration - FileHelper.writeEncodedBufferToFile(aPackage, "UTF-8", false, sBuffer); // check for success is done inside this method! - } - - //------------------------------------------- - /** TODO */ - private void getFragments(java.io.File aDir , - java.lang.String sSetName , - java.util.Vector lFragments , - int nPrettyTabs, - java.lang.StringBuffer sBuffer ) - throws java.lang.Exception - { - if (lFragments.size()<1) - { -// m_aLog.setWarning("List of fragments is empty!? Will be ignored ..."); - return; - } - - java.util.Enumeration pFragments = lFragments.elements(); - java.lang.String sExtXcu = m_aCfg.getString(PROP_EXTENSION_XCU); - - for (int tabs=0; tabs<nPrettyTabs; ++tabs) - sBuffer.append("\t"); - sBuffer.append("<node oor:name=\""+sSetName+"\">\n"); - ++nPrettyTabs; - - // special mode for generating language packs. - // In such case we must live with some missing fragment files. - // Reason behind; Not all filters are realy localized. - // But we dont use a different fragment list. We try to locate - // any fragment file in its language-pack version ... - boolean bHandleLanguagePacks = m_aCfg.getBoolean(PROP_LANGUAGEPACK, false); - boolean bDebug = m_aCfg.getBoolean(PROP_DEBUG , false); - java.lang.String sEncoding = "UTF-8"; - if (bDebug) - sEncoding = "UTF-8Special"; - - while(pFragments.hasMoreElements()) - { - java.lang.String sFragment = (java.lang.String)pFragments.nextElement(); - java.io.File aFragment = new java.io.File(aDir, sFragment+"."+sExtXcu); - - // handle simple files only and check for existence! - if (!aFragment.exists()) - { - if (bHandleLanguagePacks) - { - m_aLog.setWarning("language fragment \""+aFragment.getPath()+"\" does not exist. Will be ignored."); - continue; - } - else - throw new java.io.IOException("fragment \""+aFragment.getPath()+"\" does not exists."); - } - - if (!aFragment.isFile()) - { - m_aLog.setWarning("fragment \""+aFragment.getPath()+"\" seem to be not a valid file."); - continue; - } - - // copy file content of original fragment - // Note: A FileNotFoundException will be thrown automaticly by the - // used reader objects. Let it break this method too. Our calli is interested - // on such errors :-) - m_aLog.setDetailedInfo("merge fragment \""+aFragment.getPath()+"\" ..."); - FileHelper.readEncodedBufferFromFile(aFragment, sEncoding, sBuffer); - - sBuffer.append("\n"); - } - - --nPrettyTabs; - for (int tabs=0; tabs<nPrettyTabs; ++tabs) - sBuffer.append("\t"); - sBuffer.append("</node>\n"); - } -} diff --git a/l10ntools/source/filter/utils/AnalyzeStartupLog.java b/l10ntools/source/filter/utils/AnalyzeStartupLog.java deleted file mode 100644 index 45f736b6d49b..000000000000 --- a/l10ntools/source/filter/utils/AnalyzeStartupLog.java +++ /dev/null @@ -1,316 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.filter.config.tools.utils; - -//_______________________________________________ -// imports -import java.util.*; -import java.lang.*; - -//_______________________________________________ -// implementation -public class AnalyzeStartupLog -{ - private class OperationTime - { - /** name the measured operation. */ - public java.lang.String sOperation; - - /** contains the time value, when this operation was started. */ - public long nStartTime; - - /** contains the time value, when this operation was finished. */ - public long nEndTime; - - /** text inside log file, which identifies the start time value. */ - public java.lang.String sStartMsg; - - /** text inside log file, which identifies the end time value. */ - public java.lang.String sEndMsg; - } - - //_________________________________ - // main - - public static void main(java.lang.String[] lCmdLine) - { - int nExit = 0; - try - { - // analyze command line - ConfigHelper aCmdLine = new ConfigHelper("", lCmdLine); - java.lang.String sLogDir = aCmdLine.getString("logdir" ); - java.lang.String sDataFile = aCmdLine.getString("datafile"); - - if (sLogDir == null || sDataFile == null) - { - System.err.println("AnalyzeStartupLog lodir=<dir> datafile=<file>"); - System.err.println("E.g.: AnalyzeStartupLog lodir=c:\\temp\\logs datafile=c:\\temp\\data.csv"); - System.exit(--nExit); - } - - // get list of all log files - boolean bRecursive = true; - java.util.Vector lLogs = FileHelper.getSystemFilesFromDir(new java.io.File(sLogDir), bRecursive); - if (lLogs == null || lLogs.isEmpty()) - { - System.err.println("log dir is empty"); - System.exit(--nExit); - } - - // analyze it - java.lang.StringBuffer sOut = new java.lang.StringBuffer(1000); - sOut.append("log;t_cfg_start;t_cfg_end;t_fwk_start;t_fwk_end;t_sfx_start;t_sfx_end;t_types_start;t_types_end;t_filters_start;t_filters_end;"); - sOut.append("t_filters_swriter_start;t_filters_swriter_end;t_filters_sweb_start;t_filters_sweb_end;t_filters_sglobal_start;t_filters_sglobal_end;t_filters_scalc_start;t_filters_scalc_end;t_filters_sdraw_start;t_filters_sdraw_end;t_filters_simpress_start;t_filters_simpress_end;t_filters_schart_start;t_filters_schart_end;t_filters_smath_start;t_filters_smath_end;"); - sOut.append("t_others_start;t_others_end;d_cfg;d_fwk;d_sfx;d_types;d_filters;d_others;d_complete\n"); - - java.util.Enumeration aIt = lLogs.elements(); - while (aIt.hasMoreElements()) - { - java.io.File aLog = (java.io.File)aIt.nextElement(); - java.io.FileReader aReader = new java.io.FileReader(aLog); - java.io.BufferedReader aBuffer = new java.io.BufferedReader(aReader); - - long t_cfg_start = 0; - long t_cfg_end = 0; - - long t_fwk_start = 0; - long t_fwk_end = 0; - - long t_sfx_start = 0; - long t_sfx_end = 0; - - long t_types_start = 0; - long t_types_end = 0; - - long t_filters_start = 0; - long t_filters_end = 0; - - long t_filters_swriter_start = 0; - long t_filters_swriter_end = 0; - - long t_filters_sweb_start = 0; - long t_filters_sweb_end = 0; - - long t_filters_sglobal_start = 0; - long t_filters_sglobal_end = 0; - - long t_filters_scalc_start = 0; - long t_filters_scalc_end = 0; - - long t_filters_sdraw_start = 0; - long t_filters_sdraw_end = 0; - - long t_filters_simpress_start = 0; - long t_filters_simpress_end = 0; - - long t_filters_schart_start = 0; - long t_filters_schart_end = 0; - - long t_filters_smath_start = 0; - long t_filters_smath_end = 0; - - long t_others_start = 0; - long t_others_end = 0; - - while (true) - { - java.lang.String sLine = aBuffer.readLine(); - if (sLine == null) - break; - - if (sLine.endsWith("| framework (as96863) ::FilterCache::FilterCache : { creation ConfigItem [file=standard, version=6, mode=3]")) - t_cfg_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("| framework (as96863) ::FilterCache::FilterCache : } creation ConfigItem")) - t_cfg_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("| framework (as96863) ::FilterCache::FilterCache : { reading TypeDetection.xml")) - t_fwk_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("| framework (as96863) ::FilterCache::FilterCache : } reading TypeDetection.xml")) - t_fwk_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ framework (as96863) ::FilterCFGAccess::impl_loadTypes")) - t_types_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} framework (as96863) ::FilterCFGAccess::impl_loadTypes")) - t_types_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ framework (as96863) ::FilterCFGAccess::impl_loadFilters")) - t_filters_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} framework (as96863) ::FilterCFGAccess::impl_loadFilters")) - t_filters_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ reading FilterGroup [swriter]")) - t_filters_swriter_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} reading FilterGroup [swriter]")) - t_filters_swriter_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ reading FilterGroup [sweb]")) - t_filters_sweb_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} reading FilterGroup [sweb]")) - t_filters_sweb_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ reading FilterGroup [sglobal]")) - t_filters_sglobal_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} reading FilterGroup [sglobal]")) - t_filters_sglobal_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ reading FilterGroup [scalc]")) - t_filters_scalc_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} reading FilterGroup [scalc]")) - t_filters_scalc_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ reading FilterGroup [sdraw]")) - t_filters_sdraw_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} reading FilterGroup [sdraw]")) - t_filters_sdraw_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ reading FilterGroup [simpress]")) - t_filters_simpress_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} reading FilterGroup [simpress]")) - t_filters_simpress_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ reading FilterGroup [schart]")) - t_filters_schart_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} reading FilterGroup [schart]")) - t_filters_schart_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ reading FilterGroup [smath]")) - t_filters_smath_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} reading FilterGroup [smath]")) - t_filters_smath_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("{ framework (as96863) ::FilterCFGAccess::impl_loadDetectors")) - t_others_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} framework (as96863) ::FilterCFGAccess::impl_loadContentHandlers")) - t_others_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} framework (as96863) ::FilterCache::FilterCache")) - t_sfx_start = new java.lang.Long(sLine.substring(0, 6)).longValue(); - else - if (sLine.endsWith("} desktop (lo119109) OfficeWrapper::OfficeWrapper")) - t_sfx_end = new java.lang.Long(sLine.substring(0, 6)).longValue(); - } - - sOut.append(aLog.getName() ); - sOut.append(";" ); - sOut.append(t_cfg_start ); - sOut.append(";" ); - sOut.append(t_cfg_end ); - sOut.append(";" ); - sOut.append(t_fwk_start ); - sOut.append(";" ); - sOut.append(t_fwk_end ); - sOut.append(";" ); - sOut.append(t_sfx_start ); - sOut.append(";" ); - sOut.append(t_sfx_end ); - sOut.append(";" ); - sOut.append(t_types_start ); - sOut.append(";" ); - sOut.append(t_types_end ); - sOut.append(";" ); - sOut.append(t_filters_start ); - sOut.append(";" ); - sOut.append(t_filters_end ); - sOut.append(";" ); - - sOut.append(t_filters_swriter_start ); - sOut.append(";" ); - sOut.append(t_filters_swriter_end ); - sOut.append(";" ); - sOut.append(t_filters_sweb_start ); - sOut.append(";" ); - sOut.append(t_filters_sweb_end ); - sOut.append(";" ); - sOut.append(t_filters_sglobal_start ); - sOut.append(";" ); - sOut.append(t_filters_sglobal_end ); - sOut.append(";" ); - sOut.append(t_filters_scalc_start ); - sOut.append(";" ); - sOut.append(t_filters_scalc_end ); - sOut.append(";" ); - sOut.append(t_filters_sdraw_start ); - sOut.append(";" ); - sOut.append(t_filters_sdraw_end ); - sOut.append(";" ); - sOut.append(t_filters_simpress_start ); - sOut.append(";" ); - sOut.append(t_filters_simpress_end ); - sOut.append(";" ); - sOut.append(t_filters_schart_start ); - sOut.append(";" ); - sOut.append(t_filters_schart_end ); - sOut.append(";" ); - sOut.append(t_filters_smath_start ); - sOut.append(";" ); - sOut.append(t_filters_smath_end ); - sOut.append(";" ); - - sOut.append(t_others_start ); - sOut.append(";" ); - sOut.append(t_others_end ); - sOut.append(";" ); - sOut.append(t_cfg_end -t_cfg_start ); - sOut.append(";" ); - sOut.append(t_fwk_end -t_fwk_start ); - sOut.append(";" ); - sOut.append(t_sfx_end -t_sfx_start ); - sOut.append(";" ); - sOut.append(t_types_end -t_types_start ); - sOut.append(";" ); - sOut.append(t_filters_end-t_filters_start); - sOut.append(";" ); - sOut.append(t_others_end -t_others_start ); - sOut.append(";" ); - sOut.append(t_others_end -t_cfg_start ); - sOut.append("\n" ); - - aBuffer.close(); - } - - java.io.FileWriter aCSV = new java.io.FileWriter(sDataFile); - java.lang.String sData = sOut.toString(); - aCSV.write(sData, 0, sData.length()); - aCSV.flush(); - aCSV.close(); - } - catch(java.lang.Throwable exAny) - { - System.err.println(exAny.getMessage()); - exAny.printStackTrace(); - System.exit(--nExit); - } - - System.exit(0); - } -} diff --git a/l10ntools/source/filter/utils/Cache.java b/l10ntools/source/filter/utils/Cache.java deleted file mode 100644 index 5ecea57e1ff3..000000000000 --- a/l10ntools/source/filter/utils/Cache.java +++ /dev/null @@ -1,2428 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -package com.sun.star.filter.config.tools.utils; - -//_______________________________________________ - -import java.lang.*; -import java.util.*; -import java.io.*; - -//_______________________________________________ - -/** - * It implements a container for all possible entries which are part of the type - * and filter mechanism of an office - means all items of the configuration file - * "TypeDetection". How these entries will be readed or written can be switch - * in different modes. That would make it possible to edit an xml directly or - * to contact a running office instance. - * - * - */ -public class Cache -{ - - - /** identifies a file type item of this cache. */ - public static final int E_TYPE = 0; - - /** identifies a filter item of this cache. */ - public static final int E_FILTER = 1; - - /** identifies a detect service item of this cache. */ - public static final int E_DETECTSERVICE = 2; - - /** identifies a frame loader item of this cache. */ - public static final int E_FRAMELOADER = 3; - - /** identifies a content handler item of this cache. */ - public static final int E_CONTENTHANDLER = 4; - - /** indicates an unsupported xml format => error! */ - public static final int FORMAT_UNSUPPORTED = -1; - - /** identify the configuration format of an office 6.0. - * The own formated data string is used. */ - public static final int FORMAT_60 = 0; - - /** identify the configuration format of an office 6.y. - * Properties are realy xml tags again. */ - public static final int FORMAT_6Y = 1; - - /** identify the configuration format which is used inside - * this tooling project. */ - public static final int FORMAT_INTERNAL = 2; - - /** right value for a command line parameter to define a 6.0 version. */ - public static final java.lang.String CMDVAL_FORMAT_60 = "6.0"; - - /** right value for a command line parameter to define a 6.Y version. */ - public static final java.lang.String CMDVAL_FORMAT_6Y = "6.Y"; - - /** right value for a command line parameter to define an internal xml version! */ - public static final java.lang.String CMDVAL_FORMAT_INTERNAL = "internal"; - - // general - public static final java.lang.String PROPNAME_DATA = "Data"; - public static final java.lang.String PROPNAME_NAME = "Name"; - public static final java.lang.String PROPNAME_UINAME = "UIName"; - public static final java.lang.String PROPNAME_UINAMES = "UINames"; - - // type 6.0 ... - public static final java.lang.String PROPNAME_MEDIATYPE = "MediaType"; - public static final java.lang.String PROPNAME_PREFERRED = "Preferred"; - public static final java.lang.String PROPNAME_CLIPBOARDFORMAT = "ClipboardFormat"; - public static final java.lang.String PROPNAME_DOCUMENTICONID = "DocumentIconID"; - public static final java.lang.String PROPNAME_URLPATTERN = "URLPattern"; - public static final java.lang.String PROPNAME_EXTENSIONS = "Extensions"; - // ... +6.y - public static final java.lang.String PROPNAME_UIORDER = "UIOrder"; - public static final java.lang.String PROPNAME_PREFERREDFILTER = "PreferredFilter"; - public static final java.lang.String PROPNAME_DETECTSERVICE = "DetectService"; - public static final java.lang.String PROPNAME_FRAMELOADER = "FrameLoader"; - public static final java.lang.String PROPNAME_CONTENTHANDLER = "ContentHandler"; - - // filter - public static final java.lang.String PROPNAME_DOCUMENTSERVICE = "DocumentService"; - public static final java.lang.String PROPNAME_FILEFORMATVERSION = "FileFormatVersion"; - public static final java.lang.String PROPNAME_FILTERSERVICE = "FilterService"; - public static final java.lang.String PROPNAME_FLAGS = "Flags"; - public static final java.lang.String PROPNAME_ORDER = "Order"; // -6.y - public static final java.lang.String PROPNAME_TEMPLATENAME = "TemplateName"; - public static final java.lang.String PROPNAME_TYPE = "Type"; - public static final java.lang.String PROPNAME_UICOMPONENT = "UIComponent"; - public static final java.lang.String PROPNAME_USERDATA = "UserData"; - - // frame loader / detect services / content handler - public static final java.lang.String PROPNAME_TYPES = "Types"; - - //___________________________________________ - // private const - - private static final java.lang.String FILTERSERVICE_NATIVEWARPPER = "com.sun.star.filter.NativeFilterWrapper"; - private static final java.lang.String GENERIC_DETECTSERVICE = "com.sun.star.comp.office.FrameLoader"; - - /** its the name of the cfg set, which contains all types. */ - private static final java.lang.String CFGNODE_TYPES = "Types"; - - /** its the name of the cfg set, which contains all filters. */ - private static final java.lang.String CFGNODE_FILTERS = "Filters"; - - /** its the name of the cfg set, which contains all detect services. */ - private static final java.lang.String CFGNODE_DETECTSERVICES = "DetectServices"; - - /** its the name of the cfg set, which contains all frame loaders. */ - private static final java.lang.String CFGNODE_FRAMELOADERS = "FrameLoaders"; - - /** its the name of the cfg set, which contains all content handlers. */ - private static final java.lang.String CFGNODE_CONTENTHANDLERS = "ContentHandlers"; - - // names for filter flags - private static final java.lang.String FLAGNAME_3RDPARTYFILTER = "3RDPARTYFILTER"; - private static final java.lang.String FLAGNAME_ALIEN = "ALIEN"; - private static final java.lang.String FLAGNAME_ASYNCHRON = "ASYNCHRON"; - private static final java.lang.String FLAGNAME_BROWSERPREFERRED = "BROWSERPREFERRED"; - private static final java.lang.String FLAGNAME_CONSULTSERVICE = "CONSULTSERVICE"; - private static final java.lang.String FLAGNAME_DEFAULT = "DEFAULT"; - private static final java.lang.String FLAGNAME_EXPORT = "EXPORT"; - private static final java.lang.String FLAGNAME_IMPORT = "IMPORT"; - private static final java.lang.String FLAGNAME_INTERNAL = "INTERNAL"; - private static final java.lang.String FLAGNAME_NOTINCHOOSER = "NOTINCHOOSER"; - private static final java.lang.String FLAGNAME_NOTINFILEDIALOG = "NOTINFILEDIALOG"; - private static final java.lang.String FLAGNAME_NOTINSTALLED = "NOTINSTALLED"; - private static final java.lang.String FLAGNAME_OWN = "OWN"; - private static final java.lang.String FLAGNAME_PACKED = "PACKED"; - private static final java.lang.String FLAGNAME_PREFERRED = "PREFERRED"; - private static final java.lang.String FLAGNAME_READONLY = "READONLY"; - private static final java.lang.String FLAGNAME_TEMPLATE = "TEMPLATE"; - private static final java.lang.String FLAGNAME_TEMPLATEPATH = "TEMPLATEPATH"; - private static final java.lang.String FLAGNAME_USESOPTIONS = "USESOPTIONS"; - - private static final java.lang.String FLAGNAME_COMBINED = "COMBINED"; - private static final java.lang.String FLAGNAME_SUPPORTSSELECTION= "SUPPORTSSELECTION"; - - // values for filter flags - private static final int FLAGVAL_3RDPARTYFILTER = 0x00080000; // 524288 - private static final int FLAGVAL_ALIEN = 0x00000040; // 64 - private static final int FLAGVAL_ALL = 0xffffffff; // 4294967295 - private static final int FLAGVAL_ASYNCHRON = 0x00004000; // 16384 - private static final int FLAGVAL_BROWSERPREFERRED = 0x00400000; // 4194304 - private static final int FLAGVAL_CONSULTSERVICE = 0x00040000; // 262144 - private static final int FLAGVAL_DEFAULT = 0x00000100; // 256 - private static final int FLAGVAL_EXPORT = 0x00000002; // 2 - private static final int FLAGVAL_IMPORT = 0x00000001; // 1 - private static final int FLAGVAL_INTERNAL = 0x00000008; // 8 - private static final int FLAGVAL_NOTINCHOOSER = 0x00002000; // 8192 - private static final int FLAGVAL_NOTINFILEDIALOG = 0x00001000; // 4096 - private static final int FLAGVAL_NOTINSTALLED = 0x00020000; // 131072 - private static final int FLAGVAL_OWN = 0x00000020; // 32 - private static final int FLAGVAL_PACKED = 0x00100000; // 1048576 - private static final int FLAGVAL_PREFERRED = 0x10000000; // 268435456 - private static final int FLAGVAL_READONLY = 0x00010000; // 65536 - private static final int FLAGVAL_TEMPLATE = 0x00000004; // 4 - private static final int FLAGVAL_TEMPLATEPATH = 0x00000010; // 16 - private static final int FLAGVAL_USESOPTIONS = 0x00000080; // 128 - - private static final int FLAGVAL_COMBINED = 0x00800000; // ... - private static final int FLAGVAL_SUPPORTSSELECTION = 0x00000400; // 1024 - - //___________________________________________ - // member - - /** list of all located types. - * Format: [string,HashMap] - */ - private java.util.HashMap m_lTypes; - - /** list of all located filters. - * Format: [string,HashMap] - */ - private java.util.HashMap m_lFilters; - - /** list of all located detect services. - * Format: [string,HashMap] - */ - private java.util.HashMap m_lDetectServices; - - /** list of all located frame loader. - * Format: [string,HashMap] - */ - private java.util.HashMap m_lFrameLoaders; - - /** list of all located content handler. - * Format: [string,HashMap] - */ - private java.util.HashMap m_lContentHandlers; - - /** contains all analyzed relations between - * filters and types. The key is an internal - * type name (can be used as reference into the - * list m_lTypes) and the value is a Vector of all - * internal filter names, which are registered for - * this type. - * Format: [string, Vector] - */ - private java.util.HashMap m_lFilterToTypeRegistrations; - - private int m_nDoubleRegisteredFilters; - private int m_nTypesForFilters; - private int m_nTypesForDetectServices; - private int m_nTypesForFrameLoaders; - private int m_nTypesForContentHandlers; - - /** can be used to log different informations. */ - private Logger m_aDebug; - - //___________________________________________ - // interface - - /** standard ctor. - * - * Initialize an empty cache instance. You have to use - * on of the fromXXX() methods to fill it from different - * sources with content. - */ - public Cache(Logger aDebug) - { - reset(); - m_aDebug = aDebug; - } - - //___________________________________________ - - /** free memory and set default values on all members. - */ - public synchronized void reset() - { - m_lTypes = new java.util.HashMap(); - m_lFilters = new java.util.HashMap(); - m_lFrameLoaders = new java.util.HashMap(); - m_lDetectServices = new java.util.HashMap(); - m_lContentHandlers = new java.util.HashMap(); - m_lFilterToTypeRegistrations = new java.util.HashMap(); - m_aDebug = new Logger(); - m_nDoubleRegisteredFilters = 0; - m_nTypesForFilters = 0; - m_nTypesForDetectServices = 0; - m_nTypesForFrameLoaders = 0; - m_nTypesForContentHandlers = 0; - } - - //___________________________________________ - - /** converts a string representation of an xml format - * to its int value, which must be used at some interface - * methods of this cache. - * - * If the given string does not match to any well known format, - * the return value will be FORMAT_UNSUPPORTED. The calli have to - * check that. Otherwhise a called interface method at this cache - * instance will be rejected by an exception! - * - * @param sFormat - * the string representation - * Must be one of our public const values from type CMDVAL_FORMAT_xxx. - * - * @return [int] - * the int representation. - * Will be one of our public const values from type FORMAT_xxx. - */ - public static int mapFormatString2Format(java.lang.String sFormat) - { - int nFormat = FORMAT_UNSUPPORTED; - if (sFormat.equalsIgnoreCase(CMDVAL_FORMAT_60)) - nFormat = FORMAT_60; - else - if (sFormat.equalsIgnoreCase(CMDVAL_FORMAT_6Y)) - nFormat = FORMAT_6Y; - else - if (sFormat.equalsIgnoreCase(CMDVAL_FORMAT_INTERNAL)) - nFormat = FORMAT_INTERNAL; - return nFormat; - } - - //___________________________________________ - - /** return some statistic values. - * - * Such values can be: - count of container items, - * - ... - * - * @return [java.lang.String] - * a formated string, which contains al statistic data. - */ - public synchronized java.lang.String getStatistics() - { - java.lang.StringBuffer sBuffer = new java.lang.StringBuffer(256); - - sBuffer.append("types = "+m_lTypes.size() +"\n"); - sBuffer.append("filters = "+m_lFilters.size() +"\n"); - sBuffer.append("detect services = "+m_lDetectServices.size() +"\n"); - sBuffer.append("frame loaders = "+m_lFrameLoaders.size() +"\n"); - sBuffer.append("content handler = "+m_lContentHandlers.size() +"\n"); - sBuffer.append("double registered filters = "+m_nDoubleRegisteredFilters+"\n"); - sBuffer.append("types used by filters = "+m_nTypesForFilters +"\n"); - sBuffer.append("types used by detect services = "+m_nTypesForDetectServices +"\n"); - sBuffer.append("types used by frame loaders = "+m_nTypesForFrameLoaders +"\n"); - sBuffer.append("types used by content handlers = "+m_nTypesForContentHandlers+"\n"); - - return sBuffer.toString(); - } - - //___________________________________________ - - /** reset this cache and fill it with new values using the given XML file. - * - * @param aXML - * must be a system file of a suitable XML file, which - * include all neccessary type/filter items. - * - * @param nFormat - * identifies the format of the specified xml file, - * which must be interpreted. - */ - public synchronized void fromXML(java.io.File aXML , - int nFormat) - throws java.lang.Exception - { - // clear this cache - reset(); - - // parse it - javax.xml.parsers.DocumentBuilderFactory aFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance(); - /* Attention: - * This call is important. It force right handling of entities during parsing and(!) - * writing. It let all possible signs for entities or it's quoted representations - * untouched. So this class don't change the original signs of the original file. - * Means: - * <ul> - * <li>(') => (')</li> - * <li>(") => (")</li> - * <li>(>) => (>)</li> - * <li>(<) => (<)</li> - * <li>(>) => (>)</li> - * <li>(&) => (&)</li> - * <li>...</li> - * </ul> - */ - - System.out.println("TODO: must be adapted to java 1.3 :-("); - System.exit(-1); -//TODO_JAVA aFactory.setExpandEntityReferences(false); - - javax.xml.parsers.DocumentBuilder aBuilder = aFactory.newDocumentBuilder(); - org.w3c.dom.Document aDOM = aBuilder.parse(aXML); - org.w3c.dom.Element aRoot = aDOM.getDocumentElement(); - - // step over all sets - java.util.Vector lSetNodes = XMLHelper.extractChildNodesByTagName(aRoot, XMLHelper.XMLTAG_NODE); - java.util.Enumeration it1 = lSetNodes.elements(); - while (it1.hasMoreElements()) - { - // try to find out, which set should be read - org.w3c.dom.Node aSetNode = (org.w3c.dom.Node)it1.nextElement(); - java.lang.String sSetName = XMLHelper.extractNodeAttribByName(aSetNode, XMLHelper.XMLATTRIB_OOR_NAME); - if (sSetName == null) - throw new java.io.IOException("unsupported format: could not extract set name on node ...\n"+aSetNode); - - // map some generic interfaces to the right members! - int eType = -1 ; - java.util.HashMap rMap = null; - - if (sSetName.equals(CFGNODE_TYPES)) - { - eType = E_TYPE; - rMap = m_lTypes; - } - else - if (sSetName.equals(CFGNODE_FILTERS)) - { - eType = E_FILTER; - rMap = m_lFilters; - } - else - if (sSetName.equals(CFGNODE_FRAMELOADERS)) - { - eType = E_FRAMELOADER; - rMap = m_lFrameLoaders; - } - else - if (sSetName.equals(CFGNODE_DETECTSERVICES)) - { - eType = E_DETECTSERVICE; - rMap = m_lDetectServices; - } - else - if (sSetName.equals(CFGNODE_CONTENTHANDLERS)) - { - eType = E_CONTENTHANDLER; - rMap = m_lContentHandlers; - } - else - throw new java.io.IOException("unsupported format: unknown set name [\""+sSetName+"\"] detected on node ...\n"+aSetNode); - - // load all set entries - java.util.Vector lChildNodes = XMLHelper.extractChildNodesByTagName(aSetNode, XMLHelper.XMLTAG_NODE); - java.util.Enumeration it2 = lChildNodes.elements(); - while (it2.hasMoreElements()) - { - org.w3c.dom.Node aChildNode = (org.w3c.dom.Node)it2.nextElement(); - java.lang.String sChildName = XMLHelper.extractNodeAttribByName(aChildNode, XMLHelper.XMLATTRIB_OOR_NAME); - if (sChildName == null) - throw new java.io.IOException("unsupported format: could not extract child node name on node ...\n"+aChildNode); - java.util.HashMap aPropSet = null; - - // Note: Our internal format is different from the source format! - java.util.HashMap aTempSet = XMLHelper.convertNodeToPropSet(aChildNode); - switch(eType) - { - case E_TYPE : - { - aPropSet = Cache.convertTypePropsToInternal(aTempSet, nFormat); - m_aDebug.setDetailedInfo("type [\""+sChildName+"\"] converted to internal format"); - } - break; - - case E_FILTER : - { - aPropSet = Cache.convertFilterPropsToInternal(aTempSet, nFormat); - m_aDebug.setDetailedInfo("filter [\""+sChildName+"\"] converted to internal format"); - } - break; - - case E_DETECTSERVICE : - { - aPropSet = Cache.convertDetectServicePropsToInternal(aTempSet, nFormat); - m_aDebug.setDetailedInfo("detect service [\""+sChildName+"\"] converted to internal format"); - } - break; - - case E_FRAMELOADER : - { - aPropSet = Cache.convertFrameLoaderPropsToInternal(aTempSet, nFormat); - m_aDebug.setDetailedInfo("frame loader [\""+sChildName+"\"] converted to internal format"); - } - break; - - case E_CONTENTHANDLER : - { - aPropSet = Cache.convertContentHandlerPropsToInternal(aTempSet, nFormat); - m_aDebug.setDetailedInfo("content handler [\""+sChildName+"\"] converted to internal format"); - } - break; - } - m_aDebug.setDetailedInfo("props = "+aTempSet); - rMap.put(sChildName, aPropSet); - } - } - } - - //___________________________________________ - - /** create some hml views of the current content of this cache. - * - * The given directory is used to create different html files - * there. Every of them show another aspect of this cache. - * E.g.: - all type/filter properties - * - relation ships between types/filters/loaders etc. - * - * @param aDirectory - * points to a system directory, which - * can be used completely(!) to generate - * the results there. - * - * @param nFormat - * specify in which context the cache items should be - * interpreted. - */ - public synchronized void toHTML(java.io.File aDirectory, - int nFormat , - java.lang.String sEncoding ) - throws java.lang.Exception - { - if (nFormat != FORMAT_6Y) - throw new java.lang.Exception("HTML views are supported for the new 6.y format only yet."); - - java.lang.StringBuffer sRelationView = new java.lang.StringBuffer(1000); - sRelationView.append("<html><header><title>Relation View</title></header><body>"); - sRelationView.append("<table border=1>"); - sRelationView.append("<tr><td><b>type</b></td><td><b>detect service</b></td><td><b>preferred filter</b></td><td><b>frame loader</b></td><td><b>content handler</b></td></tr>"); - - java.util.Iterator aIt = m_lTypes.keySet().iterator(); - while (aIt.hasNext()) - { - java.lang.String sType = (java.lang.String)aIt.next(); - java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sType); - - sRelationView.append("<tr>"); - sRelationView.append("<td>"+sType+"</td>"); - - java.lang.String sVal = (java.lang.String)aType.get(PROPNAME_DETECTSERVICE); - if (sVal == null || sVal.length()<1) - sRelationView.append("<td> - </td>"); - else - sRelationView.append("<td>"+sVal+"</td>"); - - sVal = (java.lang.String)aType.get(PROPNAME_PREFERREDFILTER); - if (sVal == null || sVal.length()<1) - sRelationView.append("<td> - </td>"); - else - sRelationView.append("<td>"+sVal+"</td>"); - - sVal = (java.lang.String)aType.get(PROPNAME_FRAMELOADER); - if (sVal == null || sVal.length()<1) - sRelationView.append("<td> - </td>"); - else - sRelationView.append("<td>"+sVal+"</td>"); - - sVal = (java.lang.String)aType.get(PROPNAME_CONTENTHANDLER); - if (sVal == null || sVal.length()<1) - sRelationView.append("<td> - </td>"); - else - sRelationView.append("<td>"+sVal+"</td>"); - - sRelationView.append("</tr>"); - } - - sRelationView.append("</table>"); - sRelationView.append("</body>"); - - FileHelper.writeEncodedBufferToFile(new java.io.File(aDirectory, "relation_view.html"), sEncoding, false, sRelationView); - - java.util.HashMap lFilters2TypeRegistration = new java.util.HashMap(); - aIt = m_lFilters.keySet().iterator(); - while (aIt.hasNext()) - { - java.lang.String sFilter = (java.lang.String)aIt.next(); - java.util.HashMap aFilter = (java.util.HashMap)m_lFilters.get(sFilter); - java.lang.String sType = (java.lang.String)aFilter.get(PROPNAME_TYPE); - - java.util.Vector lFilters = (java.util.Vector)lFilters2TypeRegistration.get(sType); - if (lFilters == null) - lFilters = new java.util.Vector(); - lFilters.add(sFilter); - lFilters2TypeRegistration.put(sType, lFilters); - } - - java.lang.StringBuffer sType2FiltersView = new java.lang.StringBuffer(1000); - sType2FiltersView.append("<html><header><title>Type2Filters View</title></header><body>"); - sType2FiltersView.append("<table border=1>"); - sType2FiltersView.append("<tr><td><b>type</b></td><td><b>filters</b></td></tr>"); - - aIt = lFilters2TypeRegistration.keySet().iterator(); - while (aIt.hasNext()) - { - java.lang.String sType = (java.lang.String)aIt.next(); - java.util.Vector lFilters = (java.util.Vector)lFilters2TypeRegistration.get(sType); - - sType2FiltersView.append("<tr><td>"+sType+"</td><td>"); - java.util.Enumeration aEn = lFilters.elements(); - while(aEn.hasMoreElements()) - sType2FiltersView.append(aEn.nextElement()+"<br>"); - sType2FiltersView.append("</td></tr>"); - } - - sType2FiltersView.append("</table>"); - sType2FiltersView.append("</body>"); - - FileHelper.writeEncodedBufferToFile(new java.io.File(aDirectory, "type2filters_view.html"), sEncoding, false, sType2FiltersView); - } - - //___________________________________________ - - /** converts all items of this cache to its xml representation - * and write it to the given file. - * - * @param aXML - * the target file for output. - * - * @param nFormat - * the requested xml format. - * see const values FORMAT_xxx too. - * - * @param sEncoding - * specify the file encoding for the generated xml file. - * - * @throws [java.lang.Exception] - * if something fail during convertion. - */ - public synchronized void toXML(java.io.File aXML , - int nFormat , - java.lang.String sEncoding) - throws java.lang.Exception - { - java.lang.StringBuffer sXML = new java.lang.StringBuffer(500000); - - for (int i=0; i<5; ++i) - { - // define right sub container - java.lang.String sSetName = null; - java.util.HashMap rMap = null; - int eType = -1; - - switch(i) - { - case 0 : - { - sSetName = CFGNODE_TYPES; - rMap = m_lTypes; - eType = E_TYPE; - } - break; - - case 1 : - { - sSetName = CFGNODE_FILTERS; - rMap = m_lFilters; - eType = E_FILTER; - } - break; - - case 2 : - { - sSetName = CFGNODE_DETECTSERVICES; - rMap = m_lDetectServices; - eType = E_DETECTSERVICE; - } - break; - - case 3 : - { - sSetName = CFGNODE_FRAMELOADERS; - rMap = m_lFrameLoaders; - eType = E_FRAMELOADER; - } - break; - - case 4 : - { - sSetName = CFGNODE_CONTENTHANDLERS; - rMap = m_lContentHandlers; - eType = E_CONTENTHANDLER; - } - break; - } - - // generate set - sXML.append("<node oor:name=\""+sSetName+"\" oor:op=\"replace\">\n"); - java.util.Iterator it = rMap.keySet().iterator(); - while(it.hasNext()) - { - java.lang.String sItem = (java.lang.String)it.next(); - sXML.append("<node oor:name=\""+sItem+"\" oor:op=\"replace\">\n"); - sXML.append(getItemAsXML(eType, sItem, nFormat)); - sXML.append("</node>\n"); - } - sXML.append("</node>\n"); - } - - java.io.FileOutputStream aStream = new java.io.FileOutputStream(aXML.getAbsolutePath(), false); - java.io.OutputStreamWriter aWriter = new java.io.OutputStreamWriter(aStream, sEncoding); - java.lang.String sOut = sXML.toString(); - aWriter.write(sOut, 0, sOut.length()); - aWriter.flush(); - aWriter.close(); - } - - //___________________________________________ - - /** converts a type property set from internal format - * to an external one. - * - * @param aMap - * points to the item, which should be converted. - * - * @param nFormat - * specify the requested output format. - * - * @return [java.util.HashMap] - * contains the properties in the requested format. - * - * @throws [java.lang.Exception - * if something fail during convertion. - */ - private static java.util.HashMap convertTypePropsToExternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - java.util.HashMap aResultMap = new java.util.HashMap(); - // copy Name property ... if it exists! - if (aMap.containsKey(PROPNAME_NAME)) - aResultMap.put(PROPNAME_NAME, aMap.get(PROPNAME_NAME)); - switch(nFormat) - { - //----------------------------------- - case FORMAT_60 : - { - // copy UIName property unchanged - aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME)); - - // ignore properties "UIOrder", "PreferredFilter", "DetectService" - // They are not supported for 6.0 types. - - // pack all other properties to one "Data" string value - java.lang.StringBuffer sData = new java.lang.StringBuffer(256); - - sData.append(aMap.get(PROPNAME_PREFERRED)); - sData.append(","); - sData.append(aMap.get(PROPNAME_MEDIATYPE)); - sData.append(","); - sData.append(aMap.get(PROPNAME_CLIPBOARDFORMAT)); - sData.append(","); - - java.util.Vector lList = (java.util.Vector)aMap.get(PROPNAME_URLPATTERN); - int c = lList.size(); - int i = 0; - for (i=0; i<c; ++i) - { - sData.append(lList.elementAt(i)); - if (i<(c-1)) - sData.append(";"); - } - - lList = (java.util.Vector)aMap.get(PROPNAME_EXTENSIONS); - c = lList.size(); - for (i=0; i<c; ++i) - { - sData.append(lList.elementAt(i)); - if (i<(c-1)) - sData.append(";"); - } - - sData.append(","); - sData.append(aMap.get(PROPNAME_DOCUMENTICONID)); - sData.append(","); - - aResultMap.put(PROPNAME_DATA, sData.toString()); - } - break; - - //----------------------------------- - case FORMAT_6Y : - { - // copy all supported properties directly - aResultMap.put(PROPNAME_PREFERRED , aMap.get(PROPNAME_PREFERRED )); - aResultMap.put(PROPNAME_MEDIATYPE , aMap.get(PROPNAME_MEDIATYPE )); - aResultMap.put(PROPNAME_URLPATTERN , aMap.get(PROPNAME_URLPATTERN )); - aResultMap.put(PROPNAME_EXTENSIONS , aMap.get(PROPNAME_EXTENSIONS )); - aResultMap.put(PROPNAME_UINAME , aMap.get(PROPNAME_UINAME )); - aResultMap.put(PROPNAME_PREFERREDFILTER, aMap.get(PROPNAME_PREFERREDFILTER)); - aResultMap.put(PROPNAME_DETECTSERVICE , aMap.get(PROPNAME_DETECTSERVICE )); - aResultMap.put(PROPNAME_CLIPBOARDFORMAT, aMap.get(PROPNAME_CLIPBOARDFORMAT)); - aResultMap.put(PROPNAME_UIORDER , aMap.get(PROPNAME_UIORDER )); - /* REMOVED! - aResultMap.put(PROPNAME_DOCUMENTICONID , aMap.get(PROPNAME_DOCUMENTICONID )); - */ - } - break; - - //----------------------------------- - default : - throw new java.lang.Exception("unknown format"); - } - - return aResultMap; - } - - //___________________________________________ - - /** converts a filter property set from internal format - * to an external one. - * - * @param aMap - * points to the item, which should be converted. - * - * @param nFormat - * specify the requested output format. - * - * @return [java.util.HashMap] - * contains the properties in the requested format. - * - * @throws [java.lang.Exception - * if something fail during convertion. - */ - private static java.util.HashMap convertFilterPropsToExternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - java.util.HashMap aResultMap = new java.util.HashMap(); - // copy Name property ... if it exists! - if (aMap.containsKey(PROPNAME_NAME)) - aResultMap.put(PROPNAME_NAME, aMap.get(PROPNAME_NAME)); - switch(nFormat) - { - //----------------------------------- - case FORMAT_60 : - { - // copy UIName property unchanged! - aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME)); - - // but pack all other properties - java.lang.StringBuffer sData = new java.lang.StringBuffer(256); - - sData.append(aMap.get(PROPNAME_ORDER)); - sData.append(","); - sData.append(aMap.get(PROPNAME_TYPE)); - sData.append(","); - sData.append(aMap.get(PROPNAME_DOCUMENTSERVICE)); - sData.append(","); - sData.append(aMap.get(PROPNAME_FILTERSERVICE)); - sData.append(","); - sData.append(aMap.get(PROPNAME_FLAGS)); - sData.append(","); - java.util.Vector lList = (java.util.Vector)aMap.get(PROPNAME_USERDATA); - int c = lList.size(); - int i = 0; - for (i=0; i<c; ++i) - { - sData.append(lList.elementAt(i)); - if (i<(c-1)) - sData.append(";"); - } - sData.append(","); - sData.append(aMap.get(PROPNAME_FILEFORMATVERSION)); - sData.append(","); - sData.append(aMap.get(PROPNAME_TEMPLATENAME)); - sData.append(","); - sData.append(aMap.get(PROPNAME_UICOMPONENT)); - sData.append(","); - - aResultMap.put(PROPNAME_DATA, sData.toString()); - } - break; - - //----------------------------------- - case FORMAT_6Y : - { - // supress "Order" property. - // Will be moved to type entries in 6.y version! - - // supress "UIName" property. - // Only type entries will be localized in 6.y version! - /* TODO make it configurable :-) */ - aResultMap.put(PROPNAME_UINAME , aMap.get(PROPNAME_UINAME )); - - // copy all supported properties directly - aResultMap.put(PROPNAME_TYPE , aMap.get(PROPNAME_TYPE )); - aResultMap.put(PROPNAME_DOCUMENTSERVICE , aMap.get(PROPNAME_DOCUMENTSERVICE )); - aResultMap.put(PROPNAME_FILTERSERVICE , aMap.get(PROPNAME_FILTERSERVICE )); - aResultMap.put(PROPNAME_USERDATA , aMap.get(PROPNAME_USERDATA )); - aResultMap.put(PROPNAME_FILEFORMATVERSION, aMap.get(PROPNAME_FILEFORMATVERSION)); - aResultMap.put(PROPNAME_TEMPLATENAME , aMap.get(PROPNAME_TEMPLATENAME )); - aResultMap.put(PROPNAME_UICOMPONENT , aMap.get(PROPNAME_UICOMPONENT )); - - // "Flags" will be converted from internal format [int] to - // the 6.y format [string-list]! - java.lang.Integer nFlags = (java.lang.Integer)aMap.get(PROPNAME_FLAGS); - java.util.Vector lFlags = Cache.convertFilterFlagValues2Names(nFlags); - aResultMap.put(PROPNAME_FLAGS, lFlags); - } - break; - - //----------------------------------- - default : - throw new java.lang.Exception("unknown format"); - } - - return aResultMap; - } - - //___________________________________________ - - /** converts a detect service property set from internal format - * to an external one. - * - * @param aMap - * points to the item, which should be converted. - * - * @param nFormat - * specify the requested output format. - * - * @return [java.util.HashMap] - * contains the properties in the requested format. - * - * @throws [java.lang.Exception - * if something fail during convertion. - */ - private static java.util.HashMap convertDetectServicePropsToExternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - java.util.HashMap aResultMap = null; - - switch(nFormat) - { - //----------------------------------- - case FORMAT_60 : - { - // no changes! - aResultMap = aMap; - } - break; - - //----------------------------------- - case FORMAT_6Y : - { - // remove localized name - aResultMap = aMap; - aResultMap.remove(PROPNAME_UINAME); - } - break; - - //----------------------------------- - default : - throw new java.lang.Exception("unknown format"); - } - - return aResultMap; - } - - private static java.util.HashMap convertFrameLoaderPropsToExternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - java.util.HashMap aResultMap = null; - - switch(nFormat) - { - //----------------------------------- - case FORMAT_60 : - { - // no changes! - aResultMap = aMap; - } - break; - - //----------------------------------- - case FORMAT_6Y : - { - // remove localized name - aResultMap = aMap; - aResultMap.remove(PROPNAME_UINAME); - } - break; - - //----------------------------------- - default : - throw new java.lang.Exception("unknown format"); - } - - return aResultMap; - } - - private static java.util.HashMap convertContentHandlerPropsToExternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - java.util.HashMap aResultMap = null; - - switch(nFormat) - { - //----------------------------------- - case FORMAT_60 : - { - // no changes! - aResultMap = aMap; - } - break; - - //----------------------------------- - case FORMAT_6Y : - { - // remove localized name - aResultMap = aMap; - aResultMap.remove(PROPNAME_UINAME); - } - break; - - //----------------------------------- - default : - throw new java.lang.Exception("unknown format"); - } - - return aResultMap; - } - - //___________________________________________ - - /** converts a type property set (using an external format) to - * our internal cache format. - * - * Especialy the data format string will be expanded - * to its real properties. - * - * Schema: - * aMap["UIName"] => aExpandedMap["UIName"] - * aMap["Data" ] => aExpandedMap["Preferred" ], aExpandedMap["MediaType"] etc. ... - * - * @param aMap - * points to the item, which should be converted. - - * @param nFormat - * specify the external format. - * - * @return [java.util.HashMap] - * The new map in internal format. - */ - private static java.util.HashMap convertTypePropsToInternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - java.util.HashMap aResultMap = new java.util.HashMap(); - // copy Name property ... if it exists! - if (aMap.containsKey(PROPNAME_NAME)) - aResultMap.put(PROPNAME_NAME, aMap.get(PROPNAME_NAME)); - switch(nFormat) - { - //----------------------------------- - case FORMAT_60 : - { - // copy UIName property unchanged! - aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME)); - - // generate new property "UIOrder" - // Its the moved property "Order" of filters for versions >= 6.y! - aResultMap.put(PROPNAME_UIORDER, new java.lang.Integer(0)); - - // generate new property "PreferredFilter" - // Its a the moved filter flag "Preferred" for versions >= 6.y! - aResultMap.put(PROPNAME_PREFERREDFILTER, new java.lang.String()); - - // generate new property "DetectService" - // Every type know its detector diretcly from now. No search - // will be necessary any longer. - aResultMap.put(PROPNAME_DETECTSERVICE, new java.lang.String()); - - // analyze the Data property of the original map - // and copy its results (means all expanded properties) - // to the result map. - java.lang.String sDataVal = (java.lang.String)aMap.get(PROPNAME_DATA); - java.util.Vector lTokens = Cache.splitTokenString(sDataVal, ","); - - int t = 0; - java.util.Enumeration it = lTokens.elements(); - while (it.hasMoreElements()) - { - java.lang.String sToken = (java.lang.String)it.nextElement(); - switch(t) - { - case 0 : - aResultMap.put(PROPNAME_PREFERRED, new java.lang.Boolean(sToken)); - break; - case 1 : - aResultMap.put(PROPNAME_MEDIATYPE, sToken); - break; - case 2 : - { - /*HACK ersetze %20 mit " " ...*/ - int ni = sToken.indexOf("%20"); - if (ni!=-1) - { - java.lang.String sPatch = sToken.substring(0,ni) + " " + sToken.substring(ni+3); - sToken = sPatch; - } - aResultMap.put(PROPNAME_CLIPBOARDFORMAT, sToken); - } - break; - case 3 : - aResultMap.put(PROPNAME_URLPATTERN, Cache.splitTokenString(sToken, ";")); - break; - case 4 : - aResultMap.put(PROPNAME_EXTENSIONS, Cache.splitTokenString(sToken, ";")); - break; - case 5 : - aResultMap.put(PROPNAME_DOCUMENTICONID, new java.lang.Integer(sToken)); - break; - default : - throw new java.lang.Exception("unsupported format for data value of a type \""+aMap.get(PROPNAME_NAME)+"\" detected."); - } - ++t; - } - } - break; - - //----------------------------------- - case FORMAT_6Y : - { - // copy all supported properties directly - aResultMap.put(PROPNAME_PREFERRED , aMap.get(PROPNAME_PREFERRED )); - aResultMap.put(PROPNAME_MEDIATYPE , aMap.get(PROPNAME_MEDIATYPE )); - aResultMap.put(PROPNAME_CLIPBOARDFORMAT, aMap.get(PROPNAME_CLIPBOARDFORMAT)); - aResultMap.put(PROPNAME_URLPATTERN , aMap.get(PROPNAME_URLPATTERN )); - aResultMap.put(PROPNAME_EXTENSIONS , aMap.get(PROPNAME_EXTENSIONS )); - aResultMap.put(PROPNAME_DOCUMENTICONID , aMap.get(PROPNAME_DOCUMENTICONID )); - aResultMap.put(PROPNAME_UINAME , aMap.get(PROPNAME_UINAME )); - aResultMap.put(PROPNAME_UIORDER , aMap.get(PROPNAME_UIORDER )); - aResultMap.put(PROPNAME_PREFERREDFILTER, aMap.get(PROPNAME_PREFERREDFILTER)); - aResultMap.put(PROPNAME_DETECTSERVICE , aMap.get(PROPNAME_DETECTSERVICE )); - } - break; - - //----------------------------------- - default : - throw new java.lang.Exception("unknown format"); - } - - return aResultMap; - } - - //___________________________________________ - - /** converts a filter property set (using an external format) to - * our internal cache format. - * - * Especialy the data format string will be expanded - * to its real properties. - * - * Schema: - * aMap["UIName"] => aExpandedMap["UIName"] - * aMap["Data" ] => aExpandedMap["Order" ], aExpandedMap["Flags"] etc. ... - * - * @param aMap - * points to the item, which should be converted. - * - * @param nFormat - * specify the external format. - * - * @return [java.util.HashMap] - * The new map in internal format. - */ - private static java.util.HashMap convertFilterPropsToInternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - java.util.HashMap aResultMap = new java.util.HashMap(); - // copy Name property ... if it exists! - if (aMap.containsKey(PROPNAME_NAME)) - aResultMap.put(PROPNAME_NAME, aMap.get(PROPNAME_NAME)); - switch(nFormat) - { - //----------------------------------- - case FORMAT_60 : - { - // copy UIName property - aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME)); - - // analyze the Data property of the original map - // and copy its results (means all expanded properties) - // to the result map. - java.lang.String sDataVal = (java.lang.String)aMap.get(PROPNAME_DATA); - java.util.Vector lTokens = Cache.splitTokenString(sDataVal, ","); - - int t = 0; - java.util.Enumeration it = lTokens.elements(); - while (it.hasMoreElements()) - { - java.lang.String sToken = (java.lang.String)it.nextElement(); - switch(t) - { - case 0 : - aResultMap.put(PROPNAME_ORDER, new java.lang.Integer(sToken)); - break; - case 1 : - aResultMap.put(PROPNAME_TYPE, sToken); - break; - case 2 : - aResultMap.put(PROPNAME_DOCUMENTSERVICE, sToken); - break; - case 3 : - aResultMap.put(PROPNAME_FILTERSERVICE, sToken); - break; - case 4 : - aResultMap.put(PROPNAME_FLAGS, new java.lang.Integer(sToken)); - break; - case 5 : - aResultMap.put(PROPNAME_USERDATA, Cache.splitTokenString(sToken, ";")); - break; - case 6 : - aResultMap.put(PROPNAME_FILEFORMATVERSION, new java.lang.Integer(sToken)); - break; - case 7 : - aResultMap.put(PROPNAME_TEMPLATENAME, sToken); - break; - case 8 : - aResultMap.put(PROPNAME_UICOMPONENT, sToken); - break; - default : - throw new java.lang.Exception("unsupported format for data value of a filter detected."); - } - ++t; - } - - // its an optional property :-) - if (!aResultMap.containsKey(PROPNAME_TEMPLATENAME)) - aResultMap.put(PROPNAME_TEMPLATENAME, new java.lang.String("")); - - // its an optional property :-) - if (!aResultMap.containsKey(PROPNAME_UICOMPONENT)) - aResultMap.put(PROPNAME_UICOMPONENT, new java.lang.String("")); - } - break; - - //----------------------------------- - case FORMAT_6Y : - { - // "Order" does not exist for 6.y versions! Use default. - aResultMap.put(PROPNAME_ORDER, new java.lang.Integer(0)); - - // "UIName" property does not exist for 6.y versions! use default. - /* TODO make it configurable :-) */ - aResultMap.put(PROPNAME_UINAME, aMap.get(PROPNAME_UINAME)); - //aResultMap.put(PROPNAME_UINAME, new java.util.HashMap()); - - // "Flags" must be converted from names to its values - java.util.Vector lFlags = (java.util.Vector)aMap.get(PROPNAME_FLAGS); - java.lang.Integer nFlags = Cache.convertFilterFlagNames2Values(lFlags); - aResultMap.put(PROPNAME_FLAGS, nFlags); - - // copy all direct supported properties - aResultMap.put(PROPNAME_TYPE , aMap.get(PROPNAME_TYPE )); - aResultMap.put(PROPNAME_DOCUMENTSERVICE , aMap.get(PROPNAME_DOCUMENTSERVICE )); - aResultMap.put(PROPNAME_FILTERSERVICE , aMap.get(PROPNAME_ORDER )); - aResultMap.put(PROPNAME_USERDATA , aMap.get(PROPNAME_USERDATA )); - aResultMap.put(PROPNAME_FILEFORMATVERSION, aMap.get(PROPNAME_FILEFORMATVERSION)); - aResultMap.put(PROPNAME_TEMPLATENAME , aMap.get(PROPNAME_TEMPLATENAME )); - aResultMap.put(PROPNAME_UICOMPONENT , aMap.get(PROPNAME_UICOMPONENT )); - } - break; - - //----------------------------------- - default : - throw new java.lang.Exception("unknown format"); - } - - return aResultMap; - } - - private static java.util.HashMap convertDetectServicePropsToInternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - /*FIXME*/ - java.util.HashMap aResultMap = aMap; - return aResultMap; - } - - private static java.util.HashMap convertFrameLoaderPropsToInternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - /*FIXME*/ - java.util.HashMap aResultMap = aMap; - return aResultMap; - } - - private static java.util.HashMap convertContentHandlerPropsToInternal(java.util.HashMap aMap , - int nFormat) - throws java.lang.Exception - { - /*FIXME*/ - java.util.HashMap aResultMap = aMap; - return aResultMap; - } - - //___________________________________________ - - /** converts filter flag names to its int representation. - * - * @param lFlags - * a list of flag names. - * - * @return [java.lang.Integer] - * an integer field of all set flags. - * - * @throws [java.lang.Exception] - * for unsupported flags or empty flag fields! - */ - private static java.lang.Integer convertFilterFlagNames2Values(java.util.Vector lFlags) - throws java.lang.Exception - { - int nFlags = 0; - java.util.Enumeration it = lFlags.elements(); - while(it.hasMoreElements()) - { - java.lang.String sFlagName = (java.lang.String)it.nextElement(); - - if (sFlagName.equals(FLAGNAME_3RDPARTYFILTER)) - nFlags |= FLAGVAL_3RDPARTYFILTER; - else - if (sFlagName.equals(FLAGNAME_ALIEN)) - nFlags |= FLAGVAL_ALIEN; - else - if (sFlagName.equals(FLAGNAME_ASYNCHRON)) - nFlags |= FLAGVAL_ASYNCHRON; - else - if (sFlagName.equals(FLAGNAME_BROWSERPREFERRED)) - nFlags |= FLAGVAL_BROWSERPREFERRED; - else - if (sFlagName.equals(FLAGNAME_CONSULTSERVICE)) - nFlags |= FLAGVAL_CONSULTSERVICE; - else - if (sFlagName.equals(FLAGNAME_DEFAULT)) - nFlags |= FLAGVAL_DEFAULT; - else - if (sFlagName.equals(FLAGNAME_EXPORT)) - nFlags |= FLAGVAL_EXPORT; - else - if (sFlagName.equals(FLAGNAME_IMPORT)) - nFlags |= FLAGVAL_IMPORT; - else - if (sFlagName.equals(FLAGNAME_INTERNAL)) - nFlags |= FLAGVAL_INTERNAL; - else - if (sFlagName.equals(FLAGNAME_NOTINCHOOSER)) - nFlags |= FLAGVAL_NOTINCHOOSER; - else - if (sFlagName.equals(FLAGNAME_NOTINFILEDIALOG)) - nFlags |= FLAGVAL_NOTINFILEDIALOG; - else - if (sFlagName.equals(FLAGNAME_NOTINSTALLED)) - nFlags |= FLAGVAL_NOTINSTALLED; - else - if (sFlagName.equals(FLAGNAME_OWN)) - nFlags |= FLAGVAL_OWN; - else - if (sFlagName.equals(FLAGNAME_PACKED)) - nFlags |= FLAGVAL_PACKED; - else - if (sFlagName.equals(FLAGNAME_PREFERRED)) - nFlags |= FLAGVAL_PREFERRED; - else - if (sFlagName.equals(FLAGNAME_READONLY)) - nFlags |= FLAGVAL_READONLY; - else - if (sFlagName.equals(FLAGNAME_TEMPLATE)) - nFlags |= FLAGVAL_TEMPLATE; - else - if (sFlagName.equals(FLAGNAME_TEMPLATEPATH)) - nFlags |= FLAGVAL_TEMPLATEPATH; - else - if (sFlagName.equals(FLAGNAME_USESOPTIONS)) - nFlags |= FLAGVAL_USESOPTIONS; - else - if (sFlagName.equals(FLAGNAME_COMBINED)) - nFlags |= FLAGVAL_COMBINED; - else - throw new java.lang.Exception("unsupported filter flag detected: \""+sFlagName+"\""); - } - - if (nFlags == 0) - throw new java.lang.Exception("no filter flags?"); - - return new java.lang.Integer(nFlags); - } - - //___________________________________________ - - /** converts filter flag values to its string representation. - * - * @param nFlags - * the flag field as int value. - * - * @return [java.util.Vector] - * a list of flag names. - * - * @throws [java.lang.Exception] - * for unsupported flags or empty flag fields! - */ - private static java.util.Vector convertFilterFlagValues2Names(java.lang.Integer nFlags) - throws java.lang.Exception - { - java.util.Vector lFlags = new java.util.Vector(); - int field = nFlags.intValue(); - - if (field == 0) - throw new java.lang.Exception("no filter flags?"); - - if((field & FLAGVAL_IMPORT) == FLAGVAL_IMPORT) - lFlags.add(FLAGNAME_IMPORT); - - if((field & FLAGVAL_EXPORT) == FLAGVAL_EXPORT) - lFlags.add(FLAGNAME_EXPORT); - - if((field & FLAGVAL_TEMPLATE) == FLAGVAL_TEMPLATE) - lFlags.add(FLAGNAME_TEMPLATE); - - if((field & FLAGVAL_INTERNAL) == FLAGVAL_INTERNAL) - lFlags.add(FLAGNAME_INTERNAL); - - if((field & FLAGVAL_TEMPLATEPATH) == FLAGVAL_TEMPLATEPATH) - lFlags.add(FLAGNAME_TEMPLATEPATH); - - if((field & FLAGVAL_OWN) == FLAGVAL_OWN) - lFlags.add(FLAGNAME_OWN); - - if((field & FLAGVAL_ALIEN) == FLAGVAL_ALIEN) - lFlags.add(FLAGNAME_ALIEN); - - if((field & FLAGVAL_USESOPTIONS) == FLAGVAL_USESOPTIONS) - lFlags.add(FLAGNAME_USESOPTIONS); - - if((field & FLAGVAL_DEFAULT) == FLAGVAL_DEFAULT) - lFlags.add(FLAGNAME_DEFAULT); - - if((field & FLAGVAL_NOTINFILEDIALOG) == FLAGVAL_NOTINFILEDIALOG) - lFlags.add(FLAGNAME_NOTINFILEDIALOG); - - if((field & FLAGVAL_NOTINCHOOSER) == FLAGVAL_NOTINCHOOSER) - lFlags.add(FLAGNAME_NOTINCHOOSER); - - if((field & FLAGVAL_ASYNCHRON) == FLAGVAL_ASYNCHRON) - lFlags.add(FLAGNAME_ASYNCHRON); - - if((field & FLAGVAL_READONLY) == FLAGVAL_READONLY) - lFlags.add(FLAGNAME_READONLY); - - if((field & FLAGVAL_NOTINSTALLED) == FLAGVAL_NOTINSTALLED) - lFlags.add(FLAGNAME_NOTINSTALLED); - - if((field & FLAGVAL_CONSULTSERVICE) == FLAGVAL_CONSULTSERVICE) - lFlags.add(FLAGNAME_CONSULTSERVICE); - - if((field & FLAGVAL_3RDPARTYFILTER) == FLAGVAL_3RDPARTYFILTER) - lFlags.add(FLAGNAME_3RDPARTYFILTER); - - if((field & FLAGVAL_PACKED) == FLAGVAL_PACKED) - lFlags.add(FLAGNAME_PACKED); - - if((field & FLAGVAL_BROWSERPREFERRED) == FLAGVAL_BROWSERPREFERRED) - lFlags.add(FLAGNAME_BROWSERPREFERRED); - - if((field & FLAGVAL_PREFERRED) == FLAGVAL_PREFERRED) - lFlags.add(FLAGNAME_PREFERRED); - - if((field & FLAGVAL_COMBINED) == FLAGVAL_COMBINED) - lFlags.add(FLAGNAME_COMBINED); - - if((field & FLAGVAL_COMBINED) == FLAGVAL_SUPPORTSSELECTION) - lFlags.add(FLAGNAME_SUPPORTSSELECTION); - - return lFlags; - } - - //___________________________________________ - - /** return a reference to one of our member - * lists for types/filters etc ... - * - * @param eItemType - * specify, which item map is required. - * - * @return [java.util.HashMap] - * a reference(!) to the right member. - * - * @throws [java.lang.Exception] - * if the specified map does not exist. - */ - private java.util.HashMap getItemMap(int eItemType) - throws java.lang.Exception - { - java.util.HashMap rMap = null; - switch(eItemType) - { - case E_TYPE : - rMap = m_lTypes; - break; - - case E_FILTER : - rMap = m_lFilters; - break; - - case E_DETECTSERVICE : - rMap = m_lDetectServices; - break; - - case E_FRAMELOADER : - rMap = m_lFrameLoaders; - break; - - case E_CONTENTHANDLER : - rMap = m_lContentHandlers; - break; - - default: - throw new java.lang.Exception("Invalid item map specified."); - } - return rMap; - } - - //___________________________________________ - - /** return the count of items inside a sub container - * of this cache. - * - * @param eItemType - * specify, which item map is required. - * - * @throws [java.lang.Exception] - * if the specified map does not exist. - */ - public synchronized int getItemCount(int eItemType) - throws java.lang.Exception - { - java.util.HashMap rMap = getItemMap(eItemType); - return rMap.size(); - } - - //___________________________________________ - - /** get a list of all item names of the specified - * sub container. - * - * @param eItemType - * specify, which item map is required. - * - * @throws [java.lang.Exception] - * if the specified map does not exist. - */ - public synchronized java.util.Vector getItemNames(int eItemType) - throws java.lang.Exception - { - java.util.Vector lNames = new java.util.Vector(); - java.util.HashMap rMap = getItemMap(eItemType); - java.util.Iterator it = rMap.keySet().iterator(); - while(it.hasNext()) - lNames.add(it.next()); - return lNames; - } - - //___________________________________________ - - /** get a list of all item names of the specified - * sub coontainer, where items match to given property set. - * - * Note: The given property set must exist at all - * returned items as minimum and every checked property - * value must be equals! Using of reg expressions or - * similar mechanism will not be supported here. - * - * @param eItemType - * specify, which item map is required. - * - * @param aPropSet - * the set of properties, which must - * exist at the returned item as minimum. - * - * @throws [java.lang.Exception] - * if the specified map does not exist. - */ - public synchronized java.util.Vector getMatchedItemNames(int eItemType, - java.util.HashMap aPropSet ) - throws java.lang.Exception - { - java.util.Vector lNames = new java.util.Vector(); - java.util.HashMap rMap = getItemMap(eItemType); - java.util.Iterator it = rMap.keySet().iterator(); - while(it.hasNext()) - { - java.lang.String sItemName = (java.lang.String)it.next(); - java.util.HashMap rItemProps = (java.util.HashMap)rMap.get(sItemName); - - boolean bMatch = Cache.matchPropSet(rItemProps, aPropSet); - if (bMatch) - lNames.add(sItemName); - else - { - java.lang.StringBuffer sBuffer = new java.lang.StringBuffer(1000); - sBuffer.append("entry ["+eItemType+"] \""+sItemName+"\" does not match.\n"); - sBuffer.append("\torg items = {"+rItemProps+"}\n"); - sBuffer.append("\treq items = {"+aPropSet+"}\n"); - - m_aDebug.setDetailedInfo(sBuffer.toString()); - } - } - return lNames; - } - - //___________________________________________ - - /** check if two property sets are equals in its - * shared properties. - * - * Note: Only set properties of the match set will be searched - * inside the original set. And its values must be equals. - * Using of reg expressions or similar mechanism will not - * be supported here. - * - * @param rOrgProps - * the original property set, which should be checked. - * - * @param rMatchProps - * contains the properties, which must be searched - * inside rOrgProps. - * - * @return TRUE if all properties of rMatchProps could be located - * inside rOrgProps. - */ - private static boolean matchPropSet(java.util.HashMap rOrgProps , - java.util.HashMap rMatchProps) - { - java.util.Iterator it = rMatchProps.keySet().iterator(); - while(it.hasNext()) - { - java.lang.String sMatchName = (java.lang.String)it.next(); - java.lang.Object aMatchValue = rMatchProps.get(sMatchName); - - if ( - (!rOrgProps.containsKey(sMatchName) ) || - (!rOrgProps.get(sMatchName).equals(aMatchValue)) - ) - { - return false; - } - } - return true; - } - - //___________________________________________ - - /** return a property set for the queried container item. - * - * @param eItemType - * specify, which item map is required. - * - * @param sItemName - * must be a valid item name of the specified item map. - * - * @return [java.util.HashMap] - * the property set of the queried item. - * Always different from null! - * - * @throws [java.lang.Exception] - * if the specified item does not exists or - * seems to be invalid in general (means null!). - */ - public synchronized java.util.HashMap getItem(int eItemType, - java.lang.String sItemName) - throws java.lang.Exception - { - java.util.HashMap rMap = getItemMap(eItemType); - java.util.HashMap rItem = (java.util.HashMap)rMap.get(sItemName); - if (rItem == null) - throw new java.lang.Exception("Queried item \""+sItemName+"\" does not exist inside this cache."); - return rItem; - } - - //___________________________________________ - - /** return a requested item in XML format. - * - * @param eItemType - * identify the right sub set of this cache - * inside which the requested item should exist. - * e.g. E_TYPE, E_FILTER, ... - * - * @param sItemName - * the name of the request item - * - * @param nXMLFormat - * means the format of the generated xml source. - * - * @return [java.lang.String] - * a xml formated string, which contains all properties - * for this container item. - */ - public synchronized java.lang.String getItemAsXML(int eItemType , - java.lang.String sItemName , - int nXMLFormat) - throws java.lang.Exception - { - // Note: Our internal format must be converted to the target format! - java.util.HashMap rItem = getItem(eItemType, sItemName); - java.util.HashMap rFormatedItem = null; - switch(eItemType) - { - case E_TYPE : - { - rFormatedItem = Cache.convertTypePropsToExternal(rItem, nXMLFormat); - m_aDebug.setGlobalInfo("type to external \""+sItemName+"\""); - } - break; - - case E_FILTER : - { - rFormatedItem = Cache.convertFilterPropsToExternal(rItem, nXMLFormat); - m_aDebug.setGlobalInfo("filter to external \""+sItemName+"\""); - } - break; - - case E_DETECTSERVICE : - { - rFormatedItem = Cache.convertDetectServicePropsToExternal(rItem, nXMLFormat); - m_aDebug.setGlobalInfo("detect service to external \""+sItemName+"\""); - } - break; - - case E_FRAMELOADER : - { - rFormatedItem = Cache.convertFrameLoaderPropsToExternal(rItem, nXMLFormat); - m_aDebug.setGlobalInfo("frame loader to external \""+sItemName+"\""); - } - break; - - case E_CONTENTHANDLER : - { - rFormatedItem = Cache.convertContentHandlerPropsToExternal(rItem, nXMLFormat); - m_aDebug.setGlobalInfo("content handler to external \""+sItemName+"\""); - } - break; - } - - java.lang.StringBuffer sXML = new java.lang.StringBuffer(1000); - int nPrettyTabs = 1; - for (int t=0; t<nPrettyTabs; ++t) - sXML.append("\t"); - sXML.append("<"+XMLHelper.XMLTAG_NODE+" "+XMLHelper.XMLATTRIB_OOR_NAME+"=\""+XMLHelper.encodeHTMLSigns(sItemName)+"\" "+XMLHelper.XMLATTRIB_OOR_OP+"=\""+XMLHelper.XMLATTRIB_OP_REPLACE+"\">\n"); - sXML.append(XMLHelper.convertPropSetToXML(rFormatedItem, nPrettyTabs+1)); - for (int t=0; t<nPrettyTabs; ++t) - sXML.append("\t"); - sXML.append("</"+XMLHelper.XMLTAG_NODE+">\n"); - - return sXML.toString(); - } - - //___________________________________________ - - /** split the given string (using the specified delimiter) - * and return alist of found string tokens. - * - * Note: Against the normal behaviour of the StringTokenizer class - * this method returns empty tokens too. - * E.g: "0,,1" will return "0" - "" - "1" - * - * @param sTokenString - * the string value, which should be analyzed. - * - * @param sDelim - * the delimiter, which will be used to differe between tokens. - * - * @return [java.util.Vector] - * a list of string tokens. Can be empty - but not null! - */ - private static java.util.Vector splitTokenString(java.lang.String sTokenString, - java.lang.String sDelim ) - { - java.util.Vector lTokens = new java.util.Vector(); - java.util.StringTokenizer aTokenizer = new java.util.StringTokenizer(sTokenString, sDelim, true); - boolean bLastWasDelim = false; - - while (aTokenizer.hasMoreTokens()) - { - java.lang.String sToken = aTokenizer.nextToken(); - if (sToken.equals(sDelim)) - { - if (bLastWasDelim) - { - // last token was a delimiter - new one too - // => an empty token must be placed between these - // two delimiters! Add this empty value to the return list. - lTokens.add(""); - } - else - { - // last token was not a delimiter - new one is such delim - // => ignore this delimiter - but save the information, that - // it occurred - bLastWasDelim = true; - } - } - else - { - // new token is no delim - // => Add it to the return list. - lTokens.add(sToken); - // Dont forget to reset this information - so next loop - // will do the right things! - bLastWasDelim = false; - } - } - - return lTokens; - } - - //___________________________________________ - - /** - */ - public synchronized void analyze() - { - m_nDoubleRegisteredFilters = 0; - m_nTypesForFilters = 0; - m_nTypesForDetectServices = 0; - m_nTypesForFrameLoaders = 0; - m_nTypesForContentHandlers = 0; - - // create table of types and all registered filters for such types - // By the way: count all double registrations, where a filter - // uses the same type then another filter. - m_lFilterToTypeRegistrations = new java.util.HashMap(); - java.util.Iterator aIt1 = m_lFilters.keySet().iterator(); - while (aIt1.hasNext()) - { - java.lang.String sFilter = (java.lang.String)aIt1.next(); - java.util.HashMap aFilter = (java.util.HashMap)m_lFilters.get(sFilter); - java.lang.String sType = (java.lang.String)aFilter.get(PROPNAME_TYPE); - - java.util.Vector lFilters = (java.util.Vector)m_lFilterToTypeRegistrations.get(sType); - if (lFilters == null) - lFilters = new java.util.Vector(); - else - ++m_nDoubleRegisteredFilters; - lFilters.add(sFilter); - m_lFilterToTypeRegistrations.put(sType, lFilters); - } - - // count, how many types are used by filters, frame loaders or content handlers - aIt1 = m_lTypes.keySet().iterator(); - while (aIt1.hasNext()) - { - java.lang.String sType = (java.lang.String)aIt1.next(); - - java.util.Iterator aIt2 = m_lFilters.keySet().iterator(); - while (aIt2.hasNext()) - { - java.lang.String sItem = (java.lang.String)aIt2.next(); - java.util.HashMap aItem = (java.util.HashMap)m_lFilters.get(sItem); - java.lang.String sTypeReg = (java.lang.String)aItem.get(PROPNAME_TYPE); - - if (sTypeReg.equals(sType)) - { - ++m_nTypesForFilters; - break; - } - } - - aIt2 = m_lDetectServices.keySet().iterator(); - while (aIt2.hasNext()) - { - java.lang.String sItem = (java.lang.String)aIt2.next(); - java.util.HashMap aItem = (java.util.HashMap)m_lDetectServices.get(sItem); - java.util.Vector lTypeReg = (java.util.Vector)aItem.get(PROPNAME_TYPES); - - if (lTypeReg.contains(sType)) - { - ++m_nTypesForDetectServices; - break; - } - } - - aIt2 = m_lFrameLoaders.keySet().iterator(); - while (aIt2.hasNext()) - { - java.lang.String sItem = (java.lang.String)aIt2.next(); - java.util.HashMap aItem = (java.util.HashMap)m_lFrameLoaders.get(sItem); - java.util.Vector lTypeReg = (java.util.Vector)aItem.get(PROPNAME_TYPES); - - if (lTypeReg.contains(sType)) - { - ++m_nTypesForFrameLoaders; - break; - } - } - - aIt2 = m_lContentHandlers.keySet().iterator(); - while (aIt2.hasNext()) - { - java.lang.String sItem = (java.lang.String)aIt2.next(); - java.util.HashMap aItem = (java.util.HashMap)m_lContentHandlers.get(sItem); - java.util.Vector lTypeReg = (java.util.Vector)aItem.get(PROPNAME_TYPES); - - if (lTypeReg.contains(sType)) - { - ++m_nTypesForContentHandlers; - break; - } - } - } - } - - //___________________________________________ - - /** validate all cache entries. - * - * It checks if all made registrations are valid; - * try to repair some simple problems; - * create missing information on demand ... - * - * @param nFormat - * specify, which configuration format - * must be checked. - * - * @throws [java.lang.Exception] - * if an unrecoverable problem occure. - */ - public synchronized void validate(int nFormat) - throws java.lang.Exception - { - validateTypes(nFormat); - validateFilters(nFormat); - } - - //___________________________________________ - - /** validate all type entries of this cache. - * - * @param nFormat - * specify, which configuration format - * must be checked. - * - * @throws [java.lang.Exception] - * if an unrecoverable problem occure. - */ - private void validateTypes(int nFormat) - throws java.lang.Exception - { - java.util.Iterator aIt1 = m_lTypes.keySet().iterator(); - while(aIt1.hasNext()) - { - java.lang.String sType = (java.lang.String)aIt1.next(); - java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sType); - if (aType == null) - throw new java.lang.Exception("type ["+sType+"] dos not exist realy?!"); - - if ( - (!aType.containsKey(PROPNAME_MEDIATYPE )) || - (!aType.containsKey(PROPNAME_PREFERRED )) || - (!aType.containsKey(PROPNAME_CLIPBOARDFORMAT)) || - (!aType.containsKey(PROPNAME_DOCUMENTICONID )) || - (!aType.containsKey(PROPNAME_URLPATTERN )) || - (!aType.containsKey(PROPNAME_EXTENSIONS )) || - (!aType.containsKey(PROPNAME_UINAME )) - ) - { - throw new java.lang.Exception("Type \""+sType+"\" does not contain all neccessary properties for a 6.0/6.Y format."); - } - - if ( - (((java.util.Vector)aType.get(PROPNAME_EXTENSIONS)).isEmpty()) && - (((java.util.Vector)aType.get(PROPNAME_URLPATTERN)).isEmpty()) - ) - { - throw new java.lang.Exception("Type \""+sType+"\" does not contain any extension nor an url pattern."); - } - - if (((java.util.HashMap)aType.get(PROPNAME_UINAME)).isEmpty()) - throw new java.lang.Exception("Type \""+sType+"\" is not localized."); - - if (nFormat == FORMAT_6Y) - { - if ( - (!aType.containsKey(PROPNAME_UIORDER )) || - (!aType.containsKey(PROPNAME_PREFERREDFILTER)) || - (!aType.containsKey(PROPNAME_DETECTSERVICE )) - ) - { - throw new java.lang.Exception("Type \""+sType+"\" does not contain all neccessary properties for a 6.Y format."); - } - - if (((java.lang.Integer)aType.get(PROPNAME_UIORDER)).intValue() < 0) - throw new java.lang.Exception("Type \""+sType+"\" has invalid value for prop UIOrder."); - - if (((java.lang.String)aType.get(PROPNAME_DETECTSERVICE)).length() < 1) - m_aDebug.setWarning("Type \""+sType+"\" has no detect service registered."); - - java.lang.String sPreferredReg = (java.lang.String)aType.get(PROPNAME_PREFERREDFILTER); - if ( - (sPreferredReg == null) || - (sPreferredReg.length() < 1 ) - ) - { - m_aDebug.setWarning("Type \""+sType+"\" has no preferred filter ..."); - /*FIXME - * OK - not every type has a filter registered .. but the - * a frame loader MUST(!) exist! Check it. - */ - } - else - { - if (!m_lFilters.containsKey(sPreferredReg)) - throw new java.lang.Exception("Type \""+sType+"\" has no valid preferred filter registration [\""+sPreferredReg+"\"]."); - } - } - } - } - - //___________________________________________ - - /** validate all filter entries of this cache. - * - * @param nFormat - * specify, which configuration format - * must be checked. - * - * @throws [java.lang.Exception] - * if an unrecoverable problem occure. - */ - public synchronized void validateFilters(int nFormat) - throws java.lang.Exception - { - java.util.Iterator aIt1 = m_lFilters.keySet().iterator(); - while(aIt1.hasNext()) - { - java.lang.String sFilter = (java.lang.String)aIt1.next(); - java.util.HashMap aFilter = (java.util.HashMap)m_lFilters.get(sFilter); - if (aFilter == null) - throw new java.lang.Exception("filter ["+sFilter+"] dos not exist realy?!"); - - if ( - (!aFilter.containsKey(PROPNAME_DOCUMENTSERVICE )) || - (!aFilter.containsKey(PROPNAME_FILEFORMATVERSION)) || - (!aFilter.containsKey(PROPNAME_FILTERSERVICE )) || - (!aFilter.containsKey(PROPNAME_FLAGS )) || - (!aFilter.containsKey(PROPNAME_TEMPLATENAME )) || - (!aFilter.containsKey(PROPNAME_TYPE )) || - (!aFilter.containsKey(PROPNAME_UICOMPONENT )) || - (!aFilter.containsKey(PROPNAME_USERDATA )) - ) - { - throw new java.lang.Exception("Filter \""+sFilter+"\" does not contain all neccessary properties for a 6.0/6.Y format."); - } - - if (((java.lang.Integer)aFilter.get(PROPNAME_FLAGS)).intValue() < 1) - throw new java.lang.Exception("Filter \""+sFilter+"\" does not have a valid flag field."); - - if (!m_lTypes.containsKey(aFilter.get(PROPNAME_TYPE))) - throw new java.lang.Exception("Filter \""+sFilter+"\" is not registered for a well known type."); - - if (nFormat == FORMAT_60) - { - if ( - (!aFilter.containsKey(PROPNAME_ORDER )) || - (!aFilter.containsKey(PROPNAME_UINAME)) - ) - { - throw new java.lang.Exception("Filter \""+sFilter+"\" does not contain all neccessary properties for a 6.0 format."); - } - - if (((java.lang.Integer)aFilter.get(PROPNAME_ORDER)).intValue() < 0) - throw new java.lang.Exception("Filter \""+sFilter+"\" does not have a valid Order value."); - - if (((java.util.HashMap)aFilter.get(PROPNAME_UINAME)).isEmpty()) - throw new java.lang.Exception("Filter \""+sFilter+"\" is not localized."); - } -/*TODO - depends from the configuration item "remove_filter_flag_preferred" ... - - if (nFormat == FORMAT_6Y) - { - int flags = ((java.lang.Integer)aFilter.get(PROPNAME_FLAGS)).intValue(); - if ((flags & FLAGVAL_PREFERRED) == FLAGVAL_PREFERRED) - throw new java.lang.Exception("Filter \""+sFilter+"\" has superflous Preferred flag set. Please remove this flag. ["+flags+"]"); - } -*/ - } - } - - /*TODO - * - remove graphic filters! - * - move detect services to types - */ - - public synchronized void transform60to6Y(boolean bCreateCombineFilterFlag , - boolean bRemoveFilterFlagBrowserPreferred, - boolean bRemoveFilterFlagPreferred , - boolean bRemoveFilterFlag3rdparty , - boolean bRemoveFilterUINames , - boolean bRemoveGraphicFilters , - boolean bSetDefaultDetector ) - throws java.lang.Exception - { - // remove some superflous cache entries ... - // everything related to "load macros" - // Macros should be dispatched instead of loaded! - if (m_lTypes.containsKey("macro")) - { - m_lTypes.remove("macro"); - m_aDebug.setDetailedInfo("superflous type \"macro\" was removed"); - } - if (m_lFrameLoaders.containsKey("com.sun.star.comp.sfx2.SfxMacroLoader")) - { - m_lFrameLoaders.remove("com.sun.star.comp.sfx2.SfxMacroLoader"); - m_aDebug.setDetailedInfo("superflous frame loader \"com.sun.star.comp.sfx2.SfxMacroLoader\" was removed"); - } - - // step over all filters and check her properties and references - java.util.Vector lPreferredFilters = new java.util.Vector(); - java.util.Vector lNoRealFilters = new java.util.Vector(); - java.util.Iterator aIt1 = m_lFilters.keySet().iterator(); - while(aIt1.hasNext()) - { - java.lang.String sFilter = (java.lang.String)aIt1.next(); - java.util.HashMap aFilter = (java.util.HashMap)m_lFilters.get(sFilter); - - // remove the "graphic helper filters" used by draw and impress - // They dont have any valid document service name set and cant be handled - // by our generic FrameLoader! - // They must be moved to her own configuration ... - - if ( - (bRemoveGraphicFilters ) && - (((java.lang.String)aFilter.get(PROPNAME_DOCUMENTSERVICE)).length() < 1) - ) - { - lNoRealFilters.add(sFilter); - continue; - } - - java.lang.String sTypeReg = (java.lang.String)aFilter.get(PROPNAME_TYPE); - java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sTypeReg); - - // move UINames of filters to types - java.util.HashMap lFilterUINames = (java.util.HashMap)aFilter.get(PROPNAME_UINAME); - java.util.HashMap lTypeUINames = (java.util.HashMap)aType.get(PROPNAME_UINAME); - java.util.HashMap lPatchUINames = new java.util.HashMap(); - - java.util.Iterator pUINames = lTypeUINames.keySet().iterator(); - while(pUINames.hasNext()) - { - java.lang.String sLocale = (java.lang.String)pUINames.next(); - java.lang.String sValue = (java.lang.String)lTypeUINames.get(sLocale); - lPatchUINames.put(sLocale, sValue); - } - - pUINames = lFilterUINames.keySet().iterator(); - while(pUINames.hasNext()) - { - java.lang.String sLocale = (java.lang.String)pUINames.next(); - java.lang.String sValue = (java.lang.String)lFilterUINames.get(sLocale); - lPatchUINames.put(sFilter+":"+sLocale, sValue); - } - aType.put(PROPNAME_UINAME, lPatchUINames); - - // set generic filter service wrapper for our own native filters! - // By the way: The format types of such filters can be detected by our - // generic detector too. - if ( - (bSetDefaultDetector ) && - (((java.lang.String)aFilter.get(PROPNAME_FILTERSERVICE)).length() < 1) - ) - { - /*ME_THINKING aFilter.put(PROPNAME_FILTERSERVICE, FILTERSERVICE_NATIVEWARPPER);*/ - aType.put(PROPNAME_DETECTSERVICE, GENERIC_DETECTSERVICE); - } - - // move the preferred filter information to any type - // Set the filter name to the type for which the filter is registered. - // If this type already have a set PreferredFilter value, check if the current filter - // has the preferred flag set. If not ignore it - otherwise overwrite the - // current information at the type. But look for multiple preferred filter relations ... - // means: look if more the one filter has set the preferred flag for the same type! - - /* Attention! - * - * Dont remove the preferred flag from any filter! ... not here. - * Otherwhise next loop can't detect ambigous preferred registrations! - * Add filter to a temp. list, which can be used later to remove the preferred - * flag ... - */ - - int flags1 = ((java.lang.Integer)aFilter.get(PROPNAME_FLAGS)).intValue(); - java.lang.String sDocSrv = (java.lang.String)aFilter.get(PROPNAME_DOCUMENTSERVICE); - if (sDocSrv.length()>0)// without a doc service its not a real filter - its a graphic filter! - { - boolean preferred1 = ((flags1 & FLAGVAL_PREFERRED) == FLAGVAL_PREFERRED); - if (preferred1) - lPreferredFilters.add(aFilter); - - java.lang.String sAlreadyRegisteredFilter = (java.lang.String)aType.get(PROPNAME_PREFERREDFILTER); - // no registration => set this filter as "any possible one"! - if (sAlreadyRegisteredFilter.length() < 1) - aType.put(PROPNAME_PREFERREDFILTER, sFilter); - else - { - java.util.HashMap aAlreadyRegisteredFilter = (java.util.HashMap)m_lFilters.get(sAlreadyRegisteredFilter); - int flags2 = ((java.lang.Integer)aAlreadyRegisteredFilter.get(PROPNAME_FLAGS)).intValue(); - boolean preferred2 = ((flags2 & FLAGVAL_PREFERRED) == FLAGVAL_PREFERRED); - - // two preferred filters for the same type! => error - if (preferred1 && preferred2) - { - java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256); - sMsg.append("More the one preferred filter detected for the same type.\n"); - sMsg.append("\ttype = \""+sTypeReg+"\"\n"); - sMsg.append("\tfilter[1] = \""+sAlreadyRegisteredFilter+"\"\n"); - sMsg.append("\tfilter[2] = \""+sFilter+"\"\n"); - throw new java.lang.Exception(sMsg.toString()); - } - else - // overwrite the "any possible" filter with a real preferred one - if (preferred1 && !preferred2) - aType.put(PROPNAME_PREFERREDFILTER, sFilter); - } - } - - // create the new combined filter flag if required - if (bCreateCombineFilterFlag) - { - if ( - ((flags1 & FLAGVAL_IMPORT) == FLAGVAL_IMPORT) && - ((flags1 & FLAGVAL_EXPORT) == FLAGVAL_EXPORT) - ) - { - flags1 |= FLAGVAL_COMBINED; - flags1 &= ~FLAGVAL_IMPORT ; - flags1 &= ~FLAGVAL_EXPORT ; - aFilter.put(PROPNAME_FLAGS, new java.lang.Integer(flags1)); - } - } - - // remove some obsolete filter flags - if (bRemoveFilterFlagBrowserPreferred) - { - flags1 &= ~FLAGVAL_BROWSERPREFERRED; - aFilter.put(PROPNAME_FLAGS, new java.lang.Integer(flags1)); - } - - if (bRemoveFilterFlag3rdparty) - { - flags1 &= ~FLAGVAL_3RDPARTYFILTER; - aFilter.put(PROPNAME_FLAGS, new java.lang.Integer(flags1)); - } - - // if its a filter with an UI order ... - // move this information to the registered type. - // Note: Because more then one filter can be registered for the same type. - // Handle it as an error ... till we find a better transformation! - java.lang.Integer nOrder = (java.lang.Integer)aFilter.get(PROPNAME_ORDER); - java.lang.Integer nUIOrder = (java.lang.Integer)aType.get(PROPNAME_UIORDER); - int order = nOrder.intValue(); - int uiorder = nUIOrder.intValue(); - - if (order > 0) - { - if ( - (uiorder < 1 ) || - (uiorder > order) - ) - { - aType.put(PROPNAME_UIORDER, nOrder); - m_aDebug.setDetailedInfo("moved order value "+nOrder+" from filter \""+sFilter+"\" to type \""+sTypeReg+"\""); - } - else - m_aDebug.setDetailedInfo("ignore order value [order="+nOrder+",uiorder="+nUIOrder+"] for filter \""+sFilter+"\" and type \""+sTypeReg+"\""); - } - } - - // NOW ... remove the preferred flags from every filter, which it has set. - java.util.Enumeration aIt2 = null; - if (bRemoveFilterFlagPreferred) - { - aIt2 = lPreferredFilters.elements(); - while (aIt2.hasMoreElements()) - { - java.util.HashMap aFilter = (java.util.HashMap)aIt2.nextElement(); - int flags = ((java.lang.Integer)aFilter.get(PROPNAME_FLAGS)).intValue(); - flags &= ~FLAGVAL_PREFERRED; - aFilter.put(PROPNAME_FLAGS, new java.lang.Integer(flags)); - } - } - - // NOW ... remove all "no real filters" like the graphich helper filters of - // draw and impress! - aIt2 = lNoRealFilters.elements(); - while (aIt2.hasMoreElements()) - m_lFilters.remove(aIt2.nextElement()); - - // step over all detect services and move this information directly to - // the corresponding types - // Overwrite possibel default registrations with a real existing one! - aIt1 = m_lDetectServices.keySet().iterator(); - while(aIt1.hasNext()) - { - java.lang.String sDetector = (java.lang.String)aIt1.next(); - java.util.HashMap aDetector = (java.util.HashMap)m_lDetectServices.get(sDetector); - java.util.Vector lTypeReg = (java.util.Vector)aDetector.get(PROPNAME_TYPES); - aIt2 = lTypeReg.elements(); - while(aIt2.hasMoreElements()) - { - java.lang.String sTypeReg = (java.lang.String)aIt2.nextElement(); - java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sTypeReg); - - if (aType == null) - { - m_aDebug.setWarning("Detector \""+sDetector+"\" seem to be registered for unknown type \""+sTypeReg+"\""); - continue; - } - - java.lang.Object aAlreadyRegisteredDetector = aType.get(PROPNAME_DETECTSERVICE); - if (aAlreadyRegisteredDetector != null && ((java.lang.String)aAlreadyRegisteredDetector).length() > 0) - { - java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256); - sMsg.append("type \""+sTypeReg+"\" has ambigous registrations of a detect service\n"); - sMsg.append("\tdetect service[1] = \""+(java.lang.String)aAlreadyRegisteredDetector+"\"\n"); - sMsg.append("\tdetect service[2] = \""+sDetector+"\"\n"); - m_aDebug.setWarning(sMsg.toString()); - } - aType.put(PROPNAME_DETECTSERVICE, sDetector); - m_aDebug.setGlobalInfo("move detector \""+sDetector+"\" to type \""+sTypeReg+"\""); - } - } - - // because all detect service was registered as type properties directly ... - // remove all detect service objects of this cache! - m_lDetectServices.clear(); - - // step over all frame loader and move this information directly to - // the corresponding types - // Overwrite possibel default registrations with a real existing one! - aIt1 = m_lFrameLoaders.keySet().iterator(); - while(aIt1.hasNext()) - { - java.lang.String sLoader = (java.lang.String)aIt1.next(); - java.util.HashMap aLoader = (java.util.HashMap)m_lFrameLoaders.get(sLoader); - java.util.Vector lTypeReg = (java.util.Vector)aLoader.get(PROPNAME_TYPES); - aIt2 = lTypeReg.elements(); - while(aIt2.hasMoreElements()) - { - java.lang.String sTypeReg = (java.lang.String)aIt2.nextElement(); - java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sTypeReg); - java.lang.String sAlreadyRegisteredLoader = (java.lang.String)aType.get(PROPNAME_FRAMELOADER); - if (sAlreadyRegisteredLoader != null && sAlreadyRegisteredLoader.length() > 0) - { - java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256); - sMsg.append("type \""+sTypeReg+"\" has ambigous registrations of a frame loader\n"); - sMsg.append("\tframe loader[1] = \""+sAlreadyRegisteredLoader+"\"\n"); - sMsg.append("\tframe loader[2] = \""+sLoader+"\"\n"); - m_aDebug.setWarning(sMsg.toString()); - } - aType.put(PROPNAME_FRAMELOADER, sLoader); - System.out.println("move loader \""+sLoader+"\" to type \""+sTypeReg+"\""); - } - } - - m_lFrameLoaders.clear(); - - // step over all content handler and move this information directly to - // the corresponding types - // Overwrite possibel default registrations with a real existing one! - aIt1 = m_lContentHandlers.keySet().iterator(); - while(aIt1.hasNext()) - { - java.lang.String sHandler = (java.lang.String)aIt1.next(); - java.util.HashMap aHandler = (java.util.HashMap)m_lContentHandlers.get(sHandler); - java.util.Vector lTypeReg = (java.util.Vector)aHandler.get(PROPNAME_TYPES); - aIt2 = lTypeReg.elements(); - while(aIt2.hasMoreElements()) - { - java.lang.String sTypeReg = (java.lang.String)aIt2.nextElement(); - java.util.HashMap aType = (java.util.HashMap)m_lTypes.get(sTypeReg); - java.lang.String sAlreadyRegisteredHandler = (java.lang.String)aType.get(PROPNAME_CONTENTHANDLER); - if (sAlreadyRegisteredHandler != null && sAlreadyRegisteredHandler.length() > 0) - { - java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256); - sMsg.append("type \""+sTypeReg+"\" has ambigous registrations of a content handler\n"); - sMsg.append("\tcontent handler[1] = \""+sAlreadyRegisteredHandler+"\"\n"); - sMsg.append("\tcontent handler[2] = \""+sHandler+"\"\n"); - m_aDebug.setWarning(sMsg.toString()); - } - aType.put(PROPNAME_CONTENTHANDLER, sHandler); - System.out.println("move handler \""+sHandler+"\" to type \""+sTypeReg+"\""); - } - } - - m_lContentHandlers.clear(); - -/* - int c = m_lTypes.size(); - java.lang.String[] lT1 = new java.lang.String[c]; - java.lang.String[] lT2 = new java.lang.String[c]; - long nUPS = 0; - - int i = 0; - aIt1 = m_lTypes.keySet().iterator(); - while(aIt1.hasNext()) - { - lT1[i] = (java.lang.String)aIt1.next(); - lT2[i] = lT1[i]; - ++i; - } - - for (int i1=0; i1<c; ++i1) - { - java.lang.String sT1 = lT1[i1]; - java.util.HashMap aT1 = (java.util.HashMap)m_lTypes.get(sT1); - - for (int i2=i1; i2<c; ++i2) - { - java.lang.String sT2 = lT1[i2]; - java.util.HashMap aT2 = (java.util.HashMap)m_lTypes.get(sT2); - - if (!sT1.equals(sT2)) - { - if ( - aT1.get(PROPNAME_MEDIATYPE).equals(aT2.get(PROPNAME_MEDIATYPE)) && - aT1.get(PROPNAME_CLIPBOARDFORMAT).equals(aT2.get(PROPNAME_CLIPBOARDFORMAT)) && - aT1.get(PROPNAME_URLPATTERN).equals(aT2.get(PROPNAME_URLPATTERN)) && - aT1.get(PROPNAME_EXTENSIONS).equals(aT2.get(PROPNAME_EXTENSIONS)) - ) - { - System.err.println("UUPPSS----------------------------------------------------------------------------"); - System.err.println("[1]\""+sT1+"\" equals [2]\""+sT2+"\""); - System.err.println("\tprops 1: "+aT1); - System.err.println("\tprops 2: "+aT2); - System.err.println("----------------------------------------------------------------------------------\n"); - ++nUPS; -// throw new java.lang.Exception("UUPPS :-)"); - } - } - } - } - System.err.println("count of UPS = "+nUPS); -*/ - } -} diff --git a/l10ntools/source/filter/utils/ConfigHelper.java b/l10ntools/source/filter/utils/ConfigHelper.java deleted file mode 100644 index e45da010b6fa..000000000000 --- a/l10ntools/source/filter/utils/ConfigHelper.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.filter.config.tools.utils; - -//_______________________________________________ -// imports - -import java.lang.*; -import java.util.*; -import java.io.*; - -//_______________________________________________ -// definition - -/** can be used to analyze command line parameters - * and merge it together with might existing config - * files. That provides the possibility to overwrite - * config values via command line parameter. - * - * - */ -public class ConfigHelper extends java.util.Properties -{ - //___________________________________________ - // member - - /** indicates an empty command line. */ - private boolean m_bEmpty = true; - - //___________________________________________ - // ctor - - //------------------------------------------- - /** initialize a new helper with the list of - * command line parameters and bind this new instance - * to a property file on disk. - * - * @param sPropFile - * name of the property file. - * If its set to null or an empty value - * it will be ignored. - * - * @param lCommandLineArgs - * the list of original command line arguments. - * - * @throws [Exception] - * in case the command line contains an unknown - * schema for specifiying parameters or the - * specified property file does not exists - * or seem to be corrupted. - */ - public ConfigHelper(java.lang.String sPropFile , - java.lang.String[] lCommandLineArgs) - throws java.lang.Exception - { - // first load prop file, so its values can be overwritten - // by command line args later - // Do it only, if a valid file name was given. - // But in case this file name is wrong, throw an exception. - // So the outside code can react! - if ( - (sPropFile != null) && - (sPropFile.length() > 0 ) - ) - { - java.lang.ClassLoader aLoader = getClass().getClassLoader(); - java.io.InputStream aStream = aLoader.getResourceAsStream(sPropFile); - if (aStream == null) - aStream = new java.io.FileInputStream(sPropFile); - load(aStream); - } - - int count = 0; - if (lCommandLineArgs != null) - count = lCommandLineArgs.length; - m_bEmpty = (count < 1); - - for (int arg=0; arg<count; ++arg) - { - // is it a named-value argument? - // Note: We ignores double "=" signs! => search from left to right - int len = lCommandLineArgs[arg].length(); - int pos = lCommandLineArgs[arg].indexOf('='); - if (pos != -1) - { - java.lang.String sArg = lCommandLineArgs[arg].substring(0,pos); - java.lang.String sValue = lCommandLineArgs[arg].substring(pos+1); - setProperty(sArg, sValue); - continue; - } - - // is it a boolean argument? - // Note: Because "--" and "-" will be interpreted as the same - // we search from right to left! - pos = lCommandLineArgs[arg].lastIndexOf('-'); - if (pos == -1) - pos = lCommandLineArgs[arg].lastIndexOf('/'); - if (pos != -1) - { - java.lang.String sArg = lCommandLineArgs[arg].substring(pos+1); - setProperty(sArg, java.lang.String.valueOf(true)); - continue; - } - - // There is an unknown format used by this argument ... - throw new MalformedCommandLineException("Invalid command line detected. The argument \""+lCommandLineArgs[arg]+"\" use an unsupported format."); - } - } - - //------------------------------------------- - /** indicates if the given command line includes - * a help request. - * - * @return True if there was an explicit help request. - */ - public synchronized boolean isHelp() - { - return ( - (containsKey("help")) || - (containsKey("?") ) || - (containsKey("h") ) - ); - } - - //------------------------------------------- - /** indicates if the gioven command line was empty. - * - * @return True if there was an empty command line. - */ - public synchronized boolean isEmpty() - { - return m_bEmpty; - } - - //------------------------------------------- - /** returns the value of sProp as boolean value. - * - * @param sProp - * the name of the parameter. - * - * @return The boolean value of the requested property. - * - * @throw [NoSuchElementException] - * if the requested property does not exists. - */ - public synchronized boolean getBoolean(java.lang.String sProp) - throws java.util.NoSuchElementException - { - java.lang.String sValue = getProperty(sProp); - if (sValue == null) - throw new java.util.NoSuchElementException("The requested config value \""+sProp+"\" does not exists!"); - return new java.lang.Boolean(sValue).booleanValue(); - } - - public synchronized boolean getBoolean(java.lang.String sProp , - boolean bDefault) - { - java.lang.String sDefault = java.lang.String.valueOf(bDefault); - java.lang.String sValue = getProperty(sProp, sDefault); - return new java.lang.Boolean(sValue).booleanValue(); - } - - //------------------------------------------- - /** returns the value of sProp as int value. - * - * @param sProp - * the name of the parameter. - * - * @return The int value of the requested property. - * - * @throw [NoSuchElementException] - * if the requested property does not exists. - */ - public synchronized int getInt(java.lang.String sProp) - throws java.util.NoSuchElementException - { - java.lang.String sValue = getProperty(sProp); - if (sValue == null) - throw new java.util.NoSuchElementException("The requested config value \""+sProp+"\" does not exists!"); - return new java.lang.Integer(sValue).intValue(); - } - - public synchronized int getInt(java.lang.String sProp , - int nDefault) - { - java.lang.String sDefault = java.lang.String.valueOf(nDefault); - java.lang.String sValue = getProperty(sProp, sDefault); - return new java.lang.Integer(sValue).intValue(); - } - - //------------------------------------------- - /** returns the value of sProp as string value. - * - * @param sProp - * the name of the parameter. - * - * @return The string value of the requested property. - * - * @throw [NoSuchElementException] - * if the requested property does not exists. - */ - public synchronized java.lang.String getString(java.lang.String sProp) - throws java.util.NoSuchElementException - { - java.lang.String sValue = getProperty(sProp); - if (sValue == null) - throw new java.util.NoSuchElementException("The requested config value \""+sProp+"\" does not exists!"); - return sValue; - } - - //------------------------------------------- - /** returns the value of sProp as string list value! - * - * @descr The delimiter must be well known and - * it must be clear if trailing/leading - * whitespaces must be ignored or not. - * - * @param sProp - * the name of the parameter. - * - * @param sDelim - * the delimiter, which must be used to split - * the config string value into an array. - * - * @param bTrim - * if its set to true, trailing and leading whitespace - * characters will be ommited. - * - * @param bDecode - * if its set to TRUE all liste items will be - * interpreted as "<xxx>" and converted to <xxx>! - * - * @return The string list value of the requested property. - * - * @throw [NoSuchElementException] - * if the requested property does not exists. - */ - public synchronized java.util.Vector getStringList(java.lang.String sProp , - java.lang.String sDelimiter, - boolean bTrim , - boolean bDecode ) - throws java.util.NoSuchElementException - { - java.lang.String sValue = getProperty(sProp); - if (sValue == null) - throw new java.util.NoSuchElementException("The requested config value \""+sProp+"\" does not exists!"); - - java.util.Vector lValue = new java.util.Vector(); - try - { - java.util.StringTokenizer lTokens = new java.util.StringTokenizer(sValue, sDelimiter); - while(lTokens.hasMoreTokens()) - { - java.lang.String sToken = lTokens.nextToken(); - // remove trailing/leading whitespaces - if (bTrim) - sToken = sToken.trim(); - // remove "" - if ( - (bDecode ) && - (sToken.indexOf("\"") == 0 ) && - (sToken.lastIndexOf("\"") == sToken.length()-1) - ) - { - sToken = sToken.substring(1, sToken.length()-1); - } - lValue.add(sToken); - } - } - catch(java.lang.Throwable ex) - { lValue.clear(); } - - return lValue; - } -} diff --git a/l10ntools/source/filter/utils/FileHelper.java b/l10ntools/source/filter/utils/FileHelper.java deleted file mode 100644 index 98f1248db545..000000000000 --- a/l10ntools/source/filter/utils/FileHelper.java +++ /dev/null @@ -1,754 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.filter.config.tools.utils; - -// __________ Imports __________ - -import java.io.*; -import java.lang.*; -import java.net.*; -import java.util.*; - -// __________ Implementation __________ - -/** - * It collects some static helper functons to handle file system specific problems. - * Sometimes it's neccessary to convert URL from/to system paths; - * or from string notation to structural versions (e.g. com.sun.star.util.URL). - * And sometimes java had another notation then the office it has. - * Further it provides functionality to work easiear with the java.io.File class of java. - * - * - */ -public class FileHelper -{ - // ____________________ - - /** - * Because the office need URLs for loading/saving documents - * we must convert used system paths. - * And java use another notation for file URLs ... correct it. - * - * @param aSystemPath - * represent the file in system notation - * - * @return [String] - * a file url which represent the given system path - */ - public static java.lang.String getFileURLFromSystemPath(java.io.File aSystemPath) - { - System.out.println("TODO: must be adapted to java 1.3 :-("); - System.exit(-1); -/*TODO_JAVA - try - { - sFileURL = aSystemPath.toURI().toURL().toString(); - } - catch( MalformedURLException exWrong ) - { - sFileURL = null; - } -*/ - java.lang.String sFileURL = null; - - // problem of java: file URL's are coded with 1 slash instead of 2 or 3 ones! - // => correct this problem first, otherwise office can't use these URL's - if( - (sFileURL != null ) && - (sFileURL.startsWith("file:/")) && - (!sFileURL.startsWith("file://")) - ) - { - java.lang.StringBuffer sWorkBuffer = new java.lang.StringBuffer(sFileURL); - sWorkBuffer.insert(6,"//"); - sFileURL = sWorkBuffer.toString(); - } - - return sFileURL; - } - - // ____________________ - - /** - * The same as getFileURLFromSystemPath() before but uses string parameter instead - * of a java.io.File type. It exist to supress converting of neccessary parameters in the - * outside code. But of course getFileURLFromSystemPath(File) will be a little bit faster - * then this method ... - * - * @param sSystemPath - * represent the file in system notation - * - * @return [String] - * a file url which represent the given system path - */ - public static java.lang.String getFileURLFromSystemPath(java.lang.String sSystemPath) - { - return getFileURLFromSystemPath(new java.io.File(sSystemPath)); - } - - // ____________________ - - /** - * Does the same as getFileURLFromSystemPath() before ... but uses - * the given protocol string (e.g."http://") instead of "file:///". - * - * @param aSystemPath - * represent the file in system notation - * - * @param aBasePath - * define the base path of the aSystemPath value, - * which must be replaced with the value of "sServerPath". - * - * @param sServerURL - * Will be used to replace sBasePath. - * - * @example - * System Path = "d:\test\file.txt" - * Base Path = "d:\test" - * Server Path = "http://alaska:8000" - * => "http://alaska:8000/file.txt" - * - * @return [String] - * an url which represent the given system path - * and uses the given protocol - */ - public static java.lang.String getURLWithProtocolFromSystemPath(java.io.File aSystemPath, - java.io.File aBasePath , - java.lang.String sServerURL ) - { - System.out.println("TODO: must be adapted to java 1.3 :-("); - System.exit(-1); - - java.lang.String sFileURL = FileHelper.getFileURLFromSystemPath(aSystemPath); - java.lang.String sBaseURL = FileHelper.getFileURLFromSystemPath(aBasePath ); - - // cut last '/'! - if (sBaseURL.lastIndexOf('/')==(sBaseURL.length()-1)) - sBaseURL = sBaseURL.substring(0,sBaseURL.length()-1); - - // cut last '/'! - if (sServerURL.lastIndexOf('/')==(sServerURL.length()-1)) - sServerURL = sServerURL.substring(0,sServerURL.length()-1); - -//TODO_JAVA java.lang.String sURL = sFileURL.replaceFirst(sBaseURL,sServerURL); - java.lang.String sURL = null; - return sURL; - } - - // ____________________ - - /** - * The same as getURLWithProtocolFromSystemPath() before but uses string parameter instead - * of a java.io.File types. It exist to supress converting of neccessary parameters in the - * outside code. But of course getURLWithProtocolFromSystemPath(File,File,String) will be - * a little bit faster then this method ... - * - * @param sSystemPath - * represent the file in system notation - * - * @param sBasePath - * define the base path of the aSystemPath value, - * which must be replaced with the value of "sServerPath". - * - * @param sServerPath - * Will be used to replace sBasePath. - * - * @example - * System Path = "d:\test\file.txt" - * Base Path = "d:\test" - * Server Path = "http://alaska:8000" - * => "http://alaska:8000/file.txt" - * - * @return [String] - * an url which represent the given system path - * and uses the given protocol - */ - public static java.lang.String getURLWithProtocolFromSystemPath(java.lang.String sSystemPath, - java.lang.String sBasePath , - java.lang.String sServerPath) - { - return getURLWithProtocolFromSystemPath(new java.io.File(sSystemPath), new java.io.File(sBasePath), sServerPath); - } - - //_________________________________ - - /** - * Return a list of all available files of a directory. - * We filter sub directories. All other files - * are returned. So they can be used for further purposes. - * One parameter define the start directory, - * another one enable/disable recursive search into sub directories. - * - * @param aRoot - * the start directory, which should be analyzed. - * - * @param bRecursive - * enable/disable search in sub directories. - * - * @return [Vector] - * a filtered list of java java.io.File objects of all available files - * of the start dir (and may of its sub directories). - */ - public static java.util.Vector getSystemFilesFromDir(java.io.File aRoot , - boolean bRecursive) - { - java.io.File[] lAllFiles = aRoot.listFiles(); - if (lAllFiles == null) - return null; - - int c = lAllFiles.length; - java.util.Vector lFilteredFiles = new java.util.Vector(c); - for (int i=0; i<c; ++i) - { - // simple files! - if (lAllFiles[i].isFile()) - lFilteredFiles.add(lAllFiles[i]); - else - // recursion? - if (bRecursive && lAllFiles[i].isDirectory()) - { - java.util.Vector lSubFiles = FileHelper.getSystemFilesFromDir(lAllFiles[i],bRecursive); - if (lSubFiles != null) - { - java.util.Enumeration aSnapshot = lSubFiles.elements(); - while (aSnapshot.hasMoreElements()) - lFilteredFiles.add(aSnapshot.nextElement()); - } - } - } - - return lFilteredFiles; - } - - //_________________________________ - /** it converts the given name (e.g. an internal type name) to - * an usable system file name. - * - * Do so some special characters (e.g. "/") must be replaced with other ones. - * - * @param sName - * the name, which should be analyzed and converted. - * - * @return A valid system file name, which should be similar to the - * given name, but does not contain special characters any longer. - */ - public static java.lang.String convertName2FileName(String sName) - { - int i = 0; - int nLength = sName.length(); - char[] lBuffer = sName.toCharArray(); - - java.lang.StringBuffer sNewName = new java.lang.StringBuffer(nLength); - for (i=0; i<nLength; ++i) - { - char c = lBuffer[i]; - if ( - c>=48 && c<=57 // 0-9 - && - c>=97 && c<=122 // a-z - && - c>=65 && c<=90 // A-Z - ) - { - sNewName.append(c); - } - else - { - sNewName.append("_"); - } - } - - return sNewName.toString(); - } - - //___________________________________________ - - /** it removes all child nodes of a file system directory. - * - * @param aDirectory - * points to the directory, which should be made empty. - * - * @param bFilesOnly - * force deletion of files only. If its set to TRUE, - * no subdirectory will be removed. - * - * @throw [java.io.IOException] - * if some of the child nodes couldn't be removed. - */ - public static void makeDirectoryEmpty(java.io.File aDirectory, - boolean bFilesOnly) - throws java.io.IOException - { - if (!aDirectory.isDirectory()) - throw new java.io.FileNotFoundException("\""+aDirectory.toString()+"\" is not a directory."); - - java.io.File[] lChildren = aDirectory.listFiles(); - for (int f=0; f<lChildren.length; ++f) - { - if (lChildren[f].isDirectory()) - { - FileHelper.makeDirectoryEmpty(lChildren[f], bFilesOnly); - if (!bFilesOnly) - { - if (!lChildren[f].delete()) - throw new java.io.IOException("\""+lChildren[f].toString()+"\" could not be deleted."); - } - } - else - { - if (!lChildren[f].delete()) - throw new java.io.IOException("\""+lChildren[f].toString()+"\" could not be deleted."); - } - } - } - - //___________________________________________ - - /** it try to generate a new file with a unique ID - * inside given directory. - * - * Call this method with a directory and a base name for - * a file. It will be used to generate a new files inside - * the directory. Existing files will be checked and new file - * name will be tested till a non existing file name would be found. - * - * @param aBaseDir - * must be a system path - * e.g.: "c:\temp" - * - * @param sBaseName - * must be a system file name without extensions. - * e.g.: "myfile_" - * - * @param sExtension - * the whished extension. - * e.g.: "dat" - * - * @return A valid file object, if an unique file could be created - - * Null otherwise. - * e.g.: "c:\temp\myfile_1.dat" - */ - public static java.io.File createUniqueFile(java.io.File aBaseDir , - java.lang.String sBaseName , - java.lang.String sExtension) - { - java.io.File aBaseFile = new java.io.File(aBaseDir, sBaseName); - java.io.File aFile = null; - long nr = 0; - while (aFile == null && nr < java.lang.Long.MAX_VALUE) - { - java.lang.String sFileName = aBaseFile.getPath() + java.lang.String.valueOf(nr) + "." + sExtension; - aFile = new java.io.File(sFileName); - if (aFile.exists()) - aFile=null; - ++nr; - } - return aFile; - } - - //___________________________________________ - - /** reads the complete file, using the right encoding, - * into the given string buffer. - * - * @param aFile - * must point to a system file, which must exist. - * e.g.: "c:\temp\test.txt" - * "/tmp/test.txt" - * - * @param sEncoding - * will be used to encode the string content - * inside the file. - * e.g.: "UTF8" - * - * @param sBuffer - * used to return the file content. - * - * @throw [IOException] - * - if the file couldnt be opened - * - if the file does not use the right encoding - */ - public static void readEncodedBufferFromFile(java.io.File aFile , - java.lang.String sEncoding, - java.lang.StringBuffer sBuffer ) - throws java.io.IOException - { - if (sEncoding.equals("UTF-8Special")) - { - FileHelper.readAndCheckUTF8File(aFile,sBuffer); - return; - } - - java.io.FileInputStream aByteStream = new java.io.FileInputStream(aFile.getAbsolutePath()); - java.io.InputStreamReader aEncodedReader = new java.io.InputStreamReader(aByteStream, sEncoding); - char[] aEncodedBuffer = new char[4096]; - int nReadCount = 0; - - while((nReadCount=aEncodedReader.read(aEncodedBuffer))>0) - sBuffer.append(aEncodedBuffer, 0, nReadCount); - - aEncodedReader.close(); - } - - //___________________________________________ - private static void logEncodingData(java.lang.StringBuffer sLog , - int nUTF8 , - int nByteOrg1 , - int nByteOrg2 , - int nByteOrg3 , - int nByteOrg4 , - int nByte1 , - int nByte2 , - int nByte3 , - int nByte4 , - int nEncodingType) - { - sLog.append("["+nEncodingType+"]\t"); - sLog.append((int)nUTF8+"\t="); - sLog.append("\t"+nByteOrg1+"/"+nByte1); - sLog.append("\t"+nByteOrg2+"/"+nByte2); - sLog.append("\t"+nByteOrg3+"/"+nByte3); - sLog.append("\t"+nByteOrg4+"/"+nByte4); - sLog.append("\n"); - } - - //___________________________________________ - private static char impl_convertBytesToChar(int nByte1, int nByte2, int nByte3, int nByte4) - { - return (char)((nByte1*0x40000)+(nByte2*0x1000)+(nByte3*0x40)+nByte4); - } - - //___________________________________________ - private static int impl_readAndCheckNextByte(byte[] aBuffer , - int nBufPos , - int nBufLength , - int nMinRange , - int nMaxRange ) - throws java.lang.Exception - { - if (nBufPos>=nBufLength) - throw new java.lang.Exception("impl_readAndCheckNextByte()\nEnd of buffer reached."); - - int nByte = aBuffer[nBufPos] & 0xFF; - if ( - (nByte < nMinRange) || - (nByte > nMaxRange) - ) - { - throw new java.lang.Exception("impl_readAndCheckNextByte()\nByte does not fit the specified range."); - } - - return nByte; - } - - //___________________________________________ - public static void readAndCheckUTF8File(java.io.File aFile , - java.lang.StringBuffer sBuffer) - throws java.io.IOException - { - java.io.FileInputStream aByteStream = new java.io.FileInputStream(aFile.getAbsolutePath()); - byte[] aBuffer = new byte[4096]; - int nReadCount = 0; - int nByteOrg_1 = 0; - int nByteOrg_2 = 0; - int nByteOrg_3 = 0; - int nByteOrg_4 = 0; - int nByte_1 = 0; - int nByte_2 = 0; - int nByte_3 = 0; - int nByte_4 = 0; - char nUTF8 = 0; - int i = 0; - int nEncodingType = 0; - java.lang.StringBuffer sLog = new java.lang.StringBuffer(); - - try - { - - while((nReadCount=aByteStream.read(aBuffer))>0) - { - i=0; - while (i<nReadCount) - { - nByteOrg_1 = 0; - nByteOrg_2 = 0; - nByteOrg_3 = 0; - nByteOrg_4 = 0; - nByte_1 = 0; - nByte_2 = 0; - nByte_3 = 0; - nByte_4 = 0; - nUTF8 = 0; - nEncodingType = 0; - - nByteOrg_1 = aBuffer[i++] & 0xFF; - nByte_1 = nByteOrg_1; - /* - Table 3-6. Well-Formed UTF-8 Byte Sequences - - ============================================================================ - Nr. Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte - ============================================================================ - 01 U+ 0..U+ 7F 00..7F - 02 U+ 80..U+ 7FF C2..DF 80..BF - 03 U+ 800..U+ FFF E0 A0..BF 80..BF - 04 U+ 1000..U+ CFFF E1..EC 80..BF 80..BF - 05 U+ D000..U+ D7FF ED 80..9F 80..BF - 06 U+ E000..U+ FFFF EE..EF 80..BF 80..BF - 07 U+ 10000..U+ 3FFFF F0 90..BF 80..BF 80..BF - 08 U+ 40000..U+ FFFFF F1..F3 80..BF 80..BF 80..BF - 09 U+100000..U+10FFFF F4 80..8F 80..BF 80..BF - */ - // ------------------------------------------------------------ - // 01 - // 1 byte: 0xxxxxxx - // ------------------------------------------------------------ - if ( - (nByteOrg_1 >= 0x00) && - (nByteOrg_1 <= 0x7F) - ) - { - nEncodingType = 1; - nUTF8 = (char)nByte_1; - } - // ------------------------------------------------------------ - // 02 - // 1 byte: 110xxxxx - // 2 byte: 101xxxxx - // ------------------------------------------------------------ - else - if ( - (nByteOrg_1 >= 0xC2) && - (nByteOrg_1 <= 0xDF) - ) - { - nEncodingType = 2; - nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByte_1 = nByteOrg_1-0xC2; - nByte_2 = nByteOrg_2-0x80; - nUTF8 = FileHelper.impl_convertBytesToChar(0,0,nByte_1, nByte_2); - } - // ------------------------------------------------------------ - // 03 - // 1 byte: 11100000 - // 2 byte: 101xxxxx - // 3 byte: 10xxxxxx - // ------------------------------------------------------------ - else - if (nByteOrg_1 == 0xE0) - { - nEncodingType = 3; - nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0xA0, 0xBF); - nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByte_2 = nByteOrg_2-0xA0; - nByte_3 = nByteOrg_3-0x80; - nUTF8 = FileHelper.impl_convertBytesToChar(0,0,nByte_2, nByte_3); - } - // ------------------------------------------------------------ - // 04 - // 1 byte: 111xxxxx - // 2 byte: 10xxxxxx - // 3 byte: 10xxxxxx - // ------------------------------------------------------------ - else - if ( - (nByteOrg_1 >= 0xE1) && - (nByteOrg_1 <= 0xEC) - ) - { - nEncodingType = 4; - nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByte_1 = nByteOrg_1-0xE1; - nByte_2 = nByteOrg_2-0x80; - nByte_3 = nByteOrg_3-0x80; - nUTF8 = FileHelper.impl_convertBytesToChar(0,nByte_1, nByte_2, nByte_3); - } - // ------------------------------------------------------------ - // 05 - // 1 byte: 11101101 - // 2 byte: 10xxxxxx - // 3 byte: 10xxxxxx - // ------------------------------------------------------------ - else - if (nByteOrg_1 == 0xED) - { - nEncodingType = 5; - nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0x9F); - nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByte_2 = nByteOrg_2-0x80; - nByte_3 = nByteOrg_3-0x80; - nUTF8 = FileHelper.impl_convertBytesToChar(0,0, nByte_2, nByte_3); - } - // ------------------------------------------------------------ - // 06 - // 1 byte: 1110111x - // 2 byte: 10xxxxxx - // 3 byte: 10xxxxxx - // ------------------------------------------------------------ - else - if ( - (nByteOrg_1 >= 0xEE) && - (nByteOrg_1 <= 0xEF) - ) - { - nEncodingType = 6; - nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByte_1 = nByteOrg_1-0xEE; - nByte_2 = nByteOrg_2-0x80; - nByte_3 = nByteOrg_3-0x80; - nUTF8 = FileHelper.impl_convertBytesToChar(0,nByte_1, nByte_2, nByte_3); - } - // ------------------------------------------------------------ - // 07 - // 1 byte: 11110000 - // 2 byte: 1001xxxx - // 3 byte: 10xxxxxx - // 4 byte: 10xxxxxx - // ------------------------------------------------------------ - else - if (nByteOrg_1 == 0xF0) - { - nEncodingType = 7; - nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x90, 0xBF); - nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByteOrg_4 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByte_2 = nByteOrg_2-0x90; - nByte_3 = nByteOrg_3-0x80; - nByte_4 = nByteOrg_4-0x80; - nUTF8 = FileHelper.impl_convertBytesToChar(0, nByte_2, nByte_3, nByte_4); - } - // ------------------------------------------------------------ - // 08 - // 1 byte: 111100xx - // 2 byte: 10xxxxxx - // 3 byte: 10xxxxxx - // 3 byte: 10xxxxxx - // ------------------------------------------------------------ - else - if ( - (nByteOrg_1 >= 0xF1) && - (nByteOrg_1 <= 0xF3) - ) - { - nEncodingType = 8; - nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByteOrg_4 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByte_1 = nByteOrg_1-0xF1; - nByte_2 = nByteOrg_2-0x80; - nByte_3 = nByteOrg_3-0x80; - nByte_4 = nByteOrg_4-0x80; - nUTF8 = FileHelper.impl_convertBytesToChar(nByte_1, nByte_2, nByte_3, nByte_4); - } - // ------------------------------------------------------------ - // 09 - // 1 byte: 11110100 - // 2 byte: 10xxxxxx - // 3 byte: 10xxxxxx - // 4 byte: 10xxxxxx - // ------------------------------------------------------------ - else - if (nByteOrg_1 == 0xF0) - { - nEncodingType = 9; - nByteOrg_2 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByteOrg_3 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByteOrg_4 = FileHelper.impl_readAndCheckNextByte(aBuffer, i++, nReadCount, 0x80, 0xBF); - nByte_2 = nByteOrg_2-0x80; - nByte_3 = nByteOrg_3-0x80; - nByte_4 = nByteOrg_4-0x80; - nUTF8 = FileHelper.impl_convertBytesToChar(0, nByte_2, nByte_3, nByte_4); - } - // wrong encoding ? - else - { - throw new java.lang.Exception("Non well formed UTF-8 encoding."); - } - - sBuffer.append(nUTF8); - // -> DEBUG ! - FileHelper.logEncodingData(sLog, nUTF8, nByteOrg_1, nByteOrg_2, nByteOrg_3, nByteOrg_4, nByte_1, nByte_2, nByte_3, nByte_4, nEncodingType); - // <- DEBUG ! - } - } - - } - catch(java.lang.Throwable ex) - { - // -> DEBUG ! - FileHelper.logEncodingData(sLog, nUTF8, nByteOrg_1, nByteOrg_2, nByteOrg_3, nByteOrg_4, nByte_1, nByte_2, nByte_3, nByte_4, nEncodingType); - - java.io.File aDir = new java.io.File(aFile.getParent()); - java.lang.String sDump = aFile.getName(); - java.io.File aDump = FileHelper.createUniqueFile(aDir, sDump, "dump"); - FileHelper.writeEncodedBufferToFile(aDump, "UTF-8", false, sLog); - // <- DEBUG ! - - java.lang.String sMsg = "File '"+aFile.getPath()+"' is not encoded right as UTF-8."; - throw new java.io.IOException(sMsg); - } - - aByteStream.close(); - } - - //___________________________________________ - - /** writes the given string buffer into the specified file - * using the specified encoding. - * - * Further it can be set, if the file should be expanded - * or replaced by this new string buffer. - * - * @param aFile - * must point to a system file. It can already exist! - * e.g.: "c:\temp\test.txt" - * "/tmp/test.txt" - * - * @param sEncoding - * will be used to encode the string content inside the file. - * e.g.: "UTF8" - * - * @param bAppend - * specify if an already existing file will be - * expanded or replaced. - * - * @param sBuffer - * the new string content for this file. - */ - public static void writeEncodedBufferToFile(java.io.File aFile , - java.lang.String sEncoding, - boolean bAppend , - java.lang.StringBuffer sBuffer ) - throws java.io.IOException - { - java.io.FileOutputStream aByteStream = new java.io.FileOutputStream(aFile.getAbsolutePath(), bAppend); - java.io.OutputStreamWriter aEncodedWriter = new java.io.OutputStreamWriter(aByteStream, sEncoding); - - java.lang.String sTemp = sBuffer.toString(); - aEncodedWriter.write(sTemp, 0, sTemp.length()); - - aEncodedWriter.flush(); - aEncodedWriter.close(); - - if (!aFile.exists()) - throw new java.io.IOException("File \""+aFile.getAbsolutePath()+"\" not written correctly."); - } -} diff --git a/l10ntools/source/filter/utils/Logger.java b/l10ntools/source/filter/utils/Logger.java deleted file mode 100644 index 2b206b351e8a..000000000000 --- a/l10ntools/source/filter/utils/Logger.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.filter.config.tools.utils; - -import java.lang.*; -import java.util.*; - -/** can be used to print out some debug messages - * and group it into warnings/errors or info statements. - * - * - */ -public class Logger -{ - /** only error message will be shown. */ - public static final int LEVEL_ERRORS = 1; - - /** only errors and warnings will be shown. */ - public static final int LEVEL_WARNINGS = 2; - - /** enable errors/warnings and some global info - * message. */ - public static final int LEVEL_GLOBALINFOS = 3; - - /** enable anything! */ - public static final int LEVEL_DETAILEDINFOS = 4; - - //___________________________________________ - // member - - /** enable/disable different output level. - * e.g. warnings/errors/infos */ - private int m_nLevel; - - //___________________________________________ - // ctor - - /** initialize new debug object with the specified - * debug level. - * - * @param nLevel - * the new debug level. - * See const values LEVEL_xxx too. - */ - public Logger(int nLevel) - { - m_nLevel = nLevel; - } - - //___________________________________________ - // interface - - /** initialize new debug object with a default - * debug level. - */ - public Logger() - { - m_nLevel = LEVEL_DETAILEDINFOS; - } - - //___________________________________________ - // interface - - /** prints out an exception ... if the right level is set. - * - * @param ex - * the exception object - */ - public synchronized void setException(java.lang.Throwable ex) - { - if (m_nLevel >= LEVEL_ERRORS) - { - System.err.println("Exception:\n"); - ex.printStackTrace(); - } - } - - //___________________________________________ - // interface - - /** prints out an error ... if the right level is set. - * - * @param sError - * the error message. - */ - public synchronized void setError(java.lang.String sError) - { - if (m_nLevel >= LEVEL_ERRORS) - System.err.println("Error :\t\""+sError+"\""); - } - - //___________________________________________ - // interface - - /** prints out a warning ... if the right level is set. - * - * @param sWarning - * the warning message. - */ - public synchronized void setWarning(java.lang.String sWarning) - { - if (m_nLevel >= LEVEL_WARNINGS) - System.err.println("Warning :\t\""+sWarning+"\""); - } - - //___________________________________________ - // interface - - /** prints out a global info message ... if the right level is set. - * - * Global infos should be used to describe a complex operation. - * E.g.: loading of a document. - * But not for every sub operation like e.g. analyzing lines - * during loading the document! - * - * @param sInfo - * the info message. - */ - public synchronized void setGlobalInfo(java.lang.String sInfo) - { - if (m_nLevel >= LEVEL_GLOBALINFOS) - System.out.println("Info :\t\""+sInfo+"\""); - } - - //___________________________________________ - // interface - - /** prints out a mode detailed info message ... if the right level is set. - * - * Such detailed message are e.g. "analyze line [n] of file ...". - * - * @param sInfo - * the info message. - */ - public synchronized void setDetailedInfo(java.lang.String sInfo) - { - if (m_nLevel >= LEVEL_DETAILEDINFOS) - System.out.println("Detail :\t\""+sInfo+"\""); - } -} diff --git a/l10ntools/source/filter/utils/MalformedCommandLineException.java b/l10ntools/source/filter/utils/MalformedCommandLineException.java deleted file mode 100644 index 1edd31be7c5c..000000000000 --- a/l10ntools/source/filter/utils/MalformedCommandLineException.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.filter.config.tools.utils; - -//_______________________________________________ -// imports - -import java.lang.*; - -//___________________________________________ -// types - -/** indicates a malformed command line. - * - * E.g. it must be thrown if the command line contains one item more then once, - * or use unsupported format. - */ -public class MalformedCommandLineException extends java.lang.Exception -{ - public MalformedCommandLineException() {} - public MalformedCommandLineException(java.lang.String sMsg) { super(sMsg); } -} diff --git a/l10ntools/source/filter/utils/XMLHelper.java b/l10ntools/source/filter/utils/XMLHelper.java deleted file mode 100644 index 390a6e59af95..000000000000 --- a/l10ntools/source/filter/utils/XMLHelper.java +++ /dev/null @@ -1,812 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -package com.sun.star.filter.config.tools.utils; - -//_______________________________________________ - -import java.lang.*; -import java.util.*; -import java.io.*; - -//_______________________________________________ - -/** - * It provides some constant values and some static helper routines - * which are neccessary to work with a xml file - especialy - * the filter configuration. - * - * - */ -public class XMLHelper -{ - - - /** its a possible value of the xml attribute "oor:type" and identify an integer type. */ - public static final java.lang.String XMLTYPE_INTEGER = "xs:int"; - - /** its a possible value of the xml attribute "oor:type" and identify an boolean type. */ - public static final java.lang.String XMLTYPE_BOOLEAN = "xs:boolean"; - - /** its a possible value of the xml attribute "oor:type" and identify an string type. */ - public static final java.lang.String XMLTYPE_STRING = "xs:string"; - - /** its a possible value of the xml attribute "oor:type" and identify an string list type. */ - public static final java.lang.String XMLTYPE_STRINGLIST = "oor:string-list"; - - /** its a xml attribute, which specify a property name. */ - public static final java.lang.String XMLATTRIB_OOR_NAME = "oor:name"; - - /** its a xml attribute, which specify a property type. */ - public static final java.lang.String XMLATTRIB_OOR_TYPE = "oor:type"; - - /** its a xml attribute, which specify a list separator. */ - public static final java.lang.String XMLATTRIB_OOR_SEPARATOR = "oor:separator"; - - /** its a xml attribute, which specify a localized value. */ - public static final java.lang.String XMLATTRIB_OOR_LOCALIZED = "oor:localized"; - - /** its a xml attribute, which specify a merge operation for cfg layering. */ - public static final java.lang.String XMLATTRIB_OOR_OP = "oor:op"; - - /** can be used as value for XMLATTRIB_OOR_OP. */ - public static final java.lang.String XMLATTRIB_OP_REPLACE = "replace"; - - /** its a xml attribute, which specify a locale value. */ - public static final java.lang.String XMLATTRIB_XML_LANG = "xml:lang"; - - /** its the tag name of a <value ...> entry. */ - public static final java.lang.String XMLTAG_VALUE = "value"; - - /** its the tag name of a <prop ...> entry. */ - public static final java.lang.String XMLTAG_PROP = "prop"; - - /** its the tag name of a <node ...> entry. */ - public static final java.lang.String XMLTAG_NODE = "node"; - - //___________________________________________ - // private const - - /** a static list of all possible separators, which can be used for configuration type string-list. */ - private static final java.lang.String[] DELIMS = {" ", ",", ";", ".", ":", "-", "_", "#", "'", "+", "*", "~", "=", "?"}; - - /** index of the default separator inside list DELIMS. - * Its neccessary to know such default separator; because it can - * be supressed as xml attribute of the corresponding value tag. */ - private static final int DEFAULT_SEPARATOR = 0; - - //___________________________________________ - - /** analyze the structures of the given XML node and - * return a property set of all found sub nodes. - * - * Such properties are organized as [name, value] pairs. - * The type of a xml node will be detected automaticly. - * Following types are supported: - * xs:int => java.lang.Integer - * xs:bool => java.lang.Boolean - * xs:string => java.lang.String - * oor:string-list => java.util.LinkedList[java.lang.String] - * oor:set => java.util.Vector[java.lang.Object] - * oor:localized => java.util.HashMap[java.lang.Object] - * - * @param aNode - * points directly to the xml node, where we should analyze - * the children nodes. - * - * @return [java.util.HashMap] - * contains every node name as key and its string(!) as value. - */ - public static java.util.HashMap convertNodeToPropSet(org.w3c.dom.Node aNode) - throws java.lang.Exception - { - java.util.HashMap aPropSet = new java.util.HashMap(); - - // get all child nodes, which seems to be properties - java.util.Vector lChildNodes = XMLHelper.extractChildNodesByTagName(aNode, XMLTAG_PROP); - java.util.Enumeration en1 = lChildNodes.elements(); - while(en1.hasMoreElements()) - { - org.w3c.dom.Node aChildNode = (org.w3c.dom.Node)en1.nextElement(); - - // read its name - java.lang.String sChildName = XMLHelper.extractNodeAttribByName(aChildNode, XMLATTRIB_OOR_NAME); - if (sChildName == null) - throw new java.io.IOException("unsupported format: could not extract child node name"); - - // read its type info - java.lang.String sChildType = XMLHelper.extractNodeAttribByName(aChildNode, XMLATTRIB_OOR_TYPE); - if (sChildType == null) - { - /** Special patch: - * If an xml tag has no type information set ... we can restore it - * by analyzing the already readed tag name :-) - * Not very nice - but it can help to read stripped xml files too. */ - sChildType = XMLHelper.getTypeForTag(sChildName); - if (sChildType == null) - throw new java.io.IOException("unsupported format: could not extract child node type"); - } - - // read its value(s?) - java.util.Vector lChildValues = XMLHelper.extractChildNodesByTagName(aChildNode, XMLTAG_VALUE); - java.util.Enumeration en2 = lChildValues.elements(); - int nValue = 0; - java.lang.Object aValue = null; - while(en2.hasMoreElements()) - { - org.w3c.dom.Node aValueNode = (org.w3c.dom.Node)en2.nextElement(); - java.lang.String sChildLocale = XMLHelper.extractNodeAttribByName(aValueNode, XMLATTRIB_XML_LANG); - boolean bLocalized = (sChildLocale != null); - - ++nValue; - - if (sChildType.equals(XMLTYPE_INTEGER)) - { - if (!bLocalized && nValue > 1) - throw new java.io.IOException("unsupported format: more then one value for non localized but atomic type detected"); - java.lang.String sData = ((org.w3c.dom.CharacterData)aValueNode.getFirstChild()).getData(); - aValue = new java.lang.Integer(sData); - } - else - if (sChildType.equals(XMLTYPE_BOOLEAN)) - { - if (!bLocalized && nValue > 1) - throw new java.io.IOException("unsupported format: more then one value for non localized but atomic type detected"); - java.lang.String sData = ((org.w3c.dom.CharacterData)aValueNode.getFirstChild()).getData(); - aValue = new java.lang.Boolean(sData); - } - else - if (sChildType.equals(XMLTYPE_STRING)) - { - if (!bLocalized && nValue > 1) - throw new java.io.IOException("unsupported format: more then one value for non localized but atomic type detected"); - - java.lang.String sData = ((org.w3c.dom.CharacterData)aValueNode.getFirstChild()).getData(); - - java.util.HashMap lLocalized = null; - if (bLocalized) - { - if (aValue == null) - aValue = new java.util.HashMap(); - lLocalized = (java.util.HashMap)aValue; - lLocalized.put(sChildLocale, sData); - } - else - aValue = sData; - } - else - if (sChildType.equals(XMLTYPE_STRINGLIST)) - { - if (!bLocalized && nValue > 1) - throw new java.io.IOException("unsupported format: more then one value for non localized but atomic type detected"); - - java.lang.String sSeparator = XMLHelper.extractNodeAttribByName(aChildNode, XMLATTRIB_OOR_SEPARATOR); - if (sSeparator == null) - sSeparator = " "; - - java.lang.String sData = ((org.w3c.dom.CharacterData)aValueNode.getFirstChild()).getData(); - sData = sData.replace('\t', ' '); - sData = sData.replace('\n', ' '); - java.util.StringTokenizer aTokenizer = new java.util.StringTokenizer(sData, sSeparator); - java.util.Vector lList = new java.util.Vector(); - while(aTokenizer.hasMoreTokens()) - { - java.lang.String sToken = (java.lang.String)aTokenizer.nextToken(); - sToken.trim(); - if (sToken.length() < 1) - continue; - lList.add(sToken); - } - aValue = lList; - } - - aPropSet.put(sChildName, aValue); - } - } - - return aPropSet; - } - - //___________________________________________ - - private static java.lang.String getTypeForTag(java.lang.String sTag) - { - java.lang.String sType = null; - - if ( - (sTag.equals(Cache.PROPNAME_DATA )) || - (sTag.equals(Cache.PROPNAME_NAME )) || - (sTag.equals(Cache.PROPNAME_UINAME )) || - (sTag.equals(Cache.PROPNAME_MEDIATYPE )) || - (sTag.equals(Cache.PROPNAME_CLIPBOARDFORMAT )) || - (sTag.equals(Cache.PROPNAME_PREFERREDFILTER )) || - (sTag.equals(Cache.PROPNAME_DETECTSERVICE )) || - (sTag.equals(Cache.PROPNAME_FRAMELOADER )) || - (sTag.equals(Cache.PROPNAME_CONTENTHANDLER )) || - (sTag.equals(Cache.PROPNAME_DOCUMENTSERVICE )) || - (sTag.equals(Cache.PROPNAME_FILTERSERVICE )) || - (sTag.equals(Cache.PROPNAME_TEMPLATENAME )) || - (sTag.equals(Cache.PROPNAME_TYPE )) || - (sTag.equals(Cache.PROPNAME_UICOMPONENT )) - ) - sType = XMLTYPE_STRING; - else - if ( - (sTag.equals(Cache.PROPNAME_PREFERRED )) || - (sTag.equals("Installed" )) - ) - sType = XMLTYPE_BOOLEAN; - else - if ( - (sTag.equals(Cache.PROPNAME_UIORDER )) || - (sTag.equals(Cache.PROPNAME_DOCUMENTICONID )) || - (sTag.equals(Cache.PROPNAME_FILEFORMATVERSION)) - ) - sType = XMLTYPE_INTEGER; - else - if ( - (sTag.equals(Cache.PROPNAME_URLPATTERN )) || - (sTag.equals(Cache.PROPNAME_EXTENSIONS )) || - (sTag.equals(Cache.PROPNAME_USERDATA )) || - (sTag.equals(Cache.PROPNAME_FLAGS )) || - (sTag.equals(Cache.PROPNAME_TYPES )) - ) - sType = XMLTYPE_STRINGLIST; - - if (sType == null) - System.err.println("getTypeForTag("+sTag+") = "+sType); - - return sType; - } - - //___________________________________________ - - /** return a xml representation of the given property set. - * - * @param aPropSet - * a set of <name,value> pairs, which should be translated to xml - * - * @return [java.lang.String] - * the xml string representation. - * - * @throws [java.lang.Exception] - * if anything during convertion fill fail. - */ - public static java.lang.String convertPropSetToXML(java.util.HashMap aPropSet , - int nPrettyTabs) - throws java.lang.Exception - { - java.lang.StringBuffer sXML = new java.lang.StringBuffer(256); - - java.util.Iterator it1 = aPropSet.keySet().iterator(); - while(it1.hasNext()) - { - java.lang.String sProp = (java.lang.String)it1.next(); - java.lang.Object aVal = aPropSet.get(sProp); - - sProp = encodeHTMLSigns(sProp); - - // is it a simple type? - if ( - (aVal instanceof java.lang.Integer) || - (aVal instanceof java.lang.Boolean) || - (aVal instanceof java.lang.String ) - ) - { - sXML.append(XMLHelper.convertSimpleObjectToXML(sProp, aVal, nPrettyTabs)); - continue; - } - - // no! - // is it a list value? - if (aVal instanceof java.util.Vector) - { - java.util.Vector lVal = (java.util.Vector)aVal; - sXML.append(XMLHelper.convertListToXML(sProp, lVal, nPrettyTabs)); - continue; - } - - // its a localized value? - if (aVal instanceof java.util.HashMap) - { - java.util.HashMap lVal = (java.util.HashMap)aVal; - sXML.append(XMLHelper.convertLocalizedValueToXML(sProp, lVal, nPrettyTabs)); - continue; - } - - // unknown type! - java.lang.StringBuffer sMsg = new java.lang.StringBuffer(256); - sMsg.append("unsupported object type detected."); - sMsg.append("\ttype ? : \""+sProp+"\" = "+aVal); - sMsg.append("\tprop set: \""+aPropSet ); - throw new java.lang.Exception(sMsg.toString()); - } - - return sXML.toString(); - } - - public static java.lang.String encodeHTMLSigns(java.lang.String sValue) - { - java.lang.StringBuffer sSource = new java.lang.StringBuffer(sValue); - java.lang.StringBuffer sDestination = new java.lang.StringBuffer(1000 ); - - for (int i=0; i<sSource.length(); ++i) - { - char c = sSource.charAt(i); - if (c == '&') - sDestination.append("&"); - else - sDestination.append(c); - } - - java.lang.String sReturn = sDestination.toString(); - if (!sReturn.equals(sValue)) - System.out.println("encode \""+sValue+"\" => \""+sReturn+"\""); - - return sReturn; - } - - //___________________________________________ - - /** return a xml representation of an atomic property. - * - * Atomic property types are e.g. Integer, Boolean, String. - * - * @param sName - * the name of the property. - - * @param aValue - * the value of the property. - * - * @param nPrettyTabs - * count of tab signs for pretty format the xml code :-) - * - * @return [java.lang.String] - * the xml string representation. - * - * @throws [java.lang.Exception] - * if anything during convertion fill fail. - */ - private static java.lang.String convertSimpleObjectToXML(java.lang.String sName , - java.lang.Object aValue , - int nPrettyTabs) - throws java.lang.Exception - { - java.lang.StringBuffer sXML = new java.lang.StringBuffer(256); - for (int t=0; t<nPrettyTabs; ++t) - sXML.append("\t"); - - if (aValue instanceof java.lang.Integer) - { - sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\">"); - sXML.append("<value>"+aValue.toString()+"</value>"); - sXML.append("</prop>\n"); - } - else - if (aValue instanceof java.lang.Boolean) - { - sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\">"); - sXML.append("<value>"+aValue.toString()+"</value>"); - sXML.append("</prop>\n"); - } - else - if (aValue instanceof java.lang.String) - { - sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\""); - java.lang.String sValue = (java.lang.String)aValue; - - sValue = encodeHTMLSigns(sValue); - - if (sValue.length() < 1) - sXML.append("/>\n"); - else - { - sXML.append("><value>"+sValue+"</value>"); - sXML.append("</prop>\n"); - } - } - else - { - System.err.println("name = "+sName); - System.err.println("value = "+aValue); - // ! can be used outside to detect - that it was not a simple type :-) - throw new java.lang.Exception("not an atomic type."); - } - - return sXML.toString(); - } - - //___________________________________________ - - /** return a xml representation of a string-list property. - * - * @param sName - * the name of the property. - - * @param aValue - * the value of the property. - * - * @param nPrettyTabs - * count of tab signs for pretty format the xml code :-) - * - * @return [java.lang.String] - * the xml string representation. - * - * @throws [java.lang.Exception] - * if anything during convertion fill fail. - */ - private static java.lang.String convertListToXML(java.lang.String sName , - java.util.Vector aValue , - int nPrettyTabs) - throws java.lang.Exception - { - java.lang.StringBuffer sXML = new java.lang.StringBuffer(256); - - for (int t=0; t<nPrettyTabs; ++t) - sXML.append("\t"); - - int c = aValue.size(); - if (c < 1) - { - sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\"/>\n"); - return sXML.toString(); - } - - // step over all list items and add it to a string buffer - // Every item will be separated by a default separator "\n" first. - // Because "\n" is not a valid separator at all and can`t occure inside - // our list items. During we step over all items, we check if our current separator - // (we use a list of possible ones!) clash with an item. - // If it clash - we step to the next possible separator. - // If our list of possible separator values runs out of range we throw - // an exception :-) Its better then generating of wrong values - // If we found a valid seperator - we use it to replace our "\n" place holder - // at the end of the following loop ... - - int d = 0; - java.lang.StringBuffer sValBuff = new java.lang.StringBuffer(256); - for (int i=0; i<c; ++i) - { - // get the next list item - java.lang.Object aItem = aValue.get(i); - if (!(aItem instanceof java.lang.String)) - throw new java.lang.Exception("Current implementation supports string-list only!"); - - java.lang.String sValue = (java.lang.String)aItem; - - sValue = encodeHTMLSigns(sValue); - - // append item with default separator, which isn a valid separator at all - // But supress adding of the separator if last element is reached. - sValBuff.append(sValue); - if (i<(c-1)) - sValBuff.append("\n"); - - // check for delim clash - // Attention: An empty (means default) element forbid using - // of a whitespace character as separator! - while(true) - { - if (d >= DELIMS.length) - throw new java.lang.Exception("No valid separator found for a string list item."); - if (sValue.length() < 1 && DELIMS[d].equals(" ")) - { - ++d; - continue; - } - if (sValue.indexOf(DELIMS[d]) != -1) - { - ++d; - continue; - } - break; - } - } - - // replace default separator with right one - System.out.println("TODO: must be adapted to java 1.3 :-("); - System.exit(-1); -//TODO_JAVA java.lang.String sListVal = sValBuff.toString().replaceAll("\n", DELIMS[d]); - java.lang.String sListVal = null; - - sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\">"); - if (d == DEFAULT_SEPARATOR) - sXML.append("<value>"); - else - sXML.append("<value "+XMLATTRIB_OOR_SEPARATOR+"=\""+DELIMS[d]+"\">"); - sXML.append(sListVal); - sXML.append("</value>"); - sXML.append("</prop>\n"); - - return sXML.toString(); - } - - //___________________________________________ - - /** return a xml representation of a localized property. - * - * @param sName - * the name of the property. - - * @param aValue - * the value of the property. - * - * @param nPrettyTabs - * count of tab signs for pretty format the xml code :-) - * - * @return [java.lang.String] - * the xml string representation. - * - * @throws [java.lang.Exception] - * if anything during convertion fill fail. - */ - private static java.lang.String convertLocalizedValueToXML(java.lang.String sName , - java.util.HashMap aValue , - int nPrettyTabs) - throws java.lang.Exception - { - java.lang.StringBuffer sXML = new java.lang.StringBuffer(256); - - int c = aValue.size(); - if (c < 1) - throw new java.lang.Exception("Cant detect type of localized values. Because the given list is empty."); - - for (int t=0; t<nPrettyTabs; ++t) - sXML.append("\t"); - // !Our localized values must be formated at a deeper coloum - // then its property name! - ++nPrettyTabs; - - sXML.append("<prop "+XMLATTRIB_OOR_NAME+"=\""+sName+"\">\n"); - java.util.Iterator it = aValue.keySet().iterator(); -// boolean bTypeKnown = false; - while(it.hasNext()) - { - java.lang.String sLocale = (java.lang.String)it.next(); - java.lang.Object aLocalizedValue = aValue.get(sLocale); -/* - if (!bTypeKnown) - { - bTypeKnown = true; - if (aLocalizedValue instanceof java.lang.Integer) - sXML.append(" "+XMLATTRIB_OOR_TYPE+"=\""+XMLTYPE_INTEGER+"\">\n"); - else - if (aLocalizedValue instanceof java.lang.Boolean) - sXML.append(" "+XMLATTRIB_OOR_TYPE+"=\""+XMLTYPE_BOOLEAN+"\">\n"); - else - if (aLocalizedValue instanceof java.lang.String) - sXML.append(" "+XMLATTRIB_OOR_TYPE+"=\""+XMLTYPE_STRING+"\">\n"); - else - throw new java.lang.Exception("Unsupported type for localized value detected."); - } -*/ - java.lang.String sLocValue = aLocalizedValue.toString(); - java.lang.String sValue = encodeHTMLSigns(sLocValue); - - for (int t=0; t<nPrettyTabs; ++t) - sXML.append("\t"); - sXML.append("<value "+XMLATTRIB_XML_LANG+"=\""+sLocale+"\">"+sValue+"</value>\n"); - } - --nPrettyTabs; - for (int t=0; t<nPrettyTabs; ++t) - sXML.append("\t"); - sXML.append("</prop>\n"); - - return sXML.toString(); - } - - //___________________________________________ - - /** returns the value of an attribute of the given node. - * - * If the given node represent an lement node, may it supports some attributes. - * Then this method search for an attribute with the specified name and return it's value. - * If nothing could be found ... or the given node isn't a suitable node ... it returns null. - * - * @param aNode - * the node, which should be analyzed. - * - * @param sAttrib - * name of the attribute, which should be searched. - * - * @return The value of the specified attribute if it could be found at the given node. - * Can be null if node doesn't support attributes or the searched one does not exist there. - */ - public static java.lang.String extractNodeAttribByName(org.w3c.dom.Node aNode , - java.lang.String sAttrib) - throws java.lang.Exception - { - // We can get valid attributes for element nodes only! - if (aNode.getNodeType() != org.w3c.dom.Node.ELEMENT_NODE) - { -// System.err.println("not an element node"); - return null; - } - - // may it supports attributes in general ... but doesn't have anyone realy. - org.w3c.dom.NamedNodeMap lAttribs = aNode.getAttributes(); - if (lAttribs==null) - { -// System.err.println("no attributes at all"); - return null; - } - - // step over the attribute list and search for the requested one - for (int i=0; i<lAttribs.getLength(); ++i) - { - org.w3c.dom.Attr aAttrib = (org.w3c.dom.Attr)lAttribs.item(i); - if (aAttrib.getName().equals(sAttrib)) - { - java.lang.String sValue = aAttrib.getValue(); - return sValue; - } - } - - // the searched attribute was not found! -// System.err.println("required attribute \""+sAttrib+"\" does not exist for node ["+aNode.toString()+"]"); - return null; - } - - //___________________________________________ - - /** returns a list of children, which are ELEMENT_NODES and have the right tag name. - * - * It analyze the list of all possible child nodes. Only ELEMENT_NODES are candidates. - * All other ones will be ignored. Further these element nodes are compared by it's tag - * names. If it match with the specified value it's added to the return list. - * So the return list includes references to the DOM tree nodes only, which are child - * element nodes with the right tag name. - * - * @param aNode - * provides access to the child nodes, which should be analyzed - * - * @param sTag - * the searched tag name. - * - * @return A list of child nodes, which are element nodes and have the right tag name. - */ - public static java.util.Vector extractChildNodesByTagName(org.w3c.dom.Node aNode, - java.lang.String sTag ) - { - // extract first all ELEMENT_NODES of he given parent - // Such nodes only provide tag names. - java.util.Vector lChildren = XMLHelper.extractChildNodesByType(aNode,org.w3c.dom.Node.ELEMENT_NODE); - java.util.Vector lExtractedChildren = new java.util.Vector(lChildren.size()); - - // step over the list and search for the right tags using the specified name - java.util.Enumeration en = lChildren.elements(); - while (en.hasMoreElements()) - { - org.w3c.dom.Node aChild = (org.w3c.dom.Node)en.nextElement(); - if (aChild.getNodeName().equals(sTag)) - lExtractedChildren.add(aChild); - } - - // pack(!) and return the list - lExtractedChildren.trimToSize(); - return lExtractedChildren; - } - - //___________________________________________ - - /** returns a list of children, which supports the right node type. - * - * It analyze the list of all possible child nodes. If a node represent the right node type - * it is added to the return list. Otherwhise it will be ignored. - * - * @param aNode - * provides access to the list of possible children nodes. - * - * @param nType - * represent the searched node type. - * Possible values are constant fields of a org.w3c.dom.Node - e.g. org.w3c.dom.Node.ELEMENT_NODE. - * - * @return A list of child nodes, which provides the right node type. - */ - public static java.util.Vector extractChildNodesByType(org.w3c.dom.Node aNode, - short nType) - { - // get list of all possibe children and reserve enough space for our return list - // Attention: A null pointer is not allowed for return! (means lExtractedChildren) - org.w3c.dom.NodeList lChildren = aNode.getChildNodes(); - int c = lChildren.getLength(); - java.util.Vector lExtractedChildren = new java.util.Vector(c); - - // step of these children and select only needed ones - for (int i=0; i<c; ++i) - { - org.w3c.dom.Node aChild = lChildren.item(i); - if (aChild.getNodeType() == nType) - lExtractedChildren.add(aChild); - } - - // pack(!) and return the list - lExtractedChildren.trimToSize(); - return lExtractedChildren; - } - - //___________________________________________ - - /** generates an xml header, using parameters. - * - * @param sVersion - * number of the xml version. - * - * @param sEncoding - * used file encoding. - * - * @param sPath - * name of the configuration root. - * - * @param sPackage - * name of the configuration package. - * - * @param bLanguagepack - * force creation of a special header, - * which is needed for language packs only. - * - * @return [java.lang.String] - * the generated xml header. - -*/ - public static java.lang.String generateHeader(java.lang.String sVersion , - java.lang.String sEncoding , - java.lang.String sPath , - java.lang.String sPackage , - boolean bLanguagePack) - { - java.lang.StringBuffer sHeader = new java.lang.StringBuffer(256); - - if (bLanguagePack) - { - sHeader.append("<?xml version=\""); - sHeader.append(sVersion); - sHeader.append("\" encoding=\""); - sHeader.append(sEncoding); - sHeader.append("\"?>\n"); - sHeader.append("<oor:component-data oor:package=\""); - sHeader.append(sPath); - sHeader.append("\" oor:name=\""); - sHeader.append(sPackage); - sHeader.append("\" xmlns:install=\"http://openoffice.org/2004/installation\""); - sHeader.append(" xmlns:oor=\"http://openoffice.org/2001/registry\""); - sHeader.append(" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\""); - sHeader.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"); - } - else - { - sHeader.append("<?xml version=\""); - sHeader.append(sVersion); - sHeader.append("\" encoding=\""); - sHeader.append(sEncoding); - sHeader.append("\"?>\n"); - sHeader.append("<oor:component-data xmlns:oor=\"http://openoffice.org/2001/registry\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" oor:package=\""); - sHeader.append(sPath); - sHeader.append("\" oor:name=\""); - sHeader.append(sPackage); - sHeader.append("\">\n"); - } - - return sHeader.toString(); - } - - public static java.lang.String generateFooter() - { - return "</oor:component-data>\n"; - } -} |