# HG changeset patch # User Philip Nienhuis # Date 1399065963 25200 # Node ID 700714c099a22a26c2849ff2702e3d74b6287a6b # Parent 04adeda9b83db5a82c80e1531bc5149eb41c5927 Add new function javachk for Matlab compatibility. * scripts/java/javachk.m: New function. * scripts/java/module.mk: Add function to build system. * NEWS: Add javachk to list of new functions for 4.2 * java.txi: Add function to manual. * __unimplemented__.m: Remove from list of unimplemented functions. * usejava.m: Mention javachk in seealso list. diff -r 04adeda9b83d -r 700714c099a2 NEWS --- a/NEWS Fri May 02 10:43:06 2014 -0700 +++ b/NEWS Fri May 02 14:26:03 2014 -0700 @@ -29,6 +29,7 @@ dir_in_loadpath hgload hgsave + javachk numfields ** Deprecated functions. diff -r 04adeda9b83d -r 700714c099a2 doc/interpreter/java.txi --- a/doc/interpreter/java.txi Fri May 02 10:43:06 2014 -0700 +++ b/doc/interpreter/java.txi Fri May 02 14:26:03 2014 -0700 @@ -95,9 +95,11 @@ @cindex path, removing from classpath @DOCSTRING(javarmpath) -The following four functions provide information and control over the interface +The following functions provide information and control over the interface between Octave and the Java Virtual Machine. +@DOCSTRING(javachk) + @DOCSTRING(usejava) @cindex memory, displaying Java memory status diff -r 04adeda9b83d -r 700714c099a2 scripts/help/__unimplemented__.m --- a/scripts/help/__unimplemented__.m Fri May 02 10:43:06 2014 -0700 +++ b/scripts/help/__unimplemented__.m Fri May 02 14:26:03 2014 -0700 @@ -672,7 +672,6 @@ "isjava", "isocaps", "isstudent", - "javachk", "ldl", "libfunctions", "libfunctionsview", diff -r 04adeda9b83d -r 700714c099a2 scripts/java/javachk.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/java/javachk.m Fri May 02 14:26:03 2014 -0700 @@ -0,0 +1,151 @@ +## Copyright (C) 2014 Philip Nienhuis +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} javachk (@var{feature}) +## @deftypefnx {Function File} {} javachk (@var{feature}, @var{component}) +## @deftypefnx {Function File} {@var{msg} =} javachk (@dots{}) +## Check for the presence of the Java @var{feature} in the current session +## and print or return an error message if it is not. +## +## Possible features are: +## +## @table @asis +## @item @qcode{"awt"} +## Abstract Window Toolkit for GUIs. +## +## @item @qcode{"desktop"} +## Interactive desktop is running. +## +## @item @qcode{"jvm"} +## Java Virtual Machine. +## +## @item @qcode{"swing"} +## Swing components for lightweight GUIs. +## @end table +## +## If @var{feature} is supported and: +## +## @itemize @bullet +## @item +## No output argument is requested: +## +## Return an empty string +## +## @item +## An output argument is requested: +## +## Return a struct with fields @qcode{"feature"} and @qcode{"identifier"} +## both empty +## +## @end itemize +## +## If @var{feature} is not supported and: +## +## @itemize @bullet +## @item +## No output argument is requested: +## +## Emit an error message. +## +## @item +## An output argument is requested: +## +## Return a struct with field @qcode{"feature"} set to @var{feature} and +## field @qcode{"identifier"} set to @var{component} +## +## @end itemize +## +## The optional input @var{component} will be used in place of @var{feature} +## in any error messages for greater specificity. +## +## @code{javachk} determines if specific Java features are available in an +## Octave session. This function is provided for scripts which may alter +## their behavior based on the availability of Java. The feature +## @qcode{"desktop"} is never available as Octave has no Java-based desktop. +## Other features may be available if Octave was compiled with the Java +## Interface and Java is installed. +## +## @seealso{error, usejava} +## @end deftypefn + +## Author: Philip Nienhuis +## Created: 2014-04-19 + +function msg = javachk (feature, component="") + + msg = ""; + chk = false; + switch (feature) + ## For each feature, try methods() on a Java class of a feature + case "awt" + try + dum = methods ("java.awt.Frame"); + chk = true; + end_try_catch + case "desktop" + ## Octave has no Java based GUI/desktop, leave chk = false + case "jvm" + try + dum = methods ("java.lang.Runtime"); + chk = true; + end_try_catch + case "swing" + try + dum = methods ("javax.swing.Popup"); + chk = true; + end_try_catch + otherwise + error ("javachk: unrecognized feature '%s', can be one of 'awt'|'desktop'|'jvm'|'swing'\n", feature); + endswitch + + if (! chk) + ## Desired feature not present + if (nargout >= 1) + msg.message = sprintf ("javachk: %s is not supported", feature); + msg.identifier = component; + else + if (! isempty (component)) + err = sprintf ("javachk: %s is not supported\n", component); + else + err = sprintf ("javachk: %s is not supported\n", feature); + endif + error (err); + endif + endif + +endfunction + + +%!error javachk ("desktop") +%!error javachk ("desktop", "Java DESKTOP") +%!test +%! msg = javachk ("desktop"); +%! assert (msg.message, "javachk: desktop is not supported"); +%! assert (msg.identifier, ""); +%!test +%! msg = javachk ("desktop", "Java DESKTOP"); +%! assert (msg.message, "javachk: desktop is not supported"); +%! assert (msg.identifier, "Java DESKTOP"); + +%!testif HAVE_JAVA +%! assert (javachk ("jvm"), ""); + +%% Test input validation +%!error javachk ("foobar") + diff -r 04adeda9b83d -r 700714c099a2 scripts/java/module.mk --- a/scripts/java/module.mk Fri May 02 10:43:06 2014 -0700 +++ b/scripts/java/module.mk Fri May 02 14:26:03 2014 -0700 @@ -3,6 +3,7 @@ java_FCN_FILES = \ java/javaArray.m \ java/javaaddpath.m \ + java/javachk.m \ java/javaclasspath.m \ java/javamem.m \ java/javarmpath.m \ diff -r 04adeda9b83d -r 700714c099a2 scripts/java/usejava.m --- a/scripts/java/usejava.m Fri May 02 10:43:06 2014 -0700 +++ b/scripts/java/usejava.m Fri May 02 14:26:03 2014 -0700 @@ -43,6 +43,7 @@ ## @qcode{"desktop"} always returns @code{false} as Octave has no Java-based ## desktop. Other features may be available if Octave was compiled with the ## Java Interface and Java is installed. +## @seealso{javachk} ## @end deftypefn ## Author: Rik Wehbring