Matthias Brantner has proposed merging lp:~zorba-coders/zorba/dataf-module-fix into lp:zorba/data-formatting-module.
Requested reviews: Matthias Brantner (matthias-brantner) Cezar Andrei (cezar-andrei) For more details, see: https://code.launchpad.net/~zorba-coders/zorba/dataf-module-fix/+merge/105267 - improved search of dependent jars - removed dead code -- https://code.launchpad.net/~zorba-coders/zorba/dataf-module-fix/+merge/105267 Your team Zorba Coders is subscribed to branch lp:zorba/data-formatting-module.
=== modified file 'CMakeLists.txt' --- CMakeLists.txt 2012-04-30 09:55:44 +0000 +++ CMakeLists.txt 2012-05-09 20:55:19 +0000 @@ -25,6 +25,8 @@ FIND_PACKAGE (zorba_util-jvm_module QUIET) IF (zorba_util-jvm_module_FOUND) + INCLUDE ("${zorba_util-jvm_module_USE_FILE}") + IF (JNI_FOUND) INCLUDE_DIRECTORIES (${zorba_util-jvm_module_INCLUDE_DIRS}) === modified file 'src/com/zorba-xquery/www/modules/CMakeLists.txt' --- src/com/zorba-xquery/www/modules/CMakeLists.txt 2012-04-11 16:06:04 +0000 +++ src/com/zorba-xquery/www/modules/CMakeLists.txt 2012-05-09 20:55:19 +0000 @@ -12,9 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. - - - IF (NOT DEFINED XSL_FOP_HOME) IF (DEFINED ENV{XSL_FOP_HOME}) SET(XSL_FOP_HOME $ENV{XSL_FOP_HOME}) @@ -23,35 +20,35 @@ IF (NOT DEFINED XSL_FOP_HOME) IF (WIN32) - MESSAGE (STATUS "Environment variable XSL_FOP_HOME not defined, trying default: C:\\dev\\libraries\\fop-1.0") - SET (XSL_FOP_HOME "C:\\dev\\libraries\\fop-1.0") + SET (XSL_FOP_HOME "C:\\dev\\libraries\\fop-1.0 C:\\dev\\libraries\\fop-1.0\\lib C:\\dev\\libraries\\fop-1.0\\build") ELSE (WIN32) - MESSAGE (STATUS "Environment variable XSL_FOP_HOME not defined, trying defaults: " ${Java_LIBRARIES} " /usr/share/java/ /usr/share/java/fop/") - SET (XSL_FOP_HOME "/usr/share/java/ /usr/share/java/fop/ ${Java_LIBRARIES}") + SET (XSL_FOP_HOME /usr/share/java/ /usr/share/java/fop/ /opt/local/share/java/fop/1.0 /opt/local/share/java/fop/1.0 ${Java_LIBRARIES}) ENDIF (WIN32) + MESSAGE (STATUS "XSL_FOP_HOME not defined, trying defaults: ${XSL_FOP_HOME}") ENDIF (NOT DEFINED XSL_FOP_HOME) STRING(REGEX REPLACE "\\\\" "/" XSL_FOP_HOME "${XSL_FOP_HOME}") - MESSAGE (STATUS "XSL-FOP HOME: " ${XSL_FOP_HOME} ) - FIND_FILE( FOP_JAR NAMES fop.jar - PATHS ${XSL_FOP_HOME} ${XSL_FOP_HOME}/build ) - FIND_FILE( FOP_D1_JAR NAMES avalon-framework.jar - PATHS ${XSL_FOP_HOME} ${XSL_FOP_HOME}/lib ) - FIND_FILE( FOP_D2_JAR NAMES batik-all.jar - PATHS ${XSL_FOP_HOME} ${XSL_FOP_HOME}/lib ) - FIND_FILE( FOP_D3_JAR NAMES commons-io.jar - PATHS ${XSL_FOP_HOME} ${XSL_FOP_HOME}/lib ) - FIND_FILE( FOP_D4_JAR NAMES commons-logging.jar - PATHS ${XSL_FOP_HOME} ${XSL_FOP_HOME}/lib ) - FIND_FILE( FOP_D5_JAR NAMES serializer.jar - PATHS ${XSL_FOP_HOME} ${XSL_FOP_HOME}/lib ) - FIND_FILE( FOP_D6_JAR NAMES xalan.jar xalan2.jar - PATHS ${XSL_FOP_HOME} ${XSL_FOP_HOME}/lib ) - FIND_FILE( FOP_D7_JAR NAMES xmlgraphics-commons.jar - PATHS ${XSL_FOP_HOME} ${XSL_FOP_HOME}/lib ) + MESSAGE (STATUS "XSL-FOP HOME: ${XSL_FOP_HOME}") + ZORBA_FIND_JAR ( FOP_JAR NAMES fop + PATHS ${XSL_FOP_HOME} PATH_SUFFIXES build) + ZORBA_FIND_JAR ( FOP_D1_JAR NAMES avalon-framework + PATHS ${XSL_FOP_HOME} PATH_SUFFIXES lib ) + ZORBA_FIND_JAR ( FOP_D2_JAR NAMES batik-all + PATHS ${XSL_FOP_HOME} PATH_SUFFIXES lib ) + ZORBA_FIND_JAR ( FOP_D3_JAR NAMES commons-io + PATHS ${XSL_FOP_HOME} PATH_SUFFIXES lib ) + ZORBA_FIND_JAR ( FOP_D4_JAR NAMES commons-logging + PATHS ${XSL_FOP_HOME} PATH_SUFFIXES lib ) + ZORBA_FIND_JAR ( FOP_D5_JAR NAMES serializer + PATHS ${XSL_FOP_HOME} PATH_SUFFIXES lib ) + ZORBA_FIND_JAR ( FOP_D6_JAR NAMES xalan xalan2 + PATHS ${XSL_FOP_HOME} PATH_SUFFIXES lib ) + ZORBA_FIND_JAR ( FOP_D7_JAR NAMES xmlgraphics-commons + PATHS ${XSL_FOP_HOME} PATH_SUFFIXES lib ) - #MULTIPLE EXISTS CAN'T BE USED IN AN *IF* COMMAND, LOOKS LIKE A BUG ON CMAKE + # Multiple "EXISTS" clauses can't be used in a single IF() command; + # looks like a bug in cmake. SET(ALL_FOP FALSE) IF ( EXISTS ${FOP_JAR} ) IF ( EXISTS ${FOP_D1_JAR} ) @@ -70,8 +67,7 @@ ENDIF ( EXISTS ${FOP_D2_JAR} ) ENDIF ( EXISTS ${FOP_D1_JAR} ) ENDIF ( EXISTS ${FOP_JAR} ) - MESSAGE(STATUS "ALL_FOP:" ${ALL_FOP}) - + IF ( ALL_FOP ) MESSAGE(STATUS "FOP Libraries Found.") INCLUDE (CMakeJavaInformation ) @@ -101,5 +97,9 @@ ELSE ( ALL_FOP ) MESSAGE (STATUS "fop.jar and/or all its dependecies (avalon-framework.jar, batik-all.jar, commons-io.jar, commons-logging.jar, serializer.jar, xalan2.jar, xmlgraphics-commons.jar) not found skiping data-formating module") + MESSAGE ( STATUS " fop: " ${FOP_JAR} "\n avalon: " ${FOP_D1_JAR} + "\n batik: " ${FOP_D2_JAR} "\n io: " ${FOP_D3_JAR} + "\n logging: " ${FOP_D4_JAR} "\n serializer: " ${FOP_D5_JAR} " " + "\n xalan: " ${FOP_D6_JAR} "\n xmlgraphics: " ${FOP_D7_JAR} ) ENDIF ( ALL_FOP ) === modified file 'src/com/zorba-xquery/www/modules/xsl-fo.xq.src/xslfo.cpp' --- src/com/zorba-xquery/www/modules/xsl-fo.xq.src/xslfo.cpp 2012-04-11 13:45:56 +0000 +++ src/com/zorba-xquery/www/modules/xsl-fo.xq.src/xslfo.cpp 2012-05-09 20:55:19 +0000 @@ -62,36 +62,15 @@ const zorba::DynamicContext*) const; }; -class FindApacheFopFunction : public NonContextualExternalFunction { - private: - const ExternalModule* theModule; - ItemFactory* theFactory; - private: - void throwError(std::string aName) const; - public: - FindApacheFopFunction(const ExternalModule* aModule) : - theModule(aModule), theFactory(Zorba::getInstance(0)->getItemFactory()) {} - - virtual String getURI() const { return theModule->getURI(); } - - virtual String getLocalName() const { return "find-apache-fop"; } - - virtual ItemSequence_t - evaluate(const ExternalFunction::Arguments_t& args) const; -}; - class XSLFOModule : public ExternalModule { private: ExternalFunction* generatePDF; - ExternalFunction* findFop; public: XSLFOModule() : - generatePDF(new GeneratePDFFunction(this)), - findFop(new FindApacheFopFunction(this)) + generatePDF(new GeneratePDFFunction(this)) {} ~XSLFOModule() { delete generatePDF; - delete findFop; } virtual String getURI() const { return XSL_MODULE_NAMESPACE; } @@ -106,149 +85,10 @@ ExternalFunction* XSLFOModule::getExternalFunction(const String& localName) { if (localName == "generator-impl") { return generatePDF; - } else if (localName == "find-apache-fop") { - return findFop; - } + } return 0; } -void FindApacheFopFunction::throwError(std::string aName) const { - Item lQName = theFactory->createQName("http://www.zorba-xquery.com/modules/xsl-fo", - "JAR-NOT-FOUND"); - throw USER_EXCEPTION(lQName, aName); -} - -ItemSequence_t FindApacheFopFunction::evaluate(const ExternalFunction::Arguments_t& args) const -{ - std::string lDirectorySeparator(File::getDirectorySeparator()); - std::string lFopHome; - { - char* lFopHomeEnv = getenv("FOP_HOME"); - if (lFopHomeEnv != 0) { - lFopHome = lFopHomeEnv; - } -#ifdef APPLE - else { - // If Apache FOP is installed with Mac Ports, FOP - // is typicaly installed in /opt/local/share/java/fop, - // so we check here, if the installation directory can - // be found in this directory. - std::string lFopPath("/opt/local/share/java/fop/"); - File_t lRootDir = File::createFile(lFopPath); - if (lRootDir->exists() && lRootDir->isDirectory()) { - DirectoryIterator_t lFiles = lRootDir->files(); - std::string lFileName; - // The FOP directory is in a subdirectory with the version - // number - so we check all subdirectories to get the final - // path. - while (lFiles->next(lFileName)) { - File_t lFile = File::createFile(lFopPath + lFileName); - if (lFile->isDirectory()) { - std::stringstream lStr(lFileName); - double lDirDouble = 0.0; - if (lStr >> lDirDouble) { - if (lDirDouble != 0.0) { - lFopHome = lFopPath + lFileName; - break; - } - } - } - } - } - } -#endif - } - std::string lFopLibDir; - { - char* lEnv = getenv("FOP_LIB_DIR"); - if (lEnv != 0) { - lFopLibDir = lEnv; - } -#ifdef LINUX - // on a Ubuntu installation, all required - // jar files should be in /usr/share/java - // if Apache FOP is installed. - else { - lFopLibDir = "/usr/share/java"; - } -#endif - } - // If neither a path to the fop install dir, nor a path - // to the jar files was found so far, we throw an exception. - if (lFopHome == "" && lFopLibDir == "") { - throwError("None of the environment variables FOP_HOME and FOP_LIB_DIR have been set."); - } - std::string lFopJarFile; - { - // Here we look for the fop.jar file, which should be either in $FOP_HOME/build or - // in the directory, where all jar files are. - lFopJarFile = lFopHome + lDirectorySeparator + "build" + lDirectorySeparator + "fop.jar"; - std::string lFopJarFile1 = lFopJarFile; - File_t lJarFile = File::createFile(lFopJarFile); - if (!lJarFile->exists()) { - lFopJarFile = lFopLibDir + lDirectorySeparator + "fop.jar"; - lJarFile = File::createFile(lFopJarFile); - if (!lJarFile->exists()) { - std::string errmsg = "Could not find fop.jar. If you are using Ubuntu or Mac OS X, please make sure, "; - errmsg += "that you have installed it, else make sure, that you have set the envroinment variable "; - errmsg += "FOP_HOME or FOP_LIB_DIR correctly. Tried '"; - errmsg += lFopJarFile1; - errmsg += "' and '"; - errmsg += lFopJarFile; - errmsg += "'."; - throwError(errmsg); - } - } - } - std::vector<Item> lClassPath; - lClassPath.push_back(theFactory->createString(lFopJarFile)); - { - std::string lJarDir = lFopLibDir; - if (lFopHome != "") - lJarDir = lFopHome + lDirectorySeparator + "lib"; - // This is a list of all jar files, Apache Fop depends on. - std::list<std::string> lDeps; - lDeps.push_back("avalon-framework"); - lDeps.push_back("batik-all"); - lDeps.push_back("commons-io"); - lDeps.push_back("commons-logging"); - lDeps.push_back("serializer"); - lDeps.push_back("xalan"); - lDeps.push_back("xmlgraphics-commons"); - - File_t lJarDirF = File::createFile(lJarDir); - DirectoryIterator_t lFiles = lJarDirF->files(); - std::string lFile; size_t count = 0; - // We check for all files, if it is a potential dependency and add it to - // the result - while (lFiles->next(lFile)) { - // If the file is not a jar file, we don't do anything - if (lFile.substr(lFile.size() - 4, std::string::npos) != ".jar") - continue; - for (std::list<std::string>::iterator i = lDeps.begin(); i != lDeps.end(); ++i) { - std::string lSub = lFile.substr(0, i->size()); - if (lSub == *i) { - std::string lFull = lJarDir + lDirectorySeparator + lFile; - File_t f = File::createFile(lFull); - if (f->exists() && !f->isDirectory()) { - lClassPath.push_back(theFactory->createString(lFull)); - // We count all jar files we add to the dependencies. - ++count; - break; - } - } - } - } - // Last, we check if all dependencies are found - if (count < lDeps.size()) { - std::string errmsg = "Could not find "; - errmsg += lDeps.front(); - throwError(errmsg); - } - } - return ItemSequence_t(new VectorItemSequence(lClassPath)); -} - ItemSequence_t GeneratePDFFunction::evaluate(const ExternalFunction::Arguments_t& args, const zorba::StaticContext* aStaticContext, === modified file 'test/ExpQueryResults/data-formatting/xslfo.xml.res' --- test/ExpQueryResults/data-formatting/xslfo.xml.res 2012-03-12 22:08:04 +0000 +++ test/ExpQueryResults/data-formatting/xslfo.xml.res 2012-05-09 20:55:19 +0000 @@ -1,1 +1,1 @@ -<pdf><len>6484</len><start>JVBERi0xLj</start><end>AolJUVPRgo=</end></pdf> +<pdf><len>true</len><start>JVBERi0xLj</start></pdf> === modified file 'test/Queries/data-formatting/xslfo.xq' --- test/Queries/data-formatting/xslfo.xq 2012-03-12 22:08:04 +0000 +++ test/Queries/data-formatting/xslfo.xq 2012-05-09 20:55:19 +0000 @@ -21,7 +21,6 @@ let $len := fn:string-length($pdf) return <pdf> - <len> { $len }</len> + <len> { $len gt 6000 }</len> <start>{ fn:substring($pdf, 1, 10)}</start> - <end> { fn:substring($pdf, $len -10, $len)}</end> </pdf>
-- Mailing list: https://launchpad.net/~zorba-coders Post to : zorba-coders@lists.launchpad.net Unsubscribe : https://launchpad.net/~zorba-coders More help : https://help.launchpad.net/ListHelp