Compare commits
52 Commits
NETSCAPE_7
...
JAVADEV_PR
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be404ff8dc | ||
|
|
d3d5d7f268 | ||
|
|
fb4cad13ed | ||
|
|
d85ffa594d | ||
|
|
a023e8f34c | ||
|
|
cc4fa2f0f9 | ||
|
|
a230b7af54 | ||
|
|
907a6d8f90 | ||
|
|
6c165c11c1 | ||
|
|
0342bf660b | ||
|
|
0a9656e6e8 | ||
|
|
b7ff38852d | ||
|
|
d8560b0bbe | ||
|
|
1ed3a41988 | ||
|
|
3295f80e90 | ||
|
|
bd53a0cbcc | ||
|
|
43923172ba | ||
|
|
86f888b975 | ||
|
|
7897a8122d | ||
|
|
b0ee26348c | ||
|
|
d6cf78aa7f | ||
|
|
9252912fa8 | ||
|
|
8027aa1c6c | ||
|
|
89f18715ea | ||
|
|
bdfb4f5728 | ||
|
|
4ed8b2ef15 | ||
|
|
827c256347 | ||
|
|
36a5ecdb82 | ||
|
|
d21151a807 | ||
|
|
08ffe4e29e | ||
|
|
51aac1d5ff | ||
|
|
8e8c0141e7 | ||
|
|
2b6768af2c | ||
|
|
f6bb6b535e | ||
|
|
cfdf03ab78 | ||
|
|
be58a69635 | ||
|
|
6762c2e35e | ||
|
|
a55d0dfc9a | ||
|
|
97ae13697a | ||
|
|
ebde96a47c | ||
|
|
c7911276c4 | ||
|
|
92f6d4bce9 | ||
|
|
0d3dbf8685 | ||
|
|
aac9d66d94 | ||
|
|
6dae058df3 | ||
|
|
5f882971b6 | ||
|
|
4b92830b1f | ||
|
|
50183b5c63 | ||
|
|
028b876616 | ||
|
|
f9f59be02d | ||
|
|
e396c79df5 | ||
|
|
b55c520b41 |
@@ -1,80 +0,0 @@
|
||||
#!perl
|
||||
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# Simon Fraser <sfraser@netscape.com>
|
||||
#
|
||||
|
||||
require 5.004;
|
||||
|
||||
use strict;
|
||||
|
||||
use Cwd;
|
||||
use Moz::BuildUtils;
|
||||
use Moz::BuildCore;
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# Where have the build options gone?
|
||||
#
|
||||
# The various build flags have been centralized into one place.
|
||||
# The master list of options is in MozBuildFlags.txt. However,
|
||||
# you should never need to edit that file, or this one.
|
||||
#
|
||||
# To customize what gets built, or where to start the build,
|
||||
# edit the $prefs_file_name file in
|
||||
# System Folder:Preferences:Mozilla build prefs:
|
||||
# Documentation is provided in that file.
|
||||
#-------------------------------------------------------------
|
||||
|
||||
my($prefs_file_name) = "Mozilla opt build prefs";
|
||||
my($config_header_file_name) = ":mozilla:config:mac:DefinesOptions.h";
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# hashes to hold build options
|
||||
#-------------------------------------------------------------
|
||||
my(%build);
|
||||
my(%options);
|
||||
my(%filepaths);
|
||||
my(%optiondefines);
|
||||
|
||||
# Hash of input files for this build. Eventually, there will be
|
||||
# input files for manifests, and projects too.
|
||||
my(%inputfiles) = (
|
||||
"buildflags", "MozillaBuildFlags.txt",
|
||||
"checkoutdata", "MozillaCheckoutList.txt",
|
||||
"buildprogress", "¥ Mozilla opt progress",
|
||||
"buildmodule", "MozillaBuildList.pm",
|
||||
"checkouttime", "Mozilla last checkout"
|
||||
);
|
||||
#-------------------------------------------------------------
|
||||
# end build hashes
|
||||
#-------------------------------------------------------------
|
||||
|
||||
# set the build root directory, which is the the dir above mozilla
|
||||
SetupBuildRootDir(":mozilla:build:mac:build_scripts");
|
||||
|
||||
# Set up all the flags on $main::, like DEBUG, CARBON etc.
|
||||
# Override the defaults using the preferences files.
|
||||
SetupDefaultBuildOptions(0, ":mozilla:dist:viewer:", $config_header_file_name);
|
||||
|
||||
my($do_checkout) = 0;
|
||||
my($do_build) = 1;
|
||||
|
||||
RunBuild($do_checkout, $do_build, \%inputfiles, $prefs_file_name);
|
||||
@@ -1,80 +0,0 @@
|
||||
#!perl
|
||||
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# Simon Fraser <sfraser@netscape.com>
|
||||
#
|
||||
|
||||
require 5.004;
|
||||
|
||||
use strict;
|
||||
|
||||
use Cwd;
|
||||
use Moz::BuildUtils;
|
||||
use Moz::BuildCore;
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# Where have the build options gone?
|
||||
#
|
||||
# The various build flags have been centralized into one place.
|
||||
# The master list of options is in MozBuildFlags.txt. However,
|
||||
# you should never need to edit that file, or this one.
|
||||
#
|
||||
# To customize what gets built, or where to start the build,
|
||||
# edit the $prefs_file_name file in
|
||||
# System Folder:Preferences:Mozilla build prefs:
|
||||
# Documentation is provided in that file.
|
||||
#-------------------------------------------------------------
|
||||
|
||||
my($prefs_file_name) = "Mozilla debug build prefs";
|
||||
my($config_header_file_name) = ":mozilla:config:mac:DefinesOptionsDebug.h";
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# hashes to hold build options
|
||||
#-------------------------------------------------------------
|
||||
my(%build);
|
||||
my(%options);
|
||||
my(%filepaths);
|
||||
my(%optiondefines);
|
||||
|
||||
# Hash of input files for this build. Eventually, there will be
|
||||
# input files for manifests, and projects too.
|
||||
my(%inputfiles) = (
|
||||
"buildflags", "MozillaBuildFlags.txt",
|
||||
"checkoutdata", "MozillaCheckoutList.txt",
|
||||
"buildprogress", "¥ Mozilla debug progress",
|
||||
"buildmodule", "MozillaBuildList.pm",
|
||||
"checkouttime", "Mozilla last checkout"
|
||||
);
|
||||
#-------------------------------------------------------------
|
||||
# end build hashes
|
||||
#-------------------------------------------------------------
|
||||
|
||||
# set the build root directory, which is the the dir above mozilla
|
||||
SetupBuildRootDir(":mozilla:build:mac:build_scripts");
|
||||
|
||||
# Set up all the flags on $main::, like DEBUG, CARBON etc.
|
||||
# Override the defaults using the preferences files.
|
||||
SetupDefaultBuildOptions(1, ":mozilla:dist:viewer_debug:", $config_header_file_name);
|
||||
|
||||
my($do_pull) = 0; # overridden by flags and prefs
|
||||
my($do_build) = 1;
|
||||
|
||||
RunBuild($do_pull, $do_build, \%inputfiles, $prefs_file_name);
|
||||
@@ -1,595 +0,0 @@
|
||||
#!perl -w
|
||||
package Moz::BuildCore;
|
||||
|
||||
require 5.004;
|
||||
require Exporter;
|
||||
|
||||
use strict;
|
||||
use vars qw( @ISA @EXPORT );
|
||||
|
||||
# perl includes
|
||||
use Cwd;
|
||||
use POSIX;
|
||||
use Time::Local;
|
||||
use File::Basename;
|
||||
use LWP::Simple;
|
||||
|
||||
# homegrown
|
||||
use Moz::Moz;
|
||||
use Moz::Jar;
|
||||
use Moz::BuildFlags;
|
||||
use Moz::BuildUtils;
|
||||
use Moz::CodeWarriorLib;
|
||||
|
||||
# use MozillaBuildList; # eventually, this should go away, and be replaced by data input
|
||||
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(
|
||||
RunBuild
|
||||
);
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// DoPrebuildCheck
|
||||
#//
|
||||
#// Check the build tools etc before running the build.
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub DoPrebuildCheck()
|
||||
{
|
||||
SanityCheckBuildOptions();
|
||||
|
||||
# launch codewarrior and persist its location. Have to call this before first
|
||||
# call to getCodeWarriorPath().
|
||||
my($ide_path_file) = $main::filepaths{"idepath"};
|
||||
$ide_path_file = full_path_to($ide_path_file);
|
||||
LaunchCodeWarrior($ide_path_file);
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// SanityCheckBuildOptions
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub SanityCheckBuildOptions()
|
||||
{
|
||||
my($bad_options) = 0;
|
||||
|
||||
# Jar options
|
||||
if (!$main::options{chrome_jars} && !$main::options{chrome_files})
|
||||
{
|
||||
print "Warning: Both \$options{chrome_jars} and \$options{chrome_files} are off. You won't get any chrome.\n";
|
||||
$bad_options = 1;
|
||||
}
|
||||
|
||||
if (!$main::options{chrome_jars} && $main::options{use_jars})
|
||||
{
|
||||
print "Warning: \$options{chrome_jars} is off but \$options{use_jars} is on. Your build won't run (expects jars, got files).\n";
|
||||
$bad_options = 1;
|
||||
}
|
||||
|
||||
if (!$main::options{chrome_files} && !$main::options{use_jars})
|
||||
{
|
||||
print "Warning: \$options{chrome_jars} is off but \$options{chrome_files} is on. Your build won't run (expects files, got jars).\n";
|
||||
$bad_options = 1;
|
||||
}
|
||||
|
||||
if ($main::options{ldap_experimental} && !$main::options{ldap})
|
||||
{
|
||||
print "Warning: \$options{ldap_experimental} is on but \$options{ldap} is off. LDAP experimental features will not be built.\n";
|
||||
$bad_options = 1;
|
||||
}
|
||||
|
||||
if ($main::options{wsp} && !$main::options{xmlextras})
|
||||
{
|
||||
print "Warning: \$options{wsp} is on but \$options{xmlextras} is off. wsp will not be built.\n";
|
||||
$bad_options = 1;
|
||||
}
|
||||
|
||||
if ($bad_options) {
|
||||
print "Build will start in 5 seconds. Press command-. to stop\n";
|
||||
|
||||
DelayFor(5);
|
||||
}
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GenBuildSystemInfo
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub GenBuildSystemInfo()
|
||||
{
|
||||
# always rebuild the configuration program.
|
||||
BuildProjectClean(":mozilla:build:mac:tools:BuildSystemInfo:BuildSystemInfo.mcp", "BuildSystemInfo");
|
||||
|
||||
# delete the configuration file.
|
||||
unlink(":mozilla:build:mac:BuildSystemInfo.pm");
|
||||
|
||||
# run the program.
|
||||
system(":mozilla:build:mac:BuildSystemInfo");
|
||||
|
||||
# wait for the file to be created.
|
||||
while (!(-e ":mozilla:build:mac:BuildSystemInfo.pm")) { WaitNextEvent(); }
|
||||
|
||||
# wait for BuildSystemInfo to finish, so that we see correct results.
|
||||
while (IsProcessRunning("BuildSystemInfo")) { WaitNextEvent(); }
|
||||
|
||||
# now, evaluate the contents of the file.
|
||||
open(F, ":mozilla:build:mac:BuildSystemInfo.pm");
|
||||
while (<F>) { eval; }
|
||||
close(F);
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Make library aliases
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub MakeLibAliases()
|
||||
{
|
||||
my($dist_dir) = GetBinDirectory();
|
||||
|
||||
#// ProfilerLib
|
||||
if ($main::PROFILE)
|
||||
{
|
||||
my($profilerlibpath) = Moz::CodeWarriorLib::getCodeWarriorPath("MacOS Support:Profiler:Profiler Common:ProfilerLib");
|
||||
MakeAlias("$profilerlibpath", "$dist_dir"."Essential Files:");
|
||||
}
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// ConfigureBuildSystem
|
||||
#//
|
||||
#// defines some build-system configuration variables.
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub ConfigureBuildSystem()
|
||||
{
|
||||
#// In the future, we may want to do configurations based on the actual build system itself.
|
||||
#// GenBuildSystemInfo();
|
||||
|
||||
#// For now, if we discover a newer header file than existed in Universal Interfaces 3.2,
|
||||
#// we'll assume that 3.3 or later is in use.
|
||||
my($universal_interfaces) = Moz::CodeWarriorLib::getCodeWarriorPath("MacOS Support:Universal:Interfaces:CIncludes:");
|
||||
if (-e ($universal_interfaces . "ControlDefinitions.h")) {
|
||||
$main::UNIVERSAL_INTERFACES_VERSION = 0x0330;
|
||||
}
|
||||
|
||||
#// Rename IC SDK folder in the Mac OS Support folder
|
||||
my($ic_sdk_folder) = Moz::CodeWarriorLib::getCodeWarriorPath("MacOS Support:ICProgKit2.0.2");
|
||||
if( -e $ic_sdk_folder)
|
||||
{
|
||||
my($new_ic_folder_name) = Moz::CodeWarriorLib::getCodeWarriorPath("MacOS Support:(ICProgKit2.0.2)");
|
||||
rename ($ic_sdk_folder, $new_ic_folder_name);
|
||||
# note that CodeWarrior doesn't descend into folders with () the name
|
||||
print "Mozilla no longer needs the Internet Config SDK to build:\n Renaming the 'ICProgKit2.0.2' folder to '(ICProgKit2.0.2)'\n";
|
||||
}
|
||||
|
||||
printf("UNIVERSAL_INTERFACES_VERSION = 0x%04X\n", $main::UNIVERSAL_INTERFACES_VERSION);
|
||||
|
||||
# alias required CodeWarrior libs into the Essential Files folder (only the Profiler lib now)
|
||||
MakeLibAliases();
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// CheckOutModule. Takes variable number of args; first two are required
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub CheckOutModule($$$$)
|
||||
{
|
||||
my($session, $module, $revision, $date) = @_;
|
||||
|
||||
my($result) = $session->checkout($module, $revision, $date);
|
||||
|
||||
# result of 1 is success
|
||||
if ($result) { return; }
|
||||
|
||||
my($checkout_err) = $session->getLastError();
|
||||
if ($checkout_err == 708) {
|
||||
die "Error: Checkout was cancelled.\n";
|
||||
} elsif ($checkout_err == 911) {
|
||||
die "Error: CVS session settings are incorrect. Check your password, and the CVS root settings.\n";
|
||||
} elsif ($checkout_err == 703) {
|
||||
die "Error: CVS checkout failed. Unknown module, unknown tag, bad username, or other CVS error.\n";
|
||||
} elsif ($checkout_err == 711) {
|
||||
print "Checkout of '$module' failed.\n";
|
||||
}
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getScriptFolder
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getScriptFolder()
|
||||
{
|
||||
return dirname($0);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getScriptFolder
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub get_url_contents($)
|
||||
{
|
||||
my($url) = @_;
|
||||
|
||||
my($url_contents) = LWP::Simple::get($url);
|
||||
$url_contents =~ s/\r\n/\n/g; # normalize linebreaks
|
||||
$url_contents =~ s/\r/\n/g; # normalize linebreaks
|
||||
return $url_contents;
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// get_files_from_content
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub uniq
|
||||
{
|
||||
my $lastval;
|
||||
grep(($_ ne $lastval, $lastval = $_)[$[], @_);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// get_files_from_content
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub get_files_from_content($)
|
||||
{
|
||||
my($content) = @_;
|
||||
|
||||
my(@jscalls) = grep (/return js_file_menu[^{]*/, split(/\n/, $content));
|
||||
my $i;
|
||||
|
||||
for ($i = 0; $i < @jscalls ; $i++)
|
||||
{
|
||||
$jscalls[$i] =~ s/.*\(|\).*//g;
|
||||
my(@callparams) = split(/,/, $jscalls[$i]);
|
||||
my ($repos, $dir, $file, $rev) = grep(s/['\s]//g, @callparams);
|
||||
$jscalls[$i] = "$dir/$file";
|
||||
}
|
||||
|
||||
&uniq(sort(@jscalls));
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getLastUpdateTime
|
||||
#//
|
||||
#// Get the last time we updated. Return 0 on failure
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getLastUpdateTime($)
|
||||
{
|
||||
my($timestamp_file) = @_;
|
||||
|
||||
my($time_string);
|
||||
|
||||
local(*TIMESTAMP_FILE);
|
||||
unless (open(TIMESTAMP_FILE, "< $timestamp_file")) { return 0; }
|
||||
|
||||
while (<TIMESTAMP_FILE>)
|
||||
{
|
||||
my($line) = $_;
|
||||
chomp($line);
|
||||
|
||||
# ignore comments and empty lines
|
||||
if ($line =~ /^\#/ || $line =~ /^\s*$/) {
|
||||
next;
|
||||
}
|
||||
|
||||
$time_string = $line;
|
||||
}
|
||||
|
||||
# get the epoch seconds
|
||||
my($last_update_secs) = $time_string;
|
||||
$last_update_secs =~ s/\s#.+$//;
|
||||
|
||||
print "FAST_UPDATE found that you last updated at ".localtime($last_update_secs)."\n";
|
||||
|
||||
# how long ago was this, in hours?
|
||||
my($gm_now) = time();
|
||||
my($update_hours) = 1 + ceil(($gm_now - $last_update_secs) / (60 * 60));
|
||||
|
||||
return $update_hours;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// saveCheckoutTimestamp
|
||||
#//
|
||||
#// Create a file on disk containing the current time. Param is time(), which is an Epoch seconds
|
||||
#// (and therefore in GMT).
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub saveCheckoutTimestamp($$)
|
||||
{
|
||||
my($gm_secs, $timestamp_file) = @_;
|
||||
|
||||
local(*TIMESTAMP_FILE);
|
||||
open(TIMESTAMP_FILE, ">$timestamp_file") || die "Failed to open $timestamp_file\n";
|
||||
print(TIMESTAMP_FILE "# time of last checkout or update, in GMT. Used by FAST_UPDATE\n");
|
||||
print(TIMESTAMP_FILE "$gm_secs \# around ".localtime()." local time\n");
|
||||
close(TIMESTAMP_FILE);
|
||||
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// FastUpdate
|
||||
#//
|
||||
#// Use Bonsai url data to update only those dirs which have new files
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub FastUpdate($$)
|
||||
{
|
||||
my($modules, $timestamp_file) = @_; # list of modules to check out
|
||||
|
||||
my($num_hours) = getLastUpdateTime($timestamp_file);
|
||||
if ($num_hours == 0 || $num_hours > 170) {
|
||||
print "Can't fast_update; last update was too long ago, or never. Doing normal checkout.\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
print "Doing fast update, pulling files changed in the last $num_hours hours\n";
|
||||
|
||||
my($cvsfile) = AskAndPersistFile($main::filepaths{"sessionpath"});
|
||||
my($session) = Moz::MacCVS->new( $cvsfile );
|
||||
unless (defined($session)) { die "Error: Checkout aborted. Cannot create session file: $session" }
|
||||
|
||||
# activate MacCVS
|
||||
ActivateApplication('Mcvs');
|
||||
|
||||
my($checkout_start_time) = time();
|
||||
|
||||
#print "Time now is $checkout_start_time ($checkout_start_time + 0)\n";
|
||||
|
||||
my($this_co);
|
||||
foreach $this_co (@$modules)
|
||||
{
|
||||
my($module, $revision, $date) = ($this_co->[0], $this_co->[1], $this_co->[2]);
|
||||
|
||||
# assume that things pulled by date wont change
|
||||
if ($date ne "") {
|
||||
print "$module is pulled by date, so ignoring in FastUpdate.\n";
|
||||
next;
|
||||
}
|
||||
|
||||
my($search_type) = "hours";
|
||||
my($min_date) = "";
|
||||
my($max_date) = "";
|
||||
my($url) = "http://bonsai.mozilla.org/cvsquery.cgi?treeid=default&module=${module}&branch=${revision}&branchtype=match&dir=&file=&filetype=match&who=&whotype=match&sortby=Date&hours=${num_hours}&date=${search_type}&mindate=${min_date}&maxdate=${max_date}&cvsroot=%2Fcvsroot";
|
||||
|
||||
if ($revision eq "") {
|
||||
print "Getting list of checkins to $module from Bonsai...\n";
|
||||
} else {
|
||||
print "Getting list of checkins to $module on branch $revision from Bonsai...\n";
|
||||
}
|
||||
my(@files) = &get_files_from_content(&get_url_contents($url));
|
||||
|
||||
if ($#files > 0)
|
||||
{
|
||||
my(@cvs_co_list);
|
||||
|
||||
my($co_file);
|
||||
foreach $co_file (@files)
|
||||
{
|
||||
print "Updating $co_file\n";
|
||||
push(@cvs_co_list, $co_file);
|
||||
}
|
||||
|
||||
my($result) = $session->update($revision, \@cvs_co_list);
|
||||
# result of 1 is success
|
||||
if (!$result) { die "Error: Fast update failed\n"; }
|
||||
} else {
|
||||
print "No files in this module changed\n";
|
||||
}
|
||||
}
|
||||
|
||||
saveCheckoutTimestamp($checkout_start_time, $timestamp_file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Checkout
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub CheckoutModules($$$)
|
||||
{
|
||||
my($modules, $pull_date, $timestamp_file) = @_; # list of modules to check out
|
||||
|
||||
my($start_time) = TimeStart();
|
||||
|
||||
# assertRightDirectory();
|
||||
my($cvsfile) = AskAndPersistFile($main::filepaths{"sessionpath"});
|
||||
my($session) = Moz::MacCVS->new( $cvsfile );
|
||||
unless (defined($session)) { die "Error: Checkout aborted. Cannot create session file: $session" }
|
||||
|
||||
my($checkout_start_time) = time();
|
||||
|
||||
# activate MacCVS
|
||||
ActivateApplication('Mcvs');
|
||||
|
||||
my($this_co);
|
||||
foreach $this_co (@$modules)
|
||||
{
|
||||
my($module, $revision, $date) = ($this_co->[0], $this_co->[1], $this_co->[2]);
|
||||
if ($date eq "") {
|
||||
$date = $pull_date;
|
||||
}
|
||||
CheckOutModule($session, $module, $revision, $date);
|
||||
# print "Checking out $module with ref $revision, date $date\n";
|
||||
}
|
||||
|
||||
saveCheckoutTimestamp($checkout_start_time, $timestamp_file);
|
||||
TimeEnd($start_time, "Checkout");
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// ReadCheckoutModulesFile
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub ReadCheckoutModulesFile($$)
|
||||
{
|
||||
my($modules_file, $co_list) = @_;
|
||||
|
||||
my($checkout_file) = getScriptFolder().":".$modules_file;
|
||||
local(*CHECKOUT_FILE);
|
||||
open(CHECKOUT_FILE, "< $checkout_file") || die "Error: failed to open checkout list $checkout_file\n";
|
||||
while (<CHECKOUT_FILE>)
|
||||
{
|
||||
my($line) = $_;
|
||||
chomp($line);
|
||||
|
||||
# ignore comments and empty lines
|
||||
if ($line =~ /^\#/ || $line =~ /^\s*$/) {
|
||||
next;
|
||||
}
|
||||
|
||||
my(@cvs_co) = ["", "", ""];
|
||||
|
||||
my($module, $revision, $date) = (0, 1, 2);
|
||||
|
||||
if ($line =~ /\s*([^#,\s]+)\s*\,\s*([^#,\s]+)\s*\,\s*([^#]+)/)
|
||||
{
|
||||
@cvs_co[$module] = $1;
|
||||
@cvs_co[$revision] = $2;
|
||||
@cvs_co[$date] = $3;
|
||||
}
|
||||
elsif ($line =~ /\s*([^#,\s]+)\s*\,\s*([^#,\s]+)\s*(#.+)?/)
|
||||
{
|
||||
@cvs_co[$module] = $1;
|
||||
@cvs_co[$revision] = $2;
|
||||
}
|
||||
elsif ($line =~ /\s*([^#,\s]+)\s*\,\s*,\s*([^#,]+)/)
|
||||
{
|
||||
@cvs_co[$module] = $1;
|
||||
@cvs_co[$date] = $2;
|
||||
}
|
||||
elsif ($line =~ /\s*([^#,\s]+)/)
|
||||
{
|
||||
@cvs_co[$module] = $1;
|
||||
}
|
||||
else
|
||||
{
|
||||
die "Error: unrecognized line '$line' in $modules_file\n";
|
||||
}
|
||||
|
||||
# strip surrounding space from date
|
||||
@cvs_co[$date] =~ s/^\s*|\s*$//g;
|
||||
|
||||
# print "Going to check out '@cvs_co[$module]', '@cvs_co[$revision]', '@cvs_co[$date]'\n";
|
||||
push(@$co_list, \@cvs_co);
|
||||
}
|
||||
|
||||
close(CHECKOUT_FILE);
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// PullFromCVS
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub PullFromCVS($$)
|
||||
{
|
||||
unless ( $main::build{pull} ) { return; }
|
||||
|
||||
my($modules_file, $timestamp_file) = @_;
|
||||
|
||||
StartBuildModule("pull");
|
||||
|
||||
my(@cvs_co_list);
|
||||
ReadCheckoutModulesFile($modules_file, \@cvs_co_list);
|
||||
|
||||
if ($main::FAST_UPDATE && $main::options{pull_by_date})
|
||||
{
|
||||
die "Error: you can't use FAST_UPDATE if you are pulling by date.\n";
|
||||
}
|
||||
|
||||
my($did_fast_update) = $main::FAST_UPDATE && FastUpdate(\@cvs_co_list, $timestamp_file);
|
||||
if (!$did_fast_update)
|
||||
{
|
||||
my($pull_date) = "";
|
||||
if ($main::options{pull_by_date})
|
||||
{
|
||||
# acceptable CVS date formats are (in local time):
|
||||
# ISO8601 (e.g. "1972-09-24 20:05") and Internet (e.g. "24 Sep 1972 20:05").
|
||||
# Perl's localtime() string format also seems to work.
|
||||
$pull_date = localtime().""; # force string interp.
|
||||
print "Pulling by date $pull_date\n";
|
||||
}
|
||||
|
||||
CheckoutModules(\@cvs_co_list, $pull_date, $timestamp_file);
|
||||
}
|
||||
|
||||
EndBuildModule("pull");
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// RunBuild
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub RunBuild($$$$)
|
||||
{
|
||||
my($do_pull, $do_build, $input_files, $build_prefs) = @_;
|
||||
|
||||
InitBuildProgress($input_files->{"buildprogress"});
|
||||
|
||||
# if we are pulling, we probably want to do a full build, so clear the build progress
|
||||
if ($do_pull) {
|
||||
ClearBuildProgress();
|
||||
}
|
||||
|
||||
# read local prefs, and the build progress file, and set flags to say what to build
|
||||
SetupBuildParams(\%main::build,
|
||||
\%main::options,
|
||||
\%main::optiondefines,
|
||||
\%main::filepaths,
|
||||
$input_files->{"buildflags"},
|
||||
$build_prefs);
|
||||
|
||||
# If we were told to pull, make sure we do, overriding prefs etc.
|
||||
if ($do_pull)
|
||||
{
|
||||
$main::build{"pull"} = 1;
|
||||
}
|
||||
|
||||
# transfer this flag
|
||||
$CodeWarriorLib::CLOSE_PROJECTS_FIRST = $main::CLOSE_PROJECTS_FIRST;
|
||||
|
||||
# setup the build log
|
||||
SetupBuildLog($main::filepaths{"buildlogfilepath"}, $main::USE_TIMESTAMPED_LOGS);
|
||||
StopForErrors();
|
||||
|
||||
if ($main::LOG_TO_FILE) {
|
||||
RedirectOutputToFile($main::filepaths{"scriptlogfilepath"});
|
||||
}
|
||||
|
||||
# run a pre-build check to see that the tools etc are in order
|
||||
DoPrebuildCheck();
|
||||
|
||||
# do the pull
|
||||
PullFromCVS($input_files->{"checkoutdata"}, $input_files->{"checkouttime"});
|
||||
|
||||
unless ($do_build) { return; }
|
||||
|
||||
my($build_start) = TimeStart();
|
||||
|
||||
# check the build environment
|
||||
ConfigureBuildSystem();
|
||||
|
||||
# here we load and call methods in the build module indirectly.
|
||||
# we have to use indirection because the build module can be named
|
||||
# differently for different builds.
|
||||
chdir(dirname($0)); # change to the script dir
|
||||
my($build_module) = $input_files->{"buildmodule"};
|
||||
# load the build module
|
||||
require $build_module;
|
||||
{ # scope for no strict 'refs'
|
||||
no strict 'refs';
|
||||
|
||||
my($package_name) = $build_module;
|
||||
$package_name =~ s/\.pm$//;
|
||||
|
||||
chdir($main::MOZ_SRC);
|
||||
&{$package_name."::BuildDist"}();
|
||||
|
||||
chdir($main::MOZ_SRC);
|
||||
&{$package_name."::BuildProjects"}();
|
||||
}
|
||||
|
||||
# the build finished, so clear the build progress state
|
||||
ClearBuildProgress();
|
||||
|
||||
TimeEnd($build_start, "Build");
|
||||
print "Build complete\n";
|
||||
}
|
||||
|
||||
1;
|
||||
@@ -1,425 +0,0 @@
|
||||
#!perl -w
|
||||
package Moz::BuildFlags;
|
||||
|
||||
require 5.004;
|
||||
require Exporter;
|
||||
|
||||
# Package that attempts to read a file from the Preferences folder,
|
||||
# and get build settings out of it
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
|
||||
use Cwd;
|
||||
use File::Basename;
|
||||
|
||||
use Moz::Moz;
|
||||
use Moz::Prefs;
|
||||
|
||||
use vars qw(@ISA @EXPORT);
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(
|
||||
SetupBuildParams
|
||||
InitBuildProgress
|
||||
WriteBuildProgress
|
||||
ClearBuildProgress
|
||||
ReadBuildProgress
|
||||
);
|
||||
|
||||
|
||||
my(@build_flags);
|
||||
my(@options_flags);
|
||||
my(@filepath_flags);
|
||||
|
||||
my(%arrays_list) = (
|
||||
"build_flags", \@build_flags,
|
||||
"options_flags", \@options_flags,
|
||||
"filepath_flags", \@filepath_flags
|
||||
);
|
||||
|
||||
my($progress_file) = "¥ÊBuild progress";
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# appendArrayFlag
|
||||
#
|
||||
# Set a flag in the array
|
||||
#-------------------------------------------------------------------------------
|
||||
sub appendArrayFlag(@)
|
||||
{
|
||||
my($array_name) = shift;
|
||||
my($setting) = shift;
|
||||
my($value) = shift;
|
||||
|
||||
my(@optional_values);
|
||||
foreach (@_) {
|
||||
push(@optional_values, $_);
|
||||
}
|
||||
|
||||
my(@this_flag) = [$setting, $value, @optional_values];
|
||||
my($flags_array) = $arrays_list{$array_name};
|
||||
if ($flags_array)
|
||||
{
|
||||
push(@{$flags_array}, @this_flag) || die "Failed to append\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
die "Error: unknown build flags array $array_name\n";
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# readFlagsFile
|
||||
#
|
||||
# Read the file of build flags from disk. File path is relative to the
|
||||
# script directory.
|
||||
#-------------------------------------------------------------------------------
|
||||
sub readFlagsFile($)
|
||||
{
|
||||
my($flags_file) = @_;
|
||||
|
||||
my($file_path) = $0;
|
||||
$file_path =~ s/[^:]+$/$flags_file/;
|
||||
|
||||
print "Reading build flags from '$file_path'\n";
|
||||
|
||||
local(*FLAGS_FILE);
|
||||
open(FLAGS_FILE, "< $file_path") || die "Error: failed to open flags file $file_path\n";
|
||||
|
||||
my($cur_array) = "";
|
||||
|
||||
while(<FLAGS_FILE>)
|
||||
{
|
||||
my($line) = $_;
|
||||
chomp($line);
|
||||
|
||||
# ignore comments and empty lines
|
||||
if ($line =~ /^\#/ || $line =~ /^\s*$/) {
|
||||
next;
|
||||
}
|
||||
|
||||
# 1-word line, probably array name
|
||||
if ($line =~ /^([^#\s]+)\s*$/)
|
||||
{
|
||||
$cur_array = $1;
|
||||
next;
|
||||
}
|
||||
elsif ($line =~ /^([^#\s]+)\s+\"(.+)\"(\s+#.+)?$/) # quoted option, possible comment
|
||||
{
|
||||
my($flag) = $1;
|
||||
my($setting) = $2;
|
||||
|
||||
appendArrayFlag($cur_array, $flag, $setting);
|
||||
}
|
||||
elsif ($line =~ /^([^#\s]+)((\s+[^#\s]+)+)(\s+#.+)?$/) # multiple word line, possible comment
|
||||
{
|
||||
my($flag) = $1;
|
||||
|
||||
appendArrayFlag($cur_array, $flag, split(' ', $2));
|
||||
}
|
||||
else
|
||||
{
|
||||
die "Error: unknown build flag at '$line'\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
close(FLAGS_FILE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# flagsArrayToHash
|
||||
#
|
||||
# Utility routine to migrate flag from a 2D array to a hash, where
|
||||
# item[n][0] is the hash entry name, and item[n][1] is the hash entry value.
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub flagsArrayToHash($$)
|
||||
{
|
||||
my($src_array, $dest_hash) = @_;
|
||||
|
||||
my($item);
|
||||
foreach $item (@$src_array)
|
||||
{
|
||||
$dest_hash->{$item->[0]} = $item->[1];
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------
|
||||
# printHash
|
||||
#
|
||||
# Utility routine to print a hash
|
||||
#-----------------------------------------------
|
||||
sub printHash($)
|
||||
{
|
||||
my($hash_ref) = @_;
|
||||
|
||||
print "Printing hash:\n";
|
||||
|
||||
my($key, $value);
|
||||
|
||||
while (($key, $value) = each (%$hash_ref))
|
||||
{
|
||||
print " $key $value\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-----------------------------------------------
|
||||
# printBuildArray
|
||||
#
|
||||
# Utility routine to print a 2D array
|
||||
#-----------------------------------------------
|
||||
sub printBuildArray($)
|
||||
{
|
||||
my($build_array) = @_;
|
||||
|
||||
my($entry);
|
||||
foreach $entry (@$build_array)
|
||||
{
|
||||
print "$entry->[0] = $entry->[1]\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# SetBuildFlags
|
||||
#-------------------------------------------------------------------------------
|
||||
sub SetBuildFlags($)
|
||||
{
|
||||
my($build) = @_;
|
||||
|
||||
flagsArrayToHash(\@build_flags, $build);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# SetBuildOptions
|
||||
#-------------------------------------------------------------------------------
|
||||
sub SetBuildOptions($)
|
||||
{
|
||||
my($options) = @_;
|
||||
|
||||
flagsArrayToHash(\@options_flags, $options);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# SetFilepathFlags
|
||||
#-------------------------------------------------------------------------------
|
||||
sub SetFilepathFlags($)
|
||||
{
|
||||
my($filepath) = @_;
|
||||
|
||||
flagsArrayToHash(\@filepath_flags, $filepath);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# SetOptionDefines
|
||||
#-------------------------------------------------------------------------------
|
||||
sub SetOptionDefines($)
|
||||
{
|
||||
my($optiondefines) = @_;
|
||||
|
||||
foreach my $entry (@options_flags)
|
||||
{
|
||||
if (defined($entry->[2])) {
|
||||
$optiondefines->{$entry->[0]}{$entry->[2]} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# PropagateAllFlags
|
||||
#-------------------------------------------------------------------------------
|
||||
sub PropagateAllFlags($)
|
||||
{
|
||||
my($build_array) = @_;
|
||||
|
||||
# if "all" is set, set all the flags to 1
|
||||
unless ($build_array->[0][0] eq "all") { die "Error: 'all' must come first in the flags array\n"; }
|
||||
|
||||
if ($build_array->[0][1] == 1)
|
||||
{
|
||||
my($index);
|
||||
foreach $index (@$build_array)
|
||||
{
|
||||
$index->[1] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// _getBuildProgressFile
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub _getBuildProgressFile()
|
||||
{
|
||||
return $progress_file;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// setBuildProgressStart
|
||||
#//
|
||||
#// This automagically sets $build{"all"} to 0
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub setBuildProgressStart($$)
|
||||
{
|
||||
my($build_array, $name) = @_;
|
||||
|
||||
my($index);
|
||||
foreach $index (@$build_array)
|
||||
{
|
||||
$index->[1] = 0;
|
||||
if ($index->[0] eq $name) {
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
print "Building from module after $name, as specified by build progress\n";
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// InitBuildProgress
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub InitBuildProgress($)
|
||||
{
|
||||
my($prog_file) = @_;
|
||||
if ($prog_file ne "") {
|
||||
$progress_file = full_path_to($prog_file);
|
||||
print "Writing build progress to $progress_file\n";
|
||||
}
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// WriteBuildProgress
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub WriteBuildProgress($)
|
||||
{
|
||||
my($module_built) = @_;
|
||||
|
||||
my($progress_file) = _getBuildProgressFile();
|
||||
|
||||
if ($progress_file ne "")
|
||||
{
|
||||
open(PROGRESS_FILE, ">>$progress_file") || die "Failed to open $progress_file\n";
|
||||
print(PROGRESS_FILE "$module_built\n");
|
||||
close(PROGRESS_FILE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// ClearBuildProgress
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub ClearBuildProgress()
|
||||
{
|
||||
my($progress_file) = _getBuildProgressFile();
|
||||
if ($progress_file ne "") {
|
||||
unlink $progress_file;
|
||||
}
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// WipeBuildProgress
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub WipeBuildProgress()
|
||||
{
|
||||
print "Ignoring build progress\n";
|
||||
ClearBuildProgress();
|
||||
$progress_file = "";
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// ReadBuildProgress
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub ReadBuildProgress($)
|
||||
{
|
||||
my($build_array) = @_;
|
||||
my($progress_file) = _getBuildProgressFile();
|
||||
|
||||
my($last_module);
|
||||
|
||||
if (open(PROGRESS_FILE, "< $progress_file"))
|
||||
{
|
||||
print "Getting build progress from $progress_file\n";
|
||||
|
||||
while (<PROGRESS_FILE>)
|
||||
{
|
||||
my($line) = $_;
|
||||
chomp($line);
|
||||
$last_module = $line;
|
||||
}
|
||||
|
||||
close(PROGRESS_FILE);
|
||||
}
|
||||
|
||||
if ($last_module)
|
||||
{
|
||||
setBuildProgressStart($build_array, $last_module);
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# clearOldBuildSettings
|
||||
#-------------------------------------------------------------------------------
|
||||
sub clearOldBuildSettings($$$$)
|
||||
{
|
||||
my($build, $options, $optiondefines, $filepaths) = @_;
|
||||
|
||||
# empty the arrays in case we're being called twice
|
||||
@build_flags = ();
|
||||
@options_flags = ();
|
||||
@filepath_flags = ();
|
||||
|
||||
# and empty the hashes
|
||||
%$build = ();
|
||||
%$options = ();
|
||||
%$optiondefines = ();
|
||||
%$filepaths = ();
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# SetupBuildParams
|
||||
#-------------------------------------------------------------------------------
|
||||
sub SetupBuildParams($$$$$$)
|
||||
{
|
||||
my($build, $options, $optiondefines, $filepaths, $flags_file, $prefs_file) = @_;
|
||||
|
||||
# Empty the hashes and arrays, to wipe out any stale data.
|
||||
# Needed because these structures persist across two build scripts
|
||||
# called using 'do' from a parent script.
|
||||
clearOldBuildSettings($build, $options, $optiondefines, $filepaths);
|
||||
|
||||
# Read from the flags file, which sets up the various arrays
|
||||
readFlagsFile($flags_file);
|
||||
|
||||
# If 'all' is set in the build array, propagate that to all entries
|
||||
PropagateAllFlags(\@build_flags);
|
||||
|
||||
# read the user pref file, that can change values in the array
|
||||
ReadMozUserPrefs($prefs_file, \@build_flags, \@options_flags, \@filepath_flags);
|
||||
|
||||
# If build progress exists, this clears flags in the array up to a certain point
|
||||
if ($main::USE_BUILD_PROGRESS) {
|
||||
ReadBuildProgress(\@build_flags);
|
||||
} else {
|
||||
WipeBuildProgress();
|
||||
}
|
||||
|
||||
# printBuildArray(\@build_flags);
|
||||
# printBuildArray(\@options_flags);
|
||||
|
||||
SetBuildFlags($build);
|
||||
SetBuildOptions($options);
|
||||
SetOptionDefines($optiondefines);
|
||||
SetFilepathFlags($filepaths);
|
||||
|
||||
# printHash($build);
|
||||
# printHash($options);
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
@@ -1,786 +0,0 @@
|
||||
|
||||
package Moz::BuildUtils;
|
||||
|
||||
require 5.004;
|
||||
require Exporter;
|
||||
|
||||
# Package that contains build util functions specific to the Mozilla build
|
||||
# process.
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
|
||||
use Cwd;
|
||||
use File::Path;
|
||||
use File::Basename;
|
||||
|
||||
use Mac::Events;
|
||||
use Mac::StandardFile;
|
||||
|
||||
use Moz::Moz;
|
||||
use Moz::BuildFlags;
|
||||
use Moz::MacCVS;
|
||||
#use Moz::ProjectXML; #optional; required for static build only
|
||||
|
||||
use vars qw(@ISA @EXPORT);
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(
|
||||
SetupDefaultBuildOptions
|
||||
SetupBuildRootDir
|
||||
StartBuildModule
|
||||
EndBuildModule
|
||||
GetBinDirectory
|
||||
BuildOneProjectWithOutput
|
||||
BuildOneProject
|
||||
BuildProject
|
||||
BuildProjectClean
|
||||
BuildIDLProject
|
||||
BuildFolderResourceAliases
|
||||
AskAndPersistFile
|
||||
DelayFor
|
||||
TimeStart
|
||||
TimeEnd
|
||||
EmptyTree
|
||||
SetupBuildLog
|
||||
SetBuildNumber
|
||||
SetTimeBomb
|
||||
UpdateConfigHeader
|
||||
);
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// SetupDefaultBuildOptions
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub SetupDefaultBuildOptions($$$)
|
||||
{
|
||||
my($debug, $bin_dir, $config_header_file_name) = @_;
|
||||
|
||||
# Here we set up defaults for the various build flags.
|
||||
# If you want to override any of these, it's best to do
|
||||
# so via the relevant preferences file, which lives in
|
||||
# System Folder:Preferences:Mozilla build prefs:{build prefs file}.
|
||||
# For the name of the prefs file, see the .pl script that you
|
||||
# run to start this build. The prefs files are created when
|
||||
# you run the build, and contain some documentation.
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# configuration variables that globally affect what is built
|
||||
#-------------------------------------------------------------
|
||||
$main::DEBUG = $debug;
|
||||
$main::PROFILE = 0;
|
||||
$main::RUNTIME = 0; # turn on to just build runtime support and NSPR projects
|
||||
$main::GC_LEAK_DETECTOR = 0; # turn on to use GC leak detection
|
||||
$main::MOZILLA_OFFICIAL = 0; # generate build number
|
||||
$main::LOG_TO_FILE = 0; # write perl output to a file
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# configuration variables that affect the manner of building,
|
||||
# but possibly affecting the outcome.
|
||||
#-------------------------------------------------------------
|
||||
$main::ALIAS_SYM_FILES = $main::DEBUG;
|
||||
$main::CLOBBER_LIBS = 1; # turn on to clobber existing libs and .xSYM files before
|
||||
# building each project
|
||||
# The following two options will delete all dist files (if you have $main::build{dist} turned on),
|
||||
# but leave the directory structure intact.
|
||||
$main::CLOBBER_DIST_ALL = 1; # turn on to clobber all aliases/files inside dist (headers/xsym/libs)
|
||||
$main::CLOBBER_DIST_LIBS = 0; # turn on to clobber only aliases/files for libraries/sym files in dist
|
||||
$main::CLOBBER_IDL_PROJECTS = 0; # turn on to clobber all IDL projects.
|
||||
$main::CLOBBER_PROJECTS = 0; # turn on to remove object code from each project before building it
|
||||
|
||||
$main::UNIVERSAL_INTERFACES_VERSION = 0x0320;
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# configuration variables that are preferences for the build,
|
||||
# style and do not affect what is built.
|
||||
#-------------------------------------------------------------
|
||||
$main::CLOSE_PROJECTS_FIRST = 0;
|
||||
# 1 = close then make (for development),
|
||||
# 0 = make then close (for tinderbox).
|
||||
$main::USE_TIMESTAMPED_LOGS = 0;
|
||||
$main::USE_BUILD_PROGRESS = 1; # track build progress for restartable builds
|
||||
#-------------------------------------------------------------
|
||||
# END OF CONFIG SWITCHES
|
||||
#-------------------------------------------------------------
|
||||
|
||||
$main::BIN_DIRECTORY = $bin_dir;
|
||||
$main::DEFINESOPTIONS_FILE = $config_header_file_name;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// SetupBuildRootDir
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub SetupBuildRootDir($)
|
||||
{
|
||||
my($rel_path_to_script) = @_;
|
||||
|
||||
my($cur_dir) = cwd();
|
||||
$cur_dir =~ s/$rel_path_to_script$//;
|
||||
chdir($cur_dir) || die "Error: failed to set build root directory to '$cur_dir'.\nYou probably need to put 'mozilla' one level down (in a folder).\n";
|
||||
$main::MOZ_SRC = cwd();
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// StartBuildModule
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub StartBuildModule($)
|
||||
{
|
||||
my($module) = @_;
|
||||
|
||||
print("---- Start of $module ----\n");
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// EndBuildModule
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub EndBuildModule($)
|
||||
{
|
||||
my($module) = @_;
|
||||
WriteBuildProgress($module);
|
||||
print("---- End of $module ----\n");
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# GetBinDirectory
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
sub GetBinDirectory()
|
||||
{
|
||||
if ($main::BIN_DIRECTORY eq "") { die "Dist directory not set\n"; }
|
||||
return $main::BIN_DIRECTORY;
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# AskAndPersistFile stores the information about the user pick inside
|
||||
# the file $session_storage
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
sub AskAndPersistFile($)
|
||||
{
|
||||
my ($sessionStorage) = @_;
|
||||
my $cvsfile;
|
||||
|
||||
if (( -e $sessionStorage) &&
|
||||
open( SESSIONFILE, $sessionStorage ))
|
||||
{
|
||||
# Read in the path if available
|
||||
$cvsfile = <SESSIONFILE>;
|
||||
chomp $cvsfile;
|
||||
close SESSIONFILE;
|
||||
if ( ! -e $cvsfile )
|
||||
{
|
||||
print STDERR "$cvsfile has disappeared\n";
|
||||
undef $cvsfile;
|
||||
}
|
||||
}
|
||||
unless (defined ($cvsfile))
|
||||
{
|
||||
# make sure that MacPerl is a front process
|
||||
ActivateApplication('McPL');
|
||||
MacPerl::Answer("Could not find your MacCVS session file. Please choose one", "OK");
|
||||
|
||||
# prompt user for the file name, and store it
|
||||
my $macFile = StandardGetFile( 0, "McvD");
|
||||
if ( $macFile->sfGood() )
|
||||
{
|
||||
$cvsfile = $macFile->sfFile();
|
||||
# save the choice if we can
|
||||
if ( open (SESSIONFILE, ">" . $sessionStorage))
|
||||
{
|
||||
printf SESSIONFILE $cvsfile, "\n";
|
||||
close SESSIONFILE;
|
||||
}
|
||||
else
|
||||
{
|
||||
print STDERR "Could not open storage file $sessionStorage for saving $cvsfile\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
return $cvsfile;
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# BuildIDLProject
|
||||
#
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub BuildIDLProject($$)
|
||||
{
|
||||
my ($project_path, $module_name) = @_;
|
||||
|
||||
if ($main::CLOBBER_IDL_PROJECTS)
|
||||
{
|
||||
my (@suffix_list) = (".mcp", ".xml");
|
||||
my ($project_name, $project_dir, $suffix) = fileparse($project_path, @suffix_list);
|
||||
if ($suffix eq "") { die "Error: Project, $project_path must end in .xml or .mcp\n"; }
|
||||
|
||||
my($datafolder_path);
|
||||
if ($suffix eq ".xml")
|
||||
{
|
||||
$datafolder_path = $project_dir . "_" . $project_name . " Data:";
|
||||
}
|
||||
else {
|
||||
$datafolder_path = $project_dir . $project_name . " Data:";
|
||||
}
|
||||
|
||||
print STDERR "Deleting IDL data folder: $datafolder_path\n";
|
||||
EmptyTree($datafolder_path);
|
||||
}
|
||||
|
||||
BuildOneProject($project_path, "headers", 0, 0, 0);
|
||||
BuildOneProject($project_path, $module_name.".xpt", 1, 0, 1);
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# CreateStaticLibTargets
|
||||
#
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
sub CreateXMLStaticLibTargets($)
|
||||
{
|
||||
my($xml_path) = @_;
|
||||
|
||||
my (@suffix_list) = (".xml");
|
||||
my ($project_name, $project_dir, $suffix) = fileparse($xml_path, @suffix_list);
|
||||
if ($suffix eq "") { die "XML munging: $xml_path must end in .xml\n"; }
|
||||
|
||||
#sniff the file to see if we need to fix up broken Pro5-exported XML
|
||||
print "Parsing $xml_path\n";
|
||||
|
||||
my $ide_version = Moz::ProjectXML::SniffProjectXMLIDEVersion($xml_path);
|
||||
if ($ide_version eq "4.0")
|
||||
{
|
||||
my $new_file = $project_dir.$project_name."2.xml";
|
||||
|
||||
print "Cleaning up Pro 5 xml to $new_file\n";
|
||||
|
||||
Moz::ProjectXML::CleanupPro5XML($xml_path, $new_file);
|
||||
|
||||
unlink $xml_path;
|
||||
rename ($new_file, $xml_path);
|
||||
}
|
||||
|
||||
my $doc = Moz::ProjectXML::ParseXMLDocument($xml_path);
|
||||
my @target_list = Moz::ProjectXML::GetTargetsList($doc);
|
||||
my $target;
|
||||
|
||||
my %target_hash; # for easy lookups below
|
||||
foreach $target (@target_list) { $target_hash{$target} = 1; }
|
||||
|
||||
foreach $target (@target_list)
|
||||
{
|
||||
if ($target =~ /(.+).shlb$/) # if this is a shared lib target
|
||||
{
|
||||
my $target_base = $1;
|
||||
my $static_target = $target_base.".o";
|
||||
|
||||
# ensure that this does not exist already
|
||||
if ($target_hash{$static_target}) {
|
||||
print "Static target $static_target already exists in project. Not making\n";
|
||||
next;
|
||||
}
|
||||
|
||||
print "Making static target '$static_target' from target '$target'\n";
|
||||
|
||||
Moz::ProjectXML::CloneTarget($doc, $target, $static_target);
|
||||
Moz::ProjectXML::SetAsStaticLibraryTarget($doc, $static_target, $static_target);
|
||||
}
|
||||
}
|
||||
|
||||
print "Writing XML file to $xml_path\n";
|
||||
my $temp_path = $project_dir."_".$project_name.".xml";
|
||||
Moz::ProjectXML::WriteXMLDocument($doc, $temp_path, $ide_version);
|
||||
Moz::ProjectXML::DisposeXMLDocument($doc);
|
||||
|
||||
if (-e $temp_path)
|
||||
{
|
||||
unlink $xml_path;
|
||||
rename ($temp_path, $xml_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
die "Error: Failed to add new targets to XML project\n";
|
||||
}
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// ProcessProjectXML
|
||||
#//
|
||||
#// Helper routine to allow for XML pre-processing. This should read in the XML, process it,
|
||||
#// and replace the original file with the processed version.
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub ProcessProjectXML($)
|
||||
{
|
||||
my($xml_path) = @_;
|
||||
|
||||
# we need to manually load Moz::ProjectXML, becaues not everyone will have the
|
||||
# required perl modules in their distro.
|
||||
my($cur_dir) = cwd();
|
||||
|
||||
chdir(dirname($0)); # change to the script dir
|
||||
eval "require Moz::ProjectXML";
|
||||
if ($@) { die "Error: could not do Project XML munging because you do not have the correct XML modules installed. Error is:\n################\n $@################"; }
|
||||
|
||||
chdir($cur_dir);
|
||||
|
||||
CreateXMLStaticLibTargets($xml_path);
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Build one project, and make the alias. Parameters are project path, target name, shared library
|
||||
#// name, make shlb alias (boolean), make xSYM alias (boolean), and is component (boolean).
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub BuildOneProjectWithOutput($$$$$$)
|
||||
{
|
||||
my ($project_path, $target_name, $output_name, $alias_lib, $alias_xSYM, $component) = @_;
|
||||
|
||||
unless ($project_path =~ m/^$main::BUILD_ROOT.+/) { return; }
|
||||
|
||||
my (@suffix_list) = (".mcp", ".xml");
|
||||
my ($project_name, $project_dir, $suffix) = fileparse($project_path, @suffix_list);
|
||||
if ($suffix eq "") { die "Error: Project, $project_path must end in .xml or .mcp\n"; }
|
||||
|
||||
my($dist_dir) = GetBinDirectory();
|
||||
|
||||
# Put libraries in "Essential Files" folder, Components in "Components" folder
|
||||
my($output_dir) = $component ? "Components:" : "Essential Files:";
|
||||
my($output_path) = $dist_dir.$output_dir;
|
||||
|
||||
if ($main::options{static_build})
|
||||
{
|
||||
if ($output_name =~ /\.o$/ || $output_name =~ /\.[Ll]ib$/)
|
||||
{
|
||||
$alias_xSYM = 0;
|
||||
$alias_lib = 1;
|
||||
$output_path = $main::DEBUG ? ":mozilla:dist:static_libs_debug:" : ":mozilla:dist:static_libs:";
|
||||
}
|
||||
}
|
||||
|
||||
# if the flag is on to export projects to XML, export and munge them
|
||||
if ($main::EXPORT_PROJECTS && !($project_path =~ /IDL\.mcp$/))
|
||||
{
|
||||
my $xml_out_path = $project_path;
|
||||
|
||||
$xml_out_path =~ s/\.mcp$/\.xml/;
|
||||
|
||||
# only do this if project is newer?
|
||||
if (! -e $xml_out_path)
|
||||
{
|
||||
ExportProjectToXML(full_path_to($project_path), full_path_to($xml_out_path));
|
||||
ProcessProjectXML($xml_out_path);
|
||||
}
|
||||
}
|
||||
|
||||
# if the flag is set to use XML projects, default to XML if the file
|
||||
# is present.
|
||||
if ($main::USE_XML_PROJECTS && !($project_path =~ /IDL\.mcp$/))
|
||||
{
|
||||
my $xml_project_path = $project_dir.$project_name.".xml";
|
||||
if (-e $xml_project_path)
|
||||
{
|
||||
$project_path = $xml_project_path;
|
||||
$suffix = ".xml";
|
||||
}
|
||||
}
|
||||
|
||||
if ($suffix eq ".xml")
|
||||
{
|
||||
my($xml_path) = $project_path;
|
||||
# Prepend an "_" onto the name of the generated project file so it doesn't conflict
|
||||
$project_path = $project_dir . "_" . $project_name . ".mcp";
|
||||
my($project_modtime) = (-e $project_path ? GetFileModDate($project_path) : 0);
|
||||
my($xml_modtime) = (-e $xml_path ? GetFileModDate($xml_path) : 0);
|
||||
|
||||
if ($xml_modtime > $project_modtime)
|
||||
{
|
||||
print("Importing $project_path from $project_name.xml.\n");
|
||||
unlink($project_path);
|
||||
# Might want to delete the "xxx.mcp Data" dir ???
|
||||
ImportXMLProject(full_path_to($xml_path), full_path_to($project_path));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($main::CLOBBER_LIBS)
|
||||
{
|
||||
unlink "$project_dir$output_name"; # it's OK if these fail
|
||||
unlink "$project_dir$output_name.xSYM";
|
||||
}
|
||||
|
||||
DoBuildProject($project_path, $target_name, $main::CLOBBER_PROJECTS);
|
||||
|
||||
$alias_lib ? MakeAlias("$project_dir$output_name", "$output_path") : 0;
|
||||
$alias_xSYM ? MakeAlias("$project_dir$output_name.xSYM", "$output_path") : 0;
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// For compatiblity with existing scripts, BuildOneProject now just calls
|
||||
#// BuildOneProjectWithOutput, with the output name and target name identical.
|
||||
#// Note that this routine assumes that the target name and the shared libary name
|
||||
#// are the same.
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub BuildOneProject($$$$$)
|
||||
{
|
||||
my ($project_path, $target_name, $alias_lib, $alias_xSYM, $component) = @_;
|
||||
|
||||
BuildOneProjectWithOutput($project_path, $target_name, $target_name,
|
||||
$alias_lib, $alias_xSYM, $component);
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// For compatiblity with existing scripts, BuildProject now just calls
|
||||
#// BuildOneProjectWithOutput, with the output name and target name identical.
|
||||
#// Note that this routine assumes that the target name and the shared libary name
|
||||
#// are the same. No aliases of the output are made.
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub BuildProject($$)
|
||||
{
|
||||
my ($project_path, $target_name) = @_;
|
||||
|
||||
BuildOneProjectWithOutput($project_path, $target_name, $target_name, 0, 0, 0);
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Identical to BuildProject but clobbers the project before building it.
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub BuildProjectClean($$)
|
||||
{
|
||||
my ($project_path, $target_name) = @_;
|
||||
my ($save_clobber_flag) = $main::CLOBBER_PROJECTS;
|
||||
$main::CLOBBER_PROJECTS = 1;
|
||||
BuildOneProjectWithOutput($project_path, $target_name, $target_name, 0, 0, 0);
|
||||
$main::CLOBBER_PROJECTS = $save_clobber_flag;
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Make resource aliases for one directory
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub BuildFolderResourceAliases($$)
|
||||
{
|
||||
my($src_dir, $dest_dir) = @_;
|
||||
|
||||
# get a list of all the resource files
|
||||
opendir(SRCDIR, $src_dir) || die("can't open $src_dir");
|
||||
my(@resource_files) = readdir(SRCDIR);
|
||||
closedir(SRCDIR);
|
||||
|
||||
# make aliases for each one into the dest directory
|
||||
print("Placing aliases to all files from $src_dir in $dest_dir\n");
|
||||
for ( @resource_files )
|
||||
{
|
||||
next if $_ eq "CVS";
|
||||
#print(" Doing $_\n");
|
||||
if (-l $src_dir.$_)
|
||||
{
|
||||
print(" $_ is an alias\n");
|
||||
next;
|
||||
}
|
||||
my($file_name) = $src_dir . $_;
|
||||
MakeAlias($file_name, $dest_dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// DelayFor
|
||||
#//
|
||||
#// Delay for the given number of seconds, allowing the script to be cancelled
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub DelayFor($)
|
||||
{
|
||||
my($delay_secs) = @_;
|
||||
|
||||
STDOUT->autoflush(1);
|
||||
|
||||
my($end_time) = time() + $delay_secs;
|
||||
|
||||
my($last_time) = 0;
|
||||
my($cur_time) = time();
|
||||
|
||||
while ($cur_time < $end_time)
|
||||
{
|
||||
$cur_time = time();
|
||||
if ($cur_time > $last_time)
|
||||
{
|
||||
print ".";
|
||||
$last_time = $cur_time;
|
||||
}
|
||||
|
||||
WaitNextEvent();
|
||||
}
|
||||
|
||||
print "\n";
|
||||
STDOUT->autoflush(0);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// TimeStart
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub TimeStart()
|
||||
{
|
||||
return time();
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// TimeEnd
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub TimeEnd($$)
|
||||
{
|
||||
use integer;
|
||||
|
||||
my($start_time, $operation_name) = @_;
|
||||
my($end_time) = time();
|
||||
|
||||
my($tot_sec) = $end_time - $start_time;
|
||||
|
||||
my($seconds) = $tot_sec;
|
||||
|
||||
my($hours) = $seconds / (60 * 60);
|
||||
$seconds -= $hours * (60 * 60);
|
||||
|
||||
my($minutes) = $seconds / 60;
|
||||
$seconds -= $minutes * 60;
|
||||
|
||||
print "$operation_name took $hours hours $minutes minutes and $seconds seconds\n";
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Remove all files from a tree, leaving directories intact (except "CVS").
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub EmptyTree($)
|
||||
{
|
||||
my ($root) = @_;
|
||||
#print "EmptyTree($root)\n";
|
||||
opendir(DIR, $root);
|
||||
my $sub;
|
||||
foreach $sub (readdir(DIR))
|
||||
{
|
||||
my $fullpathname = $root.$sub; # -f, -d only work on full paths
|
||||
|
||||
# Don't call empty tree for the alias of a directory.
|
||||
# -d returns true for the alias of a directory, false for a broken alias)
|
||||
|
||||
if (-d $fullpathname)
|
||||
{
|
||||
if (-l $fullpathname) # delete aliases
|
||||
{
|
||||
unlink $fullpathname;
|
||||
next;
|
||||
}
|
||||
EmptyTree($fullpathname.":");
|
||||
if ($sub eq "CVS")
|
||||
{
|
||||
#print "rmdir $fullpathname\n";
|
||||
rmdir $fullpathname;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unless (unlink $fullpathname) { die "Failed to delete $fullpathname\n"; }
|
||||
}
|
||||
}
|
||||
closedir(DIR);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Recurse through a directory hierarchy, looking for MANIFEST files.
|
||||
#// Currently unused.
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub ScanForManifestFiles($$$$)
|
||||
{
|
||||
my($dir, $theme_root, $theme_name, $dist_dir) = @_;
|
||||
|
||||
opendir(DIR, $dir) or die "Cannot open dir $dir\n";
|
||||
my @files = readdir(DIR);
|
||||
closedir DIR;
|
||||
|
||||
my $file;
|
||||
|
||||
foreach $file (@files)
|
||||
{
|
||||
my $filepath = $dir.":".$file;
|
||||
|
||||
if (-d $filepath)
|
||||
{
|
||||
# print "Looking for MANIFEST files in $filepath\n";
|
||||
ScanForManifestFiles($filepath, $theme_root, $theme_name, $dist_dir);
|
||||
}
|
||||
elsif ($file eq "MANIFEST")
|
||||
{
|
||||
# print "Doing manifest file $filepath\n";
|
||||
|
||||
# Get the dest path from the first line of the file
|
||||
|
||||
open(MANIFEST, $filepath) || die "Could not open file $file";
|
||||
# Read in the path if available
|
||||
my($dest_line) = <MANIFEST>;
|
||||
chomp $dest_line;
|
||||
close MANIFEST;
|
||||
|
||||
$dest_line =~ s|^#!dest[\t ]+|| || die "No destination line found in $filepath\n";
|
||||
|
||||
my($dest_path) = $dist_dir."chrome:skins:$theme_name:$dest_line";
|
||||
# print " Destination is $dest_path\n";
|
||||
|
||||
InstallResources($filepath, "$dest_path", 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-----------------------------------------------
|
||||
# SetupBuildLog
|
||||
#-----------------------------------------------
|
||||
sub SetupBuildLog($$)
|
||||
{
|
||||
my($logfile_path, $timestamped_log) = @_;
|
||||
|
||||
my($logdir) = "";
|
||||
my($logfile) = $logfile_path;
|
||||
|
||||
if ($logfile_path =~ /(.+?:)([^:]+)$/) # ? for non-greedy match
|
||||
{
|
||||
$logdir = $1;
|
||||
$logfile = $2;
|
||||
|
||||
mkpath($logdir);
|
||||
}
|
||||
|
||||
if ($timestamped_log)
|
||||
{
|
||||
#Use time-stamped names so that you don't clobber your previous log file!
|
||||
my $now = localtime();
|
||||
while ($now =~ s@:@.@) {} # replace all colons by periods
|
||||
OpenErrorLog("${logdir}${now}");
|
||||
}
|
||||
else
|
||||
{
|
||||
OpenErrorLog("${logdir}${logfile}");
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------
|
||||
# SetBuildNumber
|
||||
#-----------------------------------------------
|
||||
sub SetBuildNumber($$)
|
||||
{
|
||||
my($build_num_file, $files_to_touch) = @_;
|
||||
|
||||
# Make sure we add the config dir to search, to pick up mozBDate.pm
|
||||
# Need to do this dynamically, because this module can be used before
|
||||
# mozilla/config has been checked out.
|
||||
|
||||
my ($inc_path) = $0; # $0 is the path to the parent script
|
||||
$inc_path =~ s/:build:mac:build_scripts:.+$/:config/;
|
||||
push(@INC, $inc_path);
|
||||
|
||||
require mozBDate;
|
||||
|
||||
mozBDate::UpdateBuildNumber($build_num_file, $main::MOZILLA_OFFICIAL);
|
||||
|
||||
my($file);
|
||||
foreach $file (@$files_to_touch)
|
||||
{
|
||||
print "Writing build number to $file from ${file}.in\n";
|
||||
mozBDate::SubstituteBuildNumber($file, $build_num_file, "${file}.in");
|
||||
}
|
||||
}
|
||||
|
||||
#-----------------------------------------------
|
||||
# SetTimeBomb
|
||||
#-----------------------------------------------
|
||||
sub SetTimeBomb($$)
|
||||
{
|
||||
my ($warn_days, $bomb_days) = @_;
|
||||
|
||||
system("perl :mozilla:config:mac-set-timebomb.pl $warn_days $bomb_days");
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Regenerate a configuration header file if necessary
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub UpdateConfigHeader($)
|
||||
{
|
||||
my($config_path) = @_;
|
||||
|
||||
my($config, $oldconfig) = ("", "");
|
||||
my($define, $definevalue, $defines);
|
||||
my($k, $l,);
|
||||
|
||||
foreach $k (keys(%main::options))
|
||||
{
|
||||
if ($main::options{$k})
|
||||
{
|
||||
foreach $l (keys(%{$main::optiondefines{$k}}))
|
||||
{
|
||||
$my::defines{$l} = $main::optiondefines{$k}{$l};
|
||||
print "Setting up my::defines{$l}\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my $config_headerfile = current_directory().$config_path;
|
||||
if (-e $config_headerfile)
|
||||
{
|
||||
open(CONFIG_HEADER, "< $config_headerfile") || die "$config_headerfile: $!\n";
|
||||
my($line);
|
||||
while ($line = <CONFIG_HEADER>)
|
||||
{
|
||||
if ($line =~ m/#define\s+([^\s]*)\s+([^\s]*)\s*\n/)
|
||||
{
|
||||
$define = $1;
|
||||
$definevalue = $2;
|
||||
|
||||
#canonicalize so that whitespace changes are not significant
|
||||
my $canon_value = "#define " . $define . " " . $definevalue . "\n";
|
||||
$oldconfig .= $canon_value;
|
||||
|
||||
if (exists ($my::defines{$define}) and ($my::defines{$define} == $definevalue))
|
||||
{
|
||||
delete $my::defines{$define};
|
||||
$config .= $canon_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
close(CONFIG_HEADER);
|
||||
}
|
||||
|
||||
if (%my::defines)
|
||||
{
|
||||
foreach $k (keys(%my::defines))
|
||||
{
|
||||
$config .= "#define " . $k . " " . $my::defines{$k} . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
my $file_name = basename($config_headerfile);
|
||||
if (($config ne $oldconfig) || (!-e $config_headerfile))
|
||||
{
|
||||
printf("Writing new configuration header $file_name\n");
|
||||
open(CONFIG_HEADER, "> $config_headerfile") || die "$config_headerfile: $!\n";
|
||||
print(CONFIG_HEADER "/* This file is auto-generated based on build options. Do not edit. */\n");
|
||||
print CONFIG_HEADER ($config);
|
||||
close(CONFIG_HEADER);
|
||||
|
||||
MacPerl::SetFileInfo("CWIE", "TEXT", $config_headerfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Configuration header $file_name is up-to-date\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
@@ -1,660 +0,0 @@
|
||||
#!perl
|
||||
package Moz::CodeWarriorLib;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
CodeWarriorLib - supply interface to CodeWarrior
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
#!perl
|
||||
use CodeWarriorLib;
|
||||
CodeWarriorLib::activate();
|
||||
$had_errors = CodeWarriorLib::build_project(
|
||||
$project_path, $target_name, $recent_errors_file, $clean_build
|
||||
);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Replaces the AppleScript library I<CodeWarriorLib>.
|
||||
|
||||
=over 4
|
||||
|
||||
=cut
|
||||
|
||||
use strict;
|
||||
|
||||
use Cwd;
|
||||
use File::Basename;
|
||||
|
||||
use Mac::Types;
|
||||
use Mac::Events;
|
||||
use Mac::AppleEvents;
|
||||
use Mac::AppleEvents::Simple;
|
||||
use Mac::Processes;
|
||||
use Mac::MoreFiles;
|
||||
use Mac::StandardFile;
|
||||
|
||||
|
||||
use vars qw($VERSION);
|
||||
$VERSION = '1.02';
|
||||
|
||||
my($app) = 'CWIE';
|
||||
my($scriptDir) = cwd(); # could use $0 for this
|
||||
my($ide_loc_file) = "";
|
||||
|
||||
# 0 == don't switch CWIE to front app in do_event(), 1 == do switch
|
||||
# note: activate() still switches when called
|
||||
$Mac::AppleEvents::Simple::SWITCH = 0;
|
||||
# $Mac::AppleEvents::Simple::WARN = 1;
|
||||
|
||||
# supply your own path to the source here
|
||||
#_test('PowerPudgeIV:mozilla:mozilla:');
|
||||
|
||||
# If you want to understand the gobbldeygook that's used to build Apple Events,
|
||||
# you should start by reading the AEGizmos documentation.
|
||||
|
||||
=pod
|
||||
|
||||
=item _get_project($full_path)
|
||||
|
||||
A private routine returning a reference to the open project with the given name,
|
||||
or else the empty string (when that project is not open)
|
||||
|
||||
full_path is a string identifying the project to be built and is of the form,
|
||||
e.g., "HD:ProjectFolder:MyProject.mcp". It must be supplied.
|
||||
|
||||
=cut
|
||||
|
||||
sub _get_project ($) {
|
||||
my(
|
||||
$full_path, $candidate_projects
|
||||
) = @_;
|
||||
$candidate_projects = _doc_named(basename($full_path, '*'));
|
||||
if ($candidate_projects) {
|
||||
my($cps) = _get_dobj($candidate_projects);
|
||||
my($num) = AECountItems($cps);
|
||||
if ($num) { # is a list
|
||||
foreach (1 .. AECountItems($cps)) {
|
||||
my($cp) = AEGetNthDesc($cps, $_);
|
||||
if (lc $full_path eq lc _full_path($cp)) {
|
||||
return($cp);
|
||||
}
|
||||
}
|
||||
} else { # is only one, not a list
|
||||
if (lc $full_path eq lc _full_path($cps)) {
|
||||
return($cps);
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
=pod
|
||||
|
||||
=item build_project
|
||||
|
||||
Build a selected target of a project, saving any errors to a file, if supplied.
|
||||
|
||||
full_path is a string identifying the project to be built and is of the form,
|
||||
e.g., "HD:ProjectFolder:MyProject.mcp". It must be supplied.
|
||||
|
||||
If target_name is the empty string, the current target of the selected project
|
||||
will be built, else, target_name should be a string matching a target name in
|
||||
the selected project.
|
||||
|
||||
If error_path is the empty string, errors will not be saved to a file,
|
||||
else, error_path should be the full path of a file to save error messages into.
|
||||
|
||||
=cut
|
||||
|
||||
$CodeWarriorLib::CLOSE_PROJECTS_FIRST = 0; # If true we close then make. If false, make then close.
|
||||
my $last_project_built = "";
|
||||
my $last_project_was_closed = 0;
|
||||
|
||||
sub build_project ($;$$$) {
|
||||
my(
|
||||
$full_path, $target_name, $error_path,
|
||||
$remove_object, $p, $project_was_closed, $had_errors
|
||||
) = @_;
|
||||
_close_errors_window();
|
||||
|
||||
if ($CodeWarriorLib::CLOSE_PROJECTS_FIRST && ($last_project_built ne $full_path))
|
||||
{
|
||||
# If we're in "close first" mode, we don't close if the current project
|
||||
# is the same as the previous one.
|
||||
if ($last_project_was_closed) {
|
||||
$p = _get_project($last_project_built);
|
||||
_close($p);
|
||||
}
|
||||
$last_project_built = $full_path;
|
||||
$last_project_was_closed = 0; # now refers to the new project
|
||||
}
|
||||
$project_was_closed = 0;
|
||||
while (1) {
|
||||
$p = _get_project($full_path);
|
||||
if (!$p) {
|
||||
if ($project_was_closed) {
|
||||
print "### Error - request for project document failed after opening\n";
|
||||
die "### possibly CW Pro 4 bug: be sure to close your Find window\n";
|
||||
}
|
||||
$project_was_closed = 1;
|
||||
$last_project_was_closed = 1;
|
||||
_open_file($full_path);
|
||||
} else {
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
$had_errors = 0;
|
||||
if ($target_name eq '') {
|
||||
if ($remove_object) {_remove_object($p)}
|
||||
_build($p);
|
||||
} else {
|
||||
if ($remove_object) {_remove_object($p, $target_name)}
|
||||
_build($p, $target_name);
|
||||
}
|
||||
|
||||
if ($error_path ne '') {
|
||||
_save_errors_window($error_path);
|
||||
}
|
||||
$had_errors = _close_errors_window();
|
||||
|
||||
if (!$CodeWarriorLib::CLOSE_PROJECTS_FIRST)
|
||||
{
|
||||
if ($project_was_closed) {
|
||||
$p = _get_project($full_path);
|
||||
_close($p);
|
||||
}
|
||||
}
|
||||
|
||||
return($had_errors);
|
||||
}
|
||||
|
||||
=pod
|
||||
|
||||
=item appIsRunning()
|
||||
|
||||
=cut
|
||||
sub _appIsRunning($)
|
||||
{
|
||||
my ($appSignature) = @_;
|
||||
my ($psi);
|
||||
my ($found) = 0;
|
||||
my ($appPSN);
|
||||
|
||||
foreach $psi (values(%Process))
|
||||
{
|
||||
if ($psi->processSignature() eq $appSignature)
|
||||
{
|
||||
$appPSN = $psi->processNumber();
|
||||
$found = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
return $found;
|
||||
}
|
||||
|
||||
=pod
|
||||
|
||||
=item appIsFrontmost()
|
||||
|
||||
=cut
|
||||
sub _appIsFrontmost($)
|
||||
{
|
||||
my ($appSignature) = @_;
|
||||
my ($psi);
|
||||
my ($found) = 0;
|
||||
my ($appPSN);
|
||||
|
||||
foreach $psi (values(%Process))
|
||||
{
|
||||
if ($psi->processSignature() eq $appSignature)
|
||||
{
|
||||
$appPSN = $psi->processNumber();
|
||||
$found = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
return (GetFrontProcess() == $appPSN);
|
||||
}
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=item activate()
|
||||
|
||||
Launches CodeWarrior and brings it to the front.
|
||||
|
||||
Once found, path will be saved in $idepath_file for future reference.
|
||||
Edit or delete this file to change the location of the IDE. If app is
|
||||
moved, C<activate()> will prompt for a new location.
|
||||
|
||||
First looks for an open CodeWarrior app. Second, tries to open previously
|
||||
saved location in ':idepath.txt'. Third, tries to find it and allow user
|
||||
to choose it with Navigation Services (if present). Fourth, uses good old
|
||||
GUSI routines built-in to MacPerl for a Choose Directory dialog box.
|
||||
|
||||
=cut
|
||||
|
||||
sub activate ($) {
|
||||
|
||||
$ide_loc_file = $_[0]; # save in global
|
||||
|
||||
my($filepath, $appath, $psi) = ($ide_loc_file);
|
||||
|
||||
foreach $psi (values(%Process)) {
|
||||
if ($psi->processSignature() eq $app) {
|
||||
$appath = $psi->processAppSpec();
|
||||
_save_appath($filepath, $appath);
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$appath || !-x $appath) {
|
||||
$appath = _read_appath($filepath);
|
||||
}
|
||||
|
||||
if (!$appath || ! -x $appath)
|
||||
{
|
||||
# make sure that MacPerl is a front process
|
||||
#ActivateApplication('McPL');
|
||||
MacPerl::Answer("Please locate the CodeWarrior application.", "OK");
|
||||
|
||||
# prompt user for the file name, and store it
|
||||
my $macFile = StandardGetFile( 0, "APPL");
|
||||
if ( $macFile->sfGood() )
|
||||
{
|
||||
$appath = $macFile->sfFile();
|
||||
}
|
||||
else
|
||||
{
|
||||
die "Operation canceled\n";
|
||||
}
|
||||
|
||||
# if (eval {require Mac::Navigation}) {
|
||||
# my($options, $nav);
|
||||
# Mac::Navigation->import();
|
||||
# $options = NavGetDefaultDialogOptions();
|
||||
# $options->message('Where is CodeWarrior IDE?');
|
||||
# $options->windowTitle('Find CodeWarrior IDE');
|
||||
# $nav = NavChooseObject($Application{$app}, $options);
|
||||
# die "CodeWarrior IDE not found.\n" if (!$nav || !$nav->file(1));
|
||||
# $appath = $nav->file(1);
|
||||
# } else {
|
||||
# local(*D);
|
||||
# my $cwd = `pwd`;
|
||||
# $appath = _get_folder(
|
||||
# 'Where is the CW IDE folder?',
|
||||
# dirname($Application{$app})
|
||||
# );
|
||||
# die "CodeWarrior IDE not found.\n" if !$appath;
|
||||
# opendir(D, $appath) or die $!;
|
||||
# chdir($appath);
|
||||
# foreach my $file (sort readdir (D)) {
|
||||
# my(@app) = MacPerl::GetFileInfo($file);
|
||||
# if ($app[0] && $app[1] &&
|
||||
# $app[1] eq 'APPL' && $app[0] eq $app
|
||||
# ) {
|
||||
# $appath .= $file;
|
||||
# last;
|
||||
# }
|
||||
# }
|
||||
# chomp($cwd);
|
||||
# chdir($cwd);
|
||||
# }
|
||||
_save_appath($filepath, $appath);
|
||||
}
|
||||
|
||||
my($lp) = LaunchParam->new(
|
||||
launchAppSpec => $appath,
|
||||
launchControlFlags => launchContinue() + launchNoFileFlags()
|
||||
);
|
||||
|
||||
unless (LaunchApplication($lp)) {
|
||||
unlink($filepath);
|
||||
die $^E;
|
||||
}
|
||||
|
||||
# wait for CodeWarrior to show up in the list of processes
|
||||
while (!_appIsRunning('CWIE'))
|
||||
{
|
||||
WaitNextEvent();
|
||||
}
|
||||
|
||||
# wait for CodeWarrior to come to the front
|
||||
while (!_appIsFrontmost('CWIE'))
|
||||
{
|
||||
WaitNextEvent();
|
||||
}
|
||||
}
|
||||
|
||||
=pod
|
||||
|
||||
=item getCodeWarriorPath()
|
||||
|
||||
Returns a file path relative to the CodeWarrior folder
|
||||
|
||||
=cut
|
||||
|
||||
sub getCodeWarriorPath($)
|
||||
{
|
||||
my($subfolder)=@_;
|
||||
|
||||
my($app_path) = _read_appath($ide_loc_file);
|
||||
if ($app_path eq "") { die "Error: Failed to get CodeWarrior IDE path\n"; }
|
||||
|
||||
my($codewarrior_root) = $app_path;
|
||||
$codewarrior_root =~ s/[^:]*$//;
|
||||
return ($codewarrior_root . $subfolder);
|
||||
}
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=item getCodeWarriorIDEName()
|
||||
|
||||
Returns the name of the CodeWarrior application
|
||||
|
||||
=cut
|
||||
|
||||
sub getCodeWarriorIDEName()
|
||||
{
|
||||
my($subfolder)=@_;
|
||||
|
||||
my($app_path) = _read_appath($ide_loc_file);
|
||||
if ($app_path eq "") { die "Error: Failed to get CodeWarrior IDE path\n"; }
|
||||
|
||||
my(@codewarrior_path) = split(/:/, $app_path);
|
||||
return pop(@codewarrior_path);
|
||||
}
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=item quit()
|
||||
|
||||
Quits CodeWarrior.
|
||||
|
||||
=cut
|
||||
|
||||
sub quit() {
|
||||
|
||||
$last_project_built = "";
|
||||
$last_project_was_closed = 0;
|
||||
|
||||
my($evt) = do_event(qw/aevt quit/, $app);
|
||||
}
|
||||
|
||||
|
||||
sub _build ($;$) {
|
||||
my($evt);
|
||||
if ($_[1]) {
|
||||
my($prm) =
|
||||
q"'----':obj {form:name, want:type(TRGT), seld:TEXT(@), from:" .
|
||||
AEPrint($_[0]) . '}';
|
||||
$evt = do_event(qw/CWIE MAKE/, $app, $prm, $_[1]);
|
||||
} else {
|
||||
my($prm) = q"'----':" . AEPrint($_[0]);
|
||||
$evt = do_event(qw/CWIE MAKE/, $app, $prm);
|
||||
}
|
||||
}
|
||||
|
||||
sub _remove_object ($;$) {
|
||||
my($evt);
|
||||
if ($_[1]) {
|
||||
my($prm) =
|
||||
q"'----':obj {form:name, want:type(TRGT), seld:TEXT(@), from:" .
|
||||
AEPrint($_[0]) . '}';
|
||||
$evt = do_event(qw/CWIE RMOB/, $app, $prm, $_[1]);
|
||||
} else {
|
||||
my($prm) = q"'----':" . AEPrint($_[0]);
|
||||
$evt = do_event(qw/CWIE RMOB/, $app, $prm);
|
||||
}
|
||||
}
|
||||
|
||||
sub _open_file ($) {
|
||||
my($prm) =
|
||||
q"'----':obj {form:name, want:type(alis), " .
|
||||
q"seld:TEXT(@), from:'null'()}";
|
||||
|
||||
do_event(qw/aevt odoc/, $app, $prm, $_[0]);
|
||||
}
|
||||
|
||||
sub import_project ($$) {
|
||||
my($xml_file, $project_path) = @_;
|
||||
|
||||
my($prm) = "kocl:type(PRJD), rtyp:TEXT(@), data:TEXT(@), &subj:'null'()";
|
||||
|
||||
my($evt) = do_event(qw/core crel/, $app, $prm, $project_path, $xml_file);
|
||||
my($result) = _get_event_result($evt);
|
||||
|
||||
if ($result eq "") {
|
||||
_close(_get_project($project_path));
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
sub export_project ($$) {
|
||||
my($project_path, $xml_out_path) = @_;
|
||||
my($p, $project_was_closed);
|
||||
|
||||
$project_was_closed = 0;
|
||||
while (1) {
|
||||
$p = _get_project($project_path);
|
||||
if (!$p) {
|
||||
if ($project_was_closed) {
|
||||
print "### Error - request for project document failed after opening\n";
|
||||
die "### possibly CW bug: be sure to close your Find window\n";
|
||||
}
|
||||
$project_was_closed = 1;
|
||||
_open_file($project_path);
|
||||
} else {
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
# avoid problems with the Project Messages window
|
||||
_close_named_window("Project Messages");
|
||||
|
||||
my($prm) =
|
||||
q"'----':obj {form:indx, want:type(PRJD), " .
|
||||
q"seld:1, from:'null'()}, kfil:TEXT(@)";
|
||||
|
||||
my($evt) = do_event(qw/CWIE EXPT/, $app, $prm, $xml_out_path);
|
||||
|
||||
if ($project_was_closed) {
|
||||
$p = _get_project($project_path);
|
||||
_close($p);
|
||||
}
|
||||
|
||||
return _get_event_result($evt);
|
||||
}
|
||||
|
||||
sub _doc_named ($) {
|
||||
my($prm) =
|
||||
q"'----':obj {form:test, want:type(docu), from:'null'(), " .
|
||||
q"seld:cmpd{relo:'= ', 'obj1':obj {form:prop, want:type" .
|
||||
q"(prop), seld:type(pnam), from:'exmn'()}, 'obj2':TEXT(@)}}";
|
||||
|
||||
my($evt) = do_event(qw/core getd/, $app, $prm, $_[0]);
|
||||
return($evt->{REPLY} eq 'aevt\ansr{}' ? undef : $evt);
|
||||
}
|
||||
|
||||
sub _full_path ($) {
|
||||
my($obj) = $_[0];
|
||||
my($prm) =
|
||||
q"'----':obj {form:prop, want:type(prop), seld:type(FILE), " .
|
||||
q"from:" . AEPrint($_[0]) . q"}, rtyp:type(TEXT)";
|
||||
my($evt) = do_event(qw/core getd/, $app, $prm);
|
||||
|
||||
return MacPerl::MakePath(
|
||||
MacUnpack('fss ', (
|
||||
AEGetParamDesc($evt->{REP}, keyDirectObject()))->data()->get()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
sub _save_errors_window ($) {
|
||||
my($prm) =
|
||||
q"'----':obj {form:name, want:type(alis), seld:TEXT(@), from:'null'()}";
|
||||
do_event(qw/MMPR SvMs/, $app, $prm, $_[0]);
|
||||
}
|
||||
|
||||
|
||||
sub _close_errors_window () {
|
||||
return _close_named_window('Errors & Warnings');
|
||||
}
|
||||
|
||||
|
||||
sub _close_named_window ($) {
|
||||
my($window_name) = @_;
|
||||
|
||||
my($prm) =
|
||||
q"'----':obj {form:name, want:type(cwin), " .
|
||||
q"seld:TEXT(@), from:'null'()}";
|
||||
|
||||
my($evt) = do_event(qw/core clos/, $app, $prm, $window_name);
|
||||
return($evt->{REPLY} eq 'aevt\ansr{}' ? 1 : 0);
|
||||
}
|
||||
|
||||
sub _close () {
|
||||
my($prm) = q"'----':" . AEPrint($_[0]);
|
||||
do_event(qw/core clos/, $app, $prm);
|
||||
}
|
||||
|
||||
sub _get_dobj ($) {
|
||||
return(AEGetParamDesc($_[0]->{REP}, keyDirectObject()));
|
||||
}
|
||||
|
||||
sub _get_folder ($$) {
|
||||
require 'GUSI.ph';
|
||||
my($prompt, $default) = @_;
|
||||
MacPerl::Choose(
|
||||
GUSI::AF_FILE(), 0, $prompt, '',
|
||||
GUSI::CHOOSE_DIR() + ($default ? &GUSI::CHOOSE_DEFAULT : 0),
|
||||
$default
|
||||
);
|
||||
}
|
||||
|
||||
sub _get_event_result ($)
|
||||
{
|
||||
my($evt) = @_;
|
||||
|
||||
my($result) = $evt->{ERROR};
|
||||
|
||||
if ( $result eq "" && $evt->{ERRNO} != 0 )
|
||||
{
|
||||
$result = "unknown error (".$evt->{ERRNO}.")";
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
sub _save_appath ($$) {
|
||||
|
||||
my($cwd) = cwd(); # remember the current working dir
|
||||
chdir($scriptDir); # change dir to the script dir
|
||||
|
||||
local(*F);
|
||||
open(F, '>' . $_[0]) or die $!;
|
||||
print F $_[1];
|
||||
close(F);
|
||||
|
||||
chdir($cwd); # restore the cwd
|
||||
}
|
||||
|
||||
sub _read_appath ($) {
|
||||
|
||||
my($filepath) = @_;
|
||||
|
||||
my($cwd) = cwd(); # remember the current working dir
|
||||
chdir($scriptDir); # change dir to the script dir
|
||||
|
||||
if (! -e $filepath) {
|
||||
return "";
|
||||
}
|
||||
|
||||
local(*F);
|
||||
open(F, $filepath);
|
||||
my($appath) = <F>;
|
||||
close(F);
|
||||
|
||||
chdir($cwd); # restore the cwd
|
||||
return($appath);
|
||||
}
|
||||
|
||||
|
||||
sub _test ($) {
|
||||
activate($ide_loc_file);
|
||||
my($path) = $_[0];
|
||||
build_project(
|
||||
"${path}modules:xml:macbuild:XML.mcp", '',
|
||||
"${path}build:mac:Mozilla.BuildLog.part"
|
||||
);
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=back
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
=over 4
|
||||
|
||||
=item v1.02, September 23, 1998
|
||||
|
||||
Made fixes in finding and saving location of CodeWarrior IDE.
|
||||
|
||||
=item v1.01, June 1, 1998
|
||||
|
||||
Made fixes to C<chdir()> in C<activate()>, made C<activate()> more robust
|
||||
in finding CodeWarrior IDE, added global variable to NOT switch to IDE
|
||||
for each sent event, a few other fixes.
|
||||
|
||||
=item v1.00, May 30, 1998
|
||||
|
||||
First shot
|
||||
|
||||
=back
|
||||
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Chris Nandor F<E<lt>pudge@pobox.comE<gt>>, and the author of the
|
||||
original I<CodeWarriorLib>, Scott Collins F<E<lt>scc@netscape.comE<gt>>.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
BuildProject L<Moz>.
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
The contents of this file are subject to the Netscape Public
|
||||
License Version 1.1 (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.mozilla.org/NPL/
|
||||
|
||||
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.
|
||||
|
||||
The Original Code is Mozilla Communicator client code, released
|
||||
March 31, 1998.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
=cut
|
||||
@@ -1,573 +0,0 @@
|
||||
#!perl -w
|
||||
package Moz::Jar;
|
||||
|
||||
#
|
||||
# Module for creating jar files, either using a jar manifest, or
|
||||
# simply jarring up folders on disk.
|
||||
#
|
||||
|
||||
require 5.004;
|
||||
require Exporter;
|
||||
|
||||
use strict;
|
||||
use Archive::Zip;
|
||||
use File::Path;
|
||||
|
||||
use Mac::Files;
|
||||
|
||||
use Moz::Moz;
|
||||
|
||||
use vars qw( @ISA @EXPORT );
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(
|
||||
CreateJarFileFromDirectory
|
||||
CreateJarFromManifest
|
||||
WriteOutJarFiles
|
||||
SanityCheckJarOptions
|
||||
);
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Add the contents of a directory to the zip file
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
sub _addDirToJar($$$$)
|
||||
{
|
||||
my($dir, $jar_root, $zip, $compress) = @_;
|
||||
|
||||
opendir(DIR, $dir) or die "Error: Cannot open dir $dir\n";
|
||||
my @files = readdir(DIR);
|
||||
closedir DIR;
|
||||
|
||||
my $unix_jar_root = $jar_root;
|
||||
$unix_jar_root =~ s|:|/|g; # colon to slash conversion
|
||||
|
||||
my $file;
|
||||
|
||||
foreach $file (@files)
|
||||
{
|
||||
my $filepath = $dir.":".$file;
|
||||
|
||||
if (-d $filepath)
|
||||
{
|
||||
print "Adding files to jar from $filepath\n";
|
||||
_addDirToJar($filepath, $jar_root, $zip, $compress);
|
||||
}
|
||||
else
|
||||
{
|
||||
my $member = Archive::Zip::Member->newFromFile($filepath);
|
||||
die "Error: Failed to create zip file member $filepath\n" unless $member;
|
||||
|
||||
my $unixName = $filepath;
|
||||
$unixName =~ s|:|/|g; # colon to slash conversion
|
||||
$unixName =~ s|^$unix_jar_root||; # relativise
|
||||
|
||||
$member->fileName($unixName);
|
||||
|
||||
# print "Adding $file as $unixName\n";
|
||||
|
||||
if ($compress) {
|
||||
$member->desiredCompressionMethod(Archive::Zip::COMPRESSION_DEFLATED);
|
||||
} else {
|
||||
$member->desiredCompressionMethod(Archive::Zip::COMPRESSION_STORED);
|
||||
}
|
||||
|
||||
$zip->addMember($member);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Add the contents of a directory to the zip file
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub CreateJarFileFromDirectory($$$)
|
||||
{
|
||||
my($srcdir, $jarpath, $compress) = @_;
|
||||
|
||||
my $zip = Archive::Zip->new();
|
||||
|
||||
_addDirToJar($srcdir, $srcdir, $zip, $compress);
|
||||
|
||||
print "Saving zip file...\n";
|
||||
my $status = $zip->writeToFileNamed($jarpath);
|
||||
if ($status == 0) {
|
||||
print "Zipping completed successfully\n";
|
||||
} else {
|
||||
print "Error saving zip file\n";
|
||||
}
|
||||
|
||||
# set the file type/creator to something reasonable
|
||||
MacPerl::SetFileInfo("ZIP ", "ZIP ", $jarpath);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# printZipContents
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
sub printZipContents($)
|
||||
{
|
||||
my($zip) = @_;
|
||||
|
||||
my(@members) = $zip->memberNames();
|
||||
|
||||
print "Zip contains:\n";
|
||||
|
||||
my($member);
|
||||
foreach $member (@members)
|
||||
{
|
||||
print " $member\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# safeSaveJarFile
|
||||
#
|
||||
# Archive::Zip has a problem where you cannot save a zip file on top of
|
||||
# an existing zip file that it has open, because it holds references
|
||||
# into that zip. So we have to save to a temp file, then do a swap.
|
||||
#
|
||||
# Note that the zip will become invalid after this operation.
|
||||
# If you want to do further operations on it, you'll have to reread it.
|
||||
#-------------------------------------------------------------------------------
|
||||
sub safeSaveJarFile($$)
|
||||
{
|
||||
my($zip, $full_dest_path) = @_;
|
||||
|
||||
my($temp_file_name) = $full_dest_path."_temp";
|
||||
|
||||
($zip->writeToFileNamed($temp_file_name) == Archive::Zip::AZ_OK) || die "Error: died writing jar to temp file $temp_file_name\n";
|
||||
|
||||
unlink $full_dest_path;
|
||||
|
||||
(rename $temp_file_name, $full_dest_path) || die "Error: Failed to rename $temp_file_name\n";
|
||||
|
||||
MacPerl::SetFileInfo("ZIP ", "ZIP ", $full_dest_path);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# addToJarFile
|
||||
#
|
||||
# Add a file to a jar file
|
||||
#
|
||||
# Parameters:
|
||||
# 1. Jar ID. Unix path of jar file inside chrome.
|
||||
# 2. Abs path to jar.mn file (i.e. source) (mac breaks)
|
||||
# 3. File source, relative to jar.mn path (mac breaks)
|
||||
# 4. Abs path to the resulting .jar file (mac breaks)
|
||||
# 5. Relative file path within the jar (unix breaks)
|
||||
# 6. Reference to hash of jar files
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub addToJarFile($$$$$$$)
|
||||
{
|
||||
my($jar_id, $jar_man_dir, $file_src, $jar_path, $file_jar_path, $override, $jars) = @_;
|
||||
|
||||
# print "addToJarFile with:\n $jar_man_dir\n $file_src\n $jar_path\n $file_jar_path\n";
|
||||
|
||||
unless ($jar_path =~ m/(.+:)([^:]+)$/) { die "Error: Bad jar path $jar_path\n"; }
|
||||
|
||||
my($target_dir) = $1;
|
||||
my($jar_name) = $2;
|
||||
|
||||
$target_dir =~ s/[^:]+$//;
|
||||
|
||||
# print "¥ $target_dir $jar_name\n";
|
||||
|
||||
# find the source file
|
||||
my($src) = $jar_man_dir.":".$file_src;
|
||||
if ((!-e $src) && ($file_src =~ m/.+:([^:]+)$/)) # src does not exist. Fall back to looking for src in jar.mn dir
|
||||
{
|
||||
$file_src = $1;
|
||||
$src = $jar_man_dir.":".$file_src;
|
||||
|
||||
if (!-e $src) {
|
||||
die "Error: Can't find chrome file $src\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ($main::options{chrome_jars})
|
||||
{
|
||||
my($zip) = $jars->{$jar_id};
|
||||
unless ($zip) { die "Error: Can't find Zip entry for $jar_id\n"; }
|
||||
|
||||
# print "Adding $file_src to jar file $jar_path at $file_jar_path\n";
|
||||
my($member) = Archive::Zip::Member->newFromFile($src);
|
||||
unless ($member) { die "Error: Failed to create zip file member $src\n"; }
|
||||
|
||||
$member->fileName($file_jar_path);
|
||||
|
||||
my($compress) = 1;
|
||||
if ($compress) {
|
||||
$member->desiredCompressionMethod(Archive::Zip::COMPRESSION_DEFLATED);
|
||||
$member->desiredCompressionLevel(Archive::Zip::COMPRESSION_LEVEL_DEFAULT); # defaults to 6
|
||||
} else {
|
||||
$member->desiredCompressionMethod(Archive::Zip::COMPRESSION_STORED);
|
||||
}
|
||||
|
||||
my($old_member) = $zip->memberNamed($file_jar_path);
|
||||
|
||||
if ($override)
|
||||
{
|
||||
if ($old_member)
|
||||
{
|
||||
# print "Overriding $file_jar_path in jar file $jar_id\n";
|
||||
# need to compare mod dates or use the + here
|
||||
$zip->removeMember($old_member);
|
||||
}
|
||||
|
||||
$zip->addMember($member);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($old_member)
|
||||
{
|
||||
#compare dates here
|
||||
my($member_moddate) = $old_member->lastModTime();
|
||||
my($file_moddate) = GetFileModDate($src);
|
||||
|
||||
if ($file_moddate > $member_moddate)
|
||||
{
|
||||
print "Updating older file $file_jar_path in $jar_id\n";
|
||||
$zip->removeMember($old_member);
|
||||
$zip->addMember($member);
|
||||
}
|
||||
else
|
||||
{
|
||||
print "File $file_jar_path in $jar_id is more recent. Not updating.\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$zip->addMember($member);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($main::options{chrome_files}) # we install raw files too
|
||||
{
|
||||
my($rel_path) = $file_jar_path;
|
||||
$rel_path =~ s|/|:|g; # slash to colons
|
||||
|
||||
my($dir_name) = $jar_name;
|
||||
$dir_name =~ s/\.jar$//;
|
||||
|
||||
my($dst) = $target_dir.$dir_name.":".$rel_path;
|
||||
|
||||
# print "Aliassing $src\n to\n$dst\n";
|
||||
if ($override)
|
||||
{
|
||||
unlink $dst;
|
||||
MakeAlias($src, $dst); # don't check errors, otherwise we fail on replacement
|
||||
}
|
||||
else
|
||||
{
|
||||
if (-e $dst)
|
||||
{
|
||||
#compare dates here
|
||||
my($dst_moddate) = GetFileModDate($dst);
|
||||
my($file_moddate) = GetFileModDate($src);
|
||||
|
||||
if ($file_moddate > $dst_moddate)
|
||||
{
|
||||
print "Updating older file $rel_path in $dir_name\n";
|
||||
unlink $dst;
|
||||
MakeAlias($src, $dst);
|
||||
}
|
||||
else
|
||||
{
|
||||
print "File $file_jar_path in $jar_id is more recent. Not updating.\n";
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
MakeAlias($src, $dst);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# setupJarFile
|
||||
#
|
||||
# setup a zip for writing
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub setupJarFile($$$)
|
||||
{
|
||||
my($jar_id, $dest_path, $jar_hash) = @_;
|
||||
|
||||
# print "Creating jar file $jar_id at $jar_path\n";
|
||||
|
||||
my($jar_file) = $jar_id;
|
||||
$jar_file =~ s|/|:|g; # slash to colons
|
||||
my($full_jar_path) = full_path_to($dest_path.":".$jar_file);
|
||||
|
||||
if ($main::options{chrome_jars})
|
||||
{
|
||||
my($zip) = $jar_hash->{$jar_id};
|
||||
if (!$zip) # if we haven't made it already, do so
|
||||
{
|
||||
my($zip) = Archive::Zip->new();
|
||||
$jar_hash->{$jar_id} = $zip;
|
||||
|
||||
# does the jar file exist already? If so, read it in
|
||||
if (-e $full_jar_path)
|
||||
{
|
||||
print "Reading in jar file $jar_id\n";
|
||||
if ($zip->read($full_jar_path) != Archive::Zip::AZ_OK) { die "Error: Failed to re-read $full_jar_path\n"; }
|
||||
|
||||
# printZipContents($zip);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
# installing files.
|
||||
# nothing to do. MakeAlias creates dirs as needed.
|
||||
|
||||
# add this jar to the list
|
||||
$jar_hash->{$jar_id} = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# closeJarFile
|
||||
#
|
||||
# We're done with this jar file _for this jar.mn_. We may add more entries
|
||||
# to it later, so keep it open in the hash.
|
||||
#-------------------------------------------------------------------------------
|
||||
sub closeJarFile($$)
|
||||
{
|
||||
my($jar_path, $jar_hash) = @_;
|
||||
|
||||
# print "Closing jar file $jar_path\n";
|
||||
|
||||
if ($main::options{chrome_jars})
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
# installing files.
|
||||
# nothing to do
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# WriteOutJarFiles
|
||||
#
|
||||
# Now we dump out the jars
|
||||
#-------------------------------------------------------------------------------
|
||||
sub WriteOutJarFiles($$)
|
||||
{
|
||||
my($chrome_dir, $jars) = @_;
|
||||
|
||||
unless ($main::options{chrome_jars}) { return; }
|
||||
|
||||
my($full_chrome_path) = full_path_to($chrome_dir);
|
||||
|
||||
my($key);
|
||||
foreach $key (keys %$jars)
|
||||
{
|
||||
my($zip) = $jars->{$key};
|
||||
|
||||
my($rel_path) = $key;
|
||||
$rel_path =~ s/\//:/g;
|
||||
|
||||
my($output_path) = $full_chrome_path.":".$rel_path;
|
||||
|
||||
print "Writing zip file $key to $output_path\n";
|
||||
|
||||
# ensure the target dirs exist
|
||||
my($path) = $output_path;
|
||||
$path =~ s/[^:]+$//;
|
||||
mkpath($path);
|
||||
|
||||
# unlink $output_path; # remove any existing jar
|
||||
safeSaveJarFile($zip, $output_path);
|
||||
# $zip is invalid after this operation, so nuke it here
|
||||
$jars->{$key} = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# registerChromePackage
|
||||
#
|
||||
# Enter a chrome package into the installed-chrome.txt file
|
||||
#-------------------------------------------------------------------------------
|
||||
sub registerChromePackage($$$$$$)
|
||||
{
|
||||
my($jar_file, $file_path, $chrome_dir, $jar_hash, $chrome_type, $pkg_name) = @_;
|
||||
|
||||
my($manifest_subdir) = $jar_file;
|
||||
$manifest_subdir =~ s/:/\//g;
|
||||
|
||||
my($chrome_entry);
|
||||
|
||||
if ($main::options{use_jars}) {
|
||||
$chrome_entry = "$chrome_type,install,url,jar:resource:/chrome/$manifest_subdir!/$chrome_type/$pkg_name";
|
||||
} else {
|
||||
$manifest_subdir =~ s/\.jar$//;
|
||||
$chrome_entry = "$chrome_type,install,url,resource:/chrome/$manifest_subdir/$chrome_type/$pkg_name";
|
||||
}
|
||||
|
||||
# print "Entering $chrome_entry in installed-chrome.txt\n";
|
||||
|
||||
# ensure chrome_dir exists
|
||||
mkpath($chrome_dir);
|
||||
|
||||
my($inst_chrome) = ${chrome_dir}.":installed-chrome.txt";
|
||||
|
||||
if (open(CHROMEFILE, "<$inst_chrome")) {
|
||||
while (<CHROMEFILE>) {
|
||||
chomp;
|
||||
if ($_ eq $chrome_entry) {
|
||||
# $chrome_entry already appears in installed-chrome.txt file
|
||||
# just update the mod date
|
||||
my $now = time;
|
||||
utime($now, $now, $inst_chrome) || die "Error: Couldn't touch $inst_chrome";
|
||||
print "+++ updating chrome $inst_chrome\n+++\t\t$chrome_entry\n";
|
||||
close(CHROMEFILE) || die "Error: can't close $inst_chrome: $!";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
close(CHROMEFILE) || die "Error: can't close $inst_chrome: $!";
|
||||
}
|
||||
open(CHROMEFILE, ">>${inst_chrome}") || die "Error: Failed to open $inst_chrome\n";
|
||||
print(CHROMEFILE "${chrome_entry}\n");
|
||||
close(CHROMEFILE) || die "Error: Failed to close $inst_chrome\n";
|
||||
print "+++ adding chrome $inst_chrome\n+++\t\t$chrome_entry\n";
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Create or add to a jar file from a jar.mn file.
|
||||
# Both arguments are relative to the mozilla root dir.
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
sub CreateJarFromManifest($$$)
|
||||
{
|
||||
my($jar_man_path, $dest_path, $jars) = @_;
|
||||
|
||||
if ($main::options{chrome_jars}) {
|
||||
print "Jarring from $jar_man_path\n";
|
||||
}
|
||||
if ($main::options{chrome_files}) {
|
||||
print "Installing files from $jar_man_path\n";
|
||||
}
|
||||
|
||||
$jar_man_path = full_path_to($jar_man_path);
|
||||
$dest_path = full_path_to($dest_path);
|
||||
|
||||
# if the jars hash is empty, nuke installed-chrome.txt
|
||||
if (! scalar(%$jars))
|
||||
{
|
||||
print "Nuking installed-chrome.txt\n";
|
||||
my($installed_chrome) = $dest_path.":installed-chrome.txt";
|
||||
# unlink $installed_chrome;
|
||||
}
|
||||
|
||||
my $jar_man_dir = "";
|
||||
my $jar_man_file = "";
|
||||
|
||||
if ($jar_man_path =~ /(.+):([^:]+)$/)
|
||||
{
|
||||
$jar_man_dir = $1; # no trailing :
|
||||
$jar_man_file = $2;
|
||||
}
|
||||
|
||||
# Keep a hash of jar files, keyed on relative jar path (e.g. "packages/core.jar")
|
||||
# Entries are open Archive::Zips (if zipping), and installed-chrome entries.
|
||||
|
||||
my($jar_id) = ""; # Current foo/bar.jar from jar.mn file
|
||||
my($jar_file) = ""; # relative path to jar file (from $dest_path), with mac separators
|
||||
my($full_jar_path);
|
||||
|
||||
open(FILE, "<$jar_man_path") || die "Error: could not open \"$jar_man_path\": $!";
|
||||
while (<FILE>)
|
||||
{
|
||||
my($line) = $_;
|
||||
chomp($line);
|
||||
|
||||
# print "$line\n";
|
||||
|
||||
if ($line =~ /^\s*\#.*$/) { # skip comments
|
||||
next;
|
||||
}
|
||||
|
||||
if ($line =~/^([\w\d.\-\_\\\/]+)\:\s*$/) # line start jar file entries
|
||||
{
|
||||
$jar_id = $1;
|
||||
$jar_file = $jar_id;
|
||||
$jar_file =~ s|/|:|g; # slash to colons
|
||||
$full_jar_path = $dest_path.":".$jar_file;
|
||||
|
||||
setupJarFile($jar_id, $dest_path, $jars);
|
||||
|
||||
}
|
||||
elsif ($line =~ /^(\+?)\s+([\w\d.\-\_\\\/]+)\s*(\([\w\d.\-\_\\\/]+\))?$\s*/) # jar file entry
|
||||
{
|
||||
my($override) = ($1 eq "+");
|
||||
my($file_dest) = $2;
|
||||
my($file_src) = $3;
|
||||
|
||||
if ($file_src) {
|
||||
$file_src = substr($file_src, 1, -1); #strip the ()
|
||||
} else {
|
||||
$file_src = $file_dest;
|
||||
}
|
||||
|
||||
$file_src =~ s|/|:|g;
|
||||
|
||||
if ($jar_file ne "") # if jar is open, add to jar
|
||||
{
|
||||
if ($file_dest =~ /([\w\d.\-\_]+)\/([\w\d.\-\_\\\/]+)contents.rdf/)
|
||||
{
|
||||
my $chrome_type = $1;
|
||||
my $pkg_name = $2;
|
||||
registerChromePackage($jar_file, $file_dest, $dest_path, $jars, $chrome_type, $pkg_name);
|
||||
}
|
||||
|
||||
addToJarFile($jar_id, $jar_man_dir, $file_src, $full_jar_path, $file_dest, $override, $jars);
|
||||
}
|
||||
else
|
||||
{
|
||||
die "Error: bad jar.mn format at $line\n";
|
||||
}
|
||||
}
|
||||
elsif ($line =~ /^\s*$/ ) # blank line
|
||||
{
|
||||
if ($jar_file ne "") #if a jar file is open, close it
|
||||
{
|
||||
closeJarFile($full_jar_path, $jars);
|
||||
|
||||
$jar_file = "";
|
||||
$full_jar_path = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close(FILE);
|
||||
|
||||
if ($jar_file ne "") #if a jar file is open, close it
|
||||
{
|
||||
closeJarFile($full_jar_path, $jars);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
1;
|
||||
@@ -1,228 +0,0 @@
|
||||
#!perl -w
|
||||
package Moz::MacCVS;
|
||||
|
||||
# package Mac::Apps::MacCVS; this should really be the name of the package
|
||||
# but due to our directory hierarchy in mozilla, I am not doing it
|
||||
|
||||
require 5.004;
|
||||
require Exporter;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
|
||||
use vars qw($VERSION @ISA @EXPORT);
|
||||
|
||||
use Cwd;
|
||||
|
||||
use File::Basename;
|
||||
|
||||
use Mac::StandardFile;
|
||||
use Mac::AppleEvents;
|
||||
use Mac::AppleEvents::Simple;
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(new describe checkout update);
|
||||
$VERSION = "1.00";
|
||||
|
||||
# If you want to understand the gobbldeygook that's used to build Apple Events,
|
||||
# you should start by reading the AEGizmos documentation.
|
||||
|
||||
|
||||
# Architecture:
|
||||
# cvs session object:
|
||||
# name - session name
|
||||
# session_file - session file
|
||||
#
|
||||
#
|
||||
|
||||
my($last_error) = 0;
|
||||
my($gAppSig) = 'Mcvs'; # MacCVS Pro
|
||||
|
||||
#
|
||||
# utility routines
|
||||
#
|
||||
|
||||
|
||||
sub _checkForEventError($)
|
||||
{
|
||||
my($evt) = @_;
|
||||
|
||||
if ($evt->{ERRNO} != 0)
|
||||
{
|
||||
print STDERR "Error. Script returned '$evt->{ERROR} (error $evt->{ERRNO})\n";
|
||||
$last_error = $evt->{ERRNO};
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1; # success
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Session object methods
|
||||
#
|
||||
|
||||
sub new
|
||||
{
|
||||
my ( $proto, $session_file) = @_;
|
||||
my $class = ref($proto) || $proto;
|
||||
my $self = {};
|
||||
|
||||
if ( defined($session_file) && ( -e $session_file) )
|
||||
{
|
||||
$self->{"name"} = basename( $session_file );
|
||||
$self->{"session_file"} = $session_file;
|
||||
bless $self, $class;
|
||||
return $self;
|
||||
}
|
||||
else
|
||||
{
|
||||
print STDERR "MacCVS->new cvs file < $session_file > does not exist\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# makes sure that the session is open
|
||||
# assertSessionOpen()
|
||||
# returns 1 on success
|
||||
sub assertSessionOpen()
|
||||
{
|
||||
my ($self) = shift;
|
||||
|
||||
$last_error = 0;
|
||||
|
||||
my($prm) =
|
||||
q"'----':obj {form:name, want:type(alis), seld:TEXT(@), from:'null'()}";
|
||||
|
||||
my($evt) = do_event(qw/aevt odoc/, $gAppSig, $prm, $self->{session_file});
|
||||
return _checkForEventError($evt);
|
||||
}
|
||||
|
||||
# prints the cvs object, used mostly for debugging
|
||||
sub describe
|
||||
{
|
||||
my($self) = shift;
|
||||
$last_error = 0;
|
||||
print "MacCVS:: name: ", $self->{name}, " session file: ", $self->{session_file}, "\n";
|
||||
}
|
||||
|
||||
# checkout( self, module, revision, date)
|
||||
# MacCVS checkout command
|
||||
# returns 1 on success.
|
||||
sub checkout()
|
||||
{
|
||||
my($self, $module, $revision, $date ) = @_;
|
||||
unless( defined ($module) ) { $module = ""; } # get rid of the pesky undefined warnings
|
||||
unless( defined ($revision) ) { $revision = ""; }
|
||||
unless( defined ($date) ) { $date = ""; }
|
||||
|
||||
$last_error = 0;
|
||||
|
||||
$self->assertSessionOpen() || die "Error: failed to open MacCVS session file at $self->{session_file}\n";
|
||||
|
||||
my($revstring) = ($revision ne "") ? $revision : "(none)";
|
||||
my($datestring) = ($date ne "") ? $date : "(none)";
|
||||
|
||||
print "Checking out $module with revision $revstring, date $datestring\n";
|
||||
|
||||
my($prm) =
|
||||
q"'----':obj {form:name, want:type(docu), seld:TEXT(@), from:'null'()}, ".
|
||||
q"modl:'TEXT'(@), tagr:'TEXT'(@), tagd:'TEXT'(@) ";
|
||||
|
||||
my($evt) = do_event(qw/MCvs cout/, $gAppSig, $prm, $self->{name}, $module, $revision, $date);
|
||||
return _checkForEventError($evt);
|
||||
}
|
||||
|
||||
|
||||
# update( self, branch tag, list of paths)
|
||||
# MacCVS udate command
|
||||
# returns 1 on success.
|
||||
# NOTE: MacCVS Pro does not correctly support this stuff yet (as of version 2.7d5).
|
||||
sub update()
|
||||
{
|
||||
my($self, $branch, $paths ) = @_;
|
||||
|
||||
$last_error = 0;
|
||||
|
||||
$self->assertSessionOpen() || die "Error: failed to open MacCVS session file at $self->{session_file}\n";
|
||||
|
||||
if ($branch eq "HEAD") {
|
||||
$branch = "";
|
||||
}
|
||||
|
||||
my($paths_list) = "";
|
||||
|
||||
my($path);
|
||||
foreach $path (@$paths)
|
||||
{
|
||||
if ($paths_list ne "") {
|
||||
$paths_list = $paths_list.", ";
|
||||
}
|
||||
|
||||
$paths_list = $paths_list."Ò".$path."Ó";
|
||||
}
|
||||
|
||||
my($prm) =
|
||||
q"'----':obj {form:name, want:type(docu), seld:TEXT(@), from:'null'()}, ".
|
||||
q"tagr:'TEXT'(@), tFls:[";
|
||||
|
||||
$prm = $prm.$paths_list."]";
|
||||
|
||||
my($evt) = do_event(qw/MCvs updt/, $gAppSig, $prm, $self->{name}, $branch);
|
||||
return _checkForEventError($evt);
|
||||
};
|
||||
|
||||
|
||||
sub getLastError()
|
||||
{
|
||||
return $last_error;
|
||||
}
|
||||
|
||||
1;
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MacCVS - Interface to MacCVS
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use MacCVS;
|
||||
$session = MacCVS->new( <session_file_path>) || die "cannot create session";
|
||||
$session->checkout([module] [revision] [date]) || die "Could not check out";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This is a MacCVS interface for talking to MacCVS Pro client.
|
||||
MacCVSSession is the class used to manipulate the session
|
||||
|
||||
=item new
|
||||
MacCVS->new( <cvs session file path>);
|
||||
|
||||
Creates a new session. Returns undef on failure.
|
||||
|
||||
=item checkout( <module> [revision] [date] )
|
||||
|
||||
cvs checkout command. Revision and date are optional
|
||||
returns 0 on failure
|
||||
|
||||
=cut
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
=over
|
||||
|
||||
=item MacCVS Home Page
|
||||
|
||||
http://www.maccvs.org/
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Aleks Totic atotic@netscape.com
|
||||
Simon Fraser sfraser@netscape.com
|
||||
|
||||
=cut
|
||||
|
||||
__END__
|
||||
@@ -1,603 +0,0 @@
|
||||
=head1 NAME
|
||||
|
||||
B<Moz> - routines for automating CodeWarrior builds, and some extra-curricular
|
||||
activities related to building Mozilla
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Moz;
|
||||
|
||||
OpenErrorLog(":::BuildLog");
|
||||
StopForErrors();
|
||||
|
||||
$Moz::QUIET = 1;
|
||||
InstallFromManifest(":projects:MANIFEST", $dist_dir);
|
||||
|
||||
BuildProjectClean(":projects:SomeProject.mcp", "SomeTarget");
|
||||
MakeAlias(":projects:SomeProject.shlb", $dist_dir);
|
||||
|
||||
DontStopForErrors();
|
||||
|
||||
BuildProject(":projects:SomeOtherProject.mcp", "SomeTarget");
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
B<Moz> comprises the routines needed to slap CodeWarrior around, force it
|
||||
to build a sequence of projects, report the results, and a few other things.
|
||||
This module should only contain functions that are generic to any build,
|
||||
not just the Mozilla build.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
package Moz::Moz;
|
||||
require Exporter;
|
||||
|
||||
use Cwd;
|
||||
|
||||
use File::Copy;
|
||||
use File::Path;
|
||||
use File::Basename;
|
||||
|
||||
use Mac::Types;
|
||||
use Mac::Events;
|
||||
use Mac::Processes;
|
||||
|
||||
use ExtUtils::Manifest 'maniread';
|
||||
|
||||
use Moz::CodeWarriorLib;
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
|
||||
@EXPORT = qw( LaunchCodeWarrior
|
||||
GetCodeWarriorRelativePath
|
||||
current_directory
|
||||
full_path_to
|
||||
DoBuildProject
|
||||
ImportXMLProject
|
||||
ExportProjectToXML
|
||||
OpenErrorLog
|
||||
MakeAlias
|
||||
GetFileModDate
|
||||
StopForErrors
|
||||
DontStopForErrors
|
||||
InstallFromManifest
|
||||
InstallResources
|
||||
RedirectOutputToFile
|
||||
Delay
|
||||
ActivateApplication
|
||||
IsProcessRunning);
|
||||
|
||||
@EXPORT_OK = qw(CloseErrorLog QUIET);
|
||||
|
||||
|
||||
sub current_directory()
|
||||
{
|
||||
my $current_directory = cwd();
|
||||
chop($current_directory) if ( $current_directory =~ m/:$/ );
|
||||
return $current_directory;
|
||||
}
|
||||
|
||||
sub full_path_to($)
|
||||
{
|
||||
my ($path) = @_;
|
||||
if ( $path =~ m/^[^:]+$/ )
|
||||
{
|
||||
$path = ":" . $path;
|
||||
}
|
||||
|
||||
if ( $path =~ m/^:/ )
|
||||
{
|
||||
$path = current_directory() . $path;
|
||||
}
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
$logging = 0;
|
||||
$recent_errors_file = "";
|
||||
$stop_on_1st_error = 1;
|
||||
$QUIET = 0;
|
||||
|
||||
|
||||
|
||||
=head2 Logging all the errors and warnings - C<OpenErrorLog($log_file)>, C<CloseErrorLog()>
|
||||
|
||||
The warnings and errors generated in the course of building projects can be logged to a file.
|
||||
Tinderbox uses this facility to show why a remote build failed.
|
||||
|
||||
Logging is off by default.
|
||||
Start logging at any point in your build process with C<OpenErrorLog($log_file)>.
|
||||
Stop with C<CloseErrorLog()>.
|
||||
You never need to close the log explicitly, unless you want to just log a couple of projects in the middle of a big list.
|
||||
C<CloseErrorLog()> is not exported by default.
|
||||
|
||||
=cut
|
||||
|
||||
sub CloseErrorLog()
|
||||
{
|
||||
if ( $logging )
|
||||
{
|
||||
close(ERROR_LOG);
|
||||
$logging = 0;
|
||||
StopForErrors() if $stop_on_1st_error;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub OpenErrorLog($)
|
||||
{
|
||||
my ($log_file) = @_;
|
||||
|
||||
CloseErrorLog();
|
||||
if ( $log_file )
|
||||
{
|
||||
$log_file = full_path_to($log_file);
|
||||
|
||||
open(ERROR_LOG, ">$log_file") || die "Error: Can't open $log_file\n";
|
||||
MacPerl::SetFileInfo("CWIE", "TEXT", $log_file);
|
||||
|
||||
$log_file =~ m/.+:(.+)/;
|
||||
$recent_errors_file = full_path_to("$1.part");
|
||||
$logging = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
=head2 Stopping before it's too late - C<StopForErrors()>, C<DontStopForErrors()>
|
||||
|
||||
When building a long list of projects, you decide whether to continue building subsequent projects when one fails.
|
||||
By default, your build script will C<die> after the first project that generates an error while building.
|
||||
Change this behavior with C<DontStopForErrors()>.
|
||||
Re-enable it with C<StopForErrors()>.
|
||||
|
||||
=cut
|
||||
|
||||
sub StopForErrors()
|
||||
{
|
||||
$stop_on_1st_error = 1;
|
||||
|
||||
# Can't stop for errors unless we notice them.
|
||||
# Can't notice them unless we are logging.
|
||||
# If the user didn't explicitly request logging, log to a temporary file.
|
||||
|
||||
if ( ! $recent_errors_file )
|
||||
{
|
||||
OpenErrorLog("${TMPDIR}BuildResults");
|
||||
}
|
||||
}
|
||||
|
||||
sub DontStopForErrors()
|
||||
{
|
||||
$stop_on_1st_error = 0;
|
||||
}
|
||||
|
||||
sub log_message($)
|
||||
{
|
||||
if ( $logging )
|
||||
{
|
||||
my ($message) = @_;
|
||||
print ERROR_LOG $message;
|
||||
}
|
||||
}
|
||||
|
||||
sub log_message_with_time($)
|
||||
{
|
||||
if ( $logging )
|
||||
{
|
||||
my ($message) = @_;
|
||||
my $time_stamp = localtime();
|
||||
log_message("$message ($time_stamp)\n");
|
||||
}
|
||||
}
|
||||
|
||||
sub log_recent_errors($)
|
||||
{
|
||||
my ($project_name) = @_;
|
||||
my $found_errors = 0;
|
||||
|
||||
if ( $logging )
|
||||
{
|
||||
open(RECENT_ERRORS, "<$recent_errors_file");
|
||||
|
||||
while( <RECENT_ERRORS> )
|
||||
{
|
||||
if ( /^Error/ || /^CouldnÕt find project file/ || /^Link Error/ )
|
||||
{
|
||||
# if (!$found_errors)
|
||||
# print $_;
|
||||
$found_errors = 1;
|
||||
}
|
||||
print ERROR_LOG $_;
|
||||
}
|
||||
|
||||
close(RECENT_ERRORS);
|
||||
unlink("$recent_errors_file");
|
||||
}
|
||||
|
||||
if ( $stop_on_1st_error && $found_errors )
|
||||
{
|
||||
print ERROR_LOG "### Build failed.\n";
|
||||
die "### Errors encountered building \"$project_name\".\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub DoBuildProject($$$)
|
||||
{
|
||||
my ($project_path, $target_name, $clean_build) = @_;
|
||||
$project_path = full_path_to($project_path);
|
||||
|
||||
# $project_path =~ m/.+:(.+)/;
|
||||
# my $project_name = $1;
|
||||
|
||||
log_message_with_time("### Building \"$project_path\"");
|
||||
|
||||
# Check that the given project exists
|
||||
if (! -e $project_path)
|
||||
{
|
||||
print ERROR_LOG "### Build failed.\n";
|
||||
die "### Can't find project file \"$project_path\".\n";
|
||||
}
|
||||
|
||||
print "Building \"$project_path\[$target_name\]\"\n";
|
||||
|
||||
$had_errors = Moz::CodeWarriorLib::build_project(
|
||||
$project_path, $target_name, $recent_errors_file, $clean_build
|
||||
);
|
||||
WaitNextEvent();
|
||||
|
||||
# $had_errors =
|
||||
#MacPerl::DoAppleScript(<<END_OF_APPLESCRIPT);
|
||||
# tell (load script file "$CodeWarriorLib") to BuildProject("$project_path", "$project_name", "$target_name", "$recent_errors_file", $clean_build)
|
||||
#END_OF_APPLESCRIPT
|
||||
|
||||
# Append any errors to the globally accumulated log file
|
||||
# if ( $had_errors ) # Removed this test, because we want warnings, too. -- jrm
|
||||
{
|
||||
log_recent_errors($project_path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub ImportXMLProject($$)
|
||||
{
|
||||
my ($xml_path, $project_path) = @_;
|
||||
|
||||
# my ($codewarrior_ide_name) = Moz::CodeWarriorLib::getCodeWarriorIDEName();
|
||||
# my $ascript = <<EOS;
|
||||
# tell application "$codewarrior_ide_name"
|
||||
# make new (project document) as ("$project_path") with data ("$xml_path")
|
||||
# end tell
|
||||
#EOS
|
||||
# print $ascript."\n";
|
||||
# my($result) = MacPerl::DoAppleScript($ascript);
|
||||
# unless ($result) { die "Error: ImportXMLProject AppleScript failed $^E $result\n"; }
|
||||
#
|
||||
|
||||
my($import_error) = Moz::CodeWarriorLib::import_project($xml_path, $project_path);
|
||||
if ($import_error ne "") {
|
||||
die "Error: ImportXMLProject failed with error $import_error\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub ExportProjectToXML($$)
|
||||
{
|
||||
my ($project_path, $xml_path) = @_;
|
||||
|
||||
my (@suffix_list) = (".mcp");
|
||||
my ($project_name, $project_dir, $suffix) = fileparse($project_path, @suffix_list);
|
||||
if ($suffix eq "") { die "Project: $project_path doesn't look like a project file.\n"; }
|
||||
|
||||
if (-e $xml_path) {
|
||||
print "$xml_path exists - not exporting $project_path\n";
|
||||
}
|
||||
else {
|
||||
print "Exporting $project_path to $xml_path\n";
|
||||
my($export_error) = Moz::CodeWarriorLib::export_project($project_path, $xml_path);
|
||||
if ($export_error ne "") {
|
||||
die "Error: export_project failed with error '$export_error'\n";
|
||||
}
|
||||
|
||||
if (! -e $xml_path) {
|
||||
die "Error: XML export to $xml_path failed\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
=head2 Miscellaneous
|
||||
|
||||
C<MakeAlias($old_file, $new_file)> functions like C<symlink()>, except with better argument defaulting and more explicit error messages.
|
||||
|
||||
=cut
|
||||
|
||||
sub MakeAlias($$)
|
||||
{
|
||||
my ($old_file, $new_file) = @_;
|
||||
|
||||
# if the directory to hold $new_file doesn't exist, create it
|
||||
if ( ($new_file =~ m/(.+:)/) && !-d $1 )
|
||||
{
|
||||
mkpath($1);
|
||||
}
|
||||
|
||||
# if a leaf name wasn't specified for $new_file, use the leaf from $old_file
|
||||
if ( ($new_file =~ m/:$/) && ($old_file =~ m/.+:(.+)/) )
|
||||
{
|
||||
$new_file .= $1;
|
||||
}
|
||||
|
||||
my $message = "Can't create a Finder alias (at \"$new_file\")\n for \"$old_file\"; because ";
|
||||
|
||||
die "Error: $message \"$old_file\" doesn't exist.\n" unless -e $old_file;
|
||||
die "Error: $message I won't replace an existing (non-alias) file with an alias.\n" if ( -e $new_file && ! -l $new_file );
|
||||
|
||||
# now: $old_file exists; $new_file doesn't (or else, is an alias already)
|
||||
|
||||
if ( -l $new_file )
|
||||
{
|
||||
# ...then see if it already points to $old_file
|
||||
my $current_target = full_path_to(readlink($new_file));
|
||||
my $new_target = full_path_to($old_file);
|
||||
|
||||
return if ( $current_target eq $new_target );
|
||||
# if the desired alias already exists and points to the right thing, then we're done
|
||||
|
||||
unlink $new_file;
|
||||
}
|
||||
|
||||
symlink($old_file, $new_file) || die "Error: $message symlink returned an unexpected error.\n";
|
||||
}
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
C<InstallFromManifest()>
|
||||
|
||||
=cut
|
||||
|
||||
sub InstallFromManifest($;$$)
|
||||
{
|
||||
my ($manifest_file, $dest_dir, $flat) = @_;
|
||||
|
||||
$flat = 0 unless defined($flat); # if $flat, all rel. paths in MANIFEST get aliased to the root of $dest_dir
|
||||
|
||||
$dest_dir ||= ":";
|
||||
|
||||
$manifest_file =~ m/(.+):/;
|
||||
my $source_dir = $1;
|
||||
|
||||
chop($dest_dir) if $dest_dir =~ m/:$/;
|
||||
|
||||
#Mac::Events->import();
|
||||
WaitNextEvent();
|
||||
if ($flat)
|
||||
{
|
||||
print "Doing manifest on \"$manifest_file\" FLAT\n" unless $QUIET;
|
||||
}
|
||||
else
|
||||
{
|
||||
print "Doing manifest on \"$manifest_file\"\n" unless $QUIET;
|
||||
}
|
||||
|
||||
my $read = maniread(full_path_to($manifest_file));
|
||||
foreach $file (keys %$read)
|
||||
{
|
||||
next unless $file;
|
||||
|
||||
$subdir = ":";
|
||||
if (!$flat && ($file =~ /:.+:/ ))
|
||||
{
|
||||
$subdir = $&;
|
||||
}
|
||||
|
||||
$file = ":$file" unless $file =~ m/^:/;
|
||||
MakeAlias("$source_dir$file", "$dest_dir$subdir");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
C<InstallResources()>
|
||||
|
||||
=cut
|
||||
|
||||
# parameters are path to MANIFEST file, destination dir, true (to make copies) or false (to make aliases)
|
||||
sub InstallResources($;$;$)
|
||||
{
|
||||
my ($manifest_file, $dest_dir, $copy_files) = @_;
|
||||
|
||||
$dest_dir ||= ":";
|
||||
mkpath($dest_dir) if !-d $dest_dir;
|
||||
|
||||
$manifest_file =~ m/(.+):/;
|
||||
my $source_dir = $1;
|
||||
|
||||
chop($dest_dir) if $dest_dir =~ m/:$/;
|
||||
|
||||
WaitNextEvent();
|
||||
print "Installing resources from \"$manifest_file\"\n" unless $QUIET;
|
||||
|
||||
my $read = maniread(full_path_to($manifest_file));
|
||||
foreach $file (keys %$read)
|
||||
{
|
||||
next unless $file;
|
||||
|
||||
if ($copy_files)
|
||||
{
|
||||
copy("$source_dir:$file", "$dest_dir:$file");
|
||||
}
|
||||
else
|
||||
{
|
||||
MakeAlias("$source_dir:$file", "$dest_dir:$file");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// Delay
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub Delay($)
|
||||
{
|
||||
my ($delay_seconds) = @_;
|
||||
|
||||
$now = time;
|
||||
|
||||
$exit_time = $now + $delay_seconds;
|
||||
|
||||
while ($exit_time > $now) {
|
||||
$now = time;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GetFileModDate
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub GetFileModDate($)
|
||||
{
|
||||
my($filePath)=@_;
|
||||
my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
||||
$atime,$mtime,$ctime,$blksize,$blocks) = stat($filePath);
|
||||
return $mtime;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// LaunchCodeWarrior
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub LaunchCodeWarrior($)
|
||||
{
|
||||
my($idepath_file) = @_; # full path to IDE location file
|
||||
my($cur_dir) = cwd();
|
||||
|
||||
# this both launches and writes the IDE path file
|
||||
Moz::CodeWarriorLib::activate($idepath_file);
|
||||
|
||||
chdir($cur_dir);
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GetCodeWarriorRelativePath
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub GetCodeWarriorRelativePath($)
|
||||
{
|
||||
my($rel_path) = @_;
|
||||
return Moz::CodeWarriorLib::getCodeWarriorPath($rel_path);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// RedirectOutputToFile
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub RedirectOutputToFile($)
|
||||
{
|
||||
my($log_file) = @_;
|
||||
|
||||
# ensure that folders in the path exist
|
||||
my($logdir) = "";
|
||||
my($logfile) = $log_file;
|
||||
|
||||
if ($log_file =~ /(.+?:)([^:]+)$/) # ? for non-greedy match
|
||||
{
|
||||
$logdir = $1;
|
||||
$logfile = $2;
|
||||
|
||||
mkpath($logdir);
|
||||
}
|
||||
|
||||
print "Output is now being redirected to the file '$log_file'\n";
|
||||
|
||||
open(STDOUT, "> $log_file") || die "Can't redirect stdout";
|
||||
open(STDERR, ">&STDOUT") || die "Can't dup stdout";
|
||||
select(STDERR); $| = 1; # make unbuffered
|
||||
select(STDOUT); $| = 1; # make unbuffered
|
||||
|
||||
MacPerl::SetFileInfo("CWIE", "TEXT", $log_file);
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// ActivateApplication
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub ActivateApplication($)
|
||||
{
|
||||
my ($appSignature) = @_;
|
||||
my ($psi, $found);
|
||||
my ($appPSN);
|
||||
|
||||
$found = 0;
|
||||
|
||||
foreach $psi (values(%Process))
|
||||
{
|
||||
if ($psi->processSignature() eq $appSignature)
|
||||
{
|
||||
$appPSN = $psi->processNumber();
|
||||
$found = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
if ($found == 0 || SameProcess($appPSN, GetFrontProcess()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SetFrontProcess($appPSN);
|
||||
|
||||
while (GetFrontProcess() != $appPSN)
|
||||
{
|
||||
WaitNextEvent();
|
||||
}
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// IsProcessRunning
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub IsProcessRunning($)
|
||||
{
|
||||
my($processName, $psn, $psi) = @_;
|
||||
while ( ($psn, $psi) = each(%Process) ) {
|
||||
if ($psi->processName eq $processName) { return 1; }
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
Scott Collins <scc@netscape.com>, Simon Fraser <sfraser@netscape.com>, Chris Yeh <cyeh@netscape.com>
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
BuildMozillaDebug.pl (et al), BuildList.pm, CodeWarriorLib (an AppleScript library)
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
The contents of this file are subject to the Netscape Public
|
||||
License Version 1.1 (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.mozilla.org/NPL/
|
||||
|
||||
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.
|
||||
|
||||
The Original Code is Mozilla Communicator client code, released
|
||||
March 31, 1998.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
=cut
|
||||
@@ -1,272 +0,0 @@
|
||||
|
||||
package Moz::Prefs;
|
||||
|
||||
require 5.004;
|
||||
require Exporter;
|
||||
|
||||
# Package that attempts to read a file from the Preferences folder,
|
||||
# and get build settings out of it
|
||||
|
||||
use strict;
|
||||
|
||||
use Exporter;
|
||||
use File::Path;
|
||||
|
||||
use Mac::Files;
|
||||
|
||||
use vars qw(@ISA @EXPORT);
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(ReadMozUserPrefs);
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# GetPrefsFolder
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub GetPrefsFolder()
|
||||
{
|
||||
my($prefs_folder) = FindFolder(kOnSystemDisk, kPreferencesFolderType, 1);
|
||||
return $prefs_folder.":Mozilla build prefs";
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# SetArrayValue
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
sub SetArrayValue($$$)
|
||||
{
|
||||
my($array_ref, $index1, $index2) = @_;
|
||||
|
||||
my($index);
|
||||
foreach $index (@$array_ref)
|
||||
{
|
||||
if ($index->[0] eq $index1)
|
||||
{
|
||||
$index->[1] = $index2;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# WriteDefaultPrefsFile
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub WriteDefaultPrefsFile($)
|
||||
{
|
||||
my($file_path) = @_;
|
||||
|
||||
my($file_contents);
|
||||
$file_contents = <<'EOS';
|
||||
% You can use this file to customize the Mozilla build system.
|
||||
% The following kinds of lines are allowable:
|
||||
% Comment lines, which start with a '%' in the first column
|
||||
% Lines which modify the default build settings. For the list of flags,
|
||||
% see MozBuildFlags.pm. Examples are:
|
||||
%
|
||||
% build pull 0 % don't pull
|
||||
% options mng 1 % turn mng on
|
||||
%
|
||||
% Line containing the special 'buildfrom' flag, which specifies
|
||||
% where to start the build. Example:
|
||||
%
|
||||
% buildfrom nglayout % where to start the build
|
||||
%
|
||||
% Lines which specify the location of the files used to store paths
|
||||
% to the CodeWarrior IDE, and the MacCVS Pro session file. Note quoting
|
||||
% of paths containing whitespace. Examples:
|
||||
%
|
||||
% filepath idepath ::codewarrior.txt
|
||||
% filepath sessionpath ":Some folder:MacCVS session path.txt"
|
||||
%
|
||||
% Lines which modify the build settings like %main::DEBUG.
|
||||
% Any lines which do not match either of the above are assumed
|
||||
% to set variables on $main::. Examples:
|
||||
%
|
||||
% MOZILLA_OFFICIAL 1
|
||||
%
|
||||
EOS
|
||||
|
||||
$file_contents =~ s/%/#/g;
|
||||
|
||||
local(*PREFS_FILE);
|
||||
|
||||
open(PREFS_FILE, "> $file_path") || die "Could not write default prefs file\n";
|
||||
print PREFS_FILE ($file_contents);
|
||||
close(PREFS_FILE);
|
||||
|
||||
MacPerl::SetFileInfo("McPL", "TEXT", $file_path);
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# HandlePrefSet
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
sub HandlePrefSet($$$$)
|
||||
{
|
||||
my($flags, $name, $value, $desc) = @_;
|
||||
|
||||
if (SetArrayValue($flags, $name, $value)) {
|
||||
print "Prefs set $desc flag '$name' to '$value'\n";
|
||||
} else {
|
||||
die "$desc setting '$name' is not a valid option\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# HandleBuildFromPref
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
sub HandleBuildFromPref($$)
|
||||
{
|
||||
my($build_array, $name) = @_;
|
||||
|
||||
my($setting) = 0;
|
||||
my($index);
|
||||
foreach $index (@$build_array)
|
||||
{
|
||||
if ($index->[0] eq $name) {
|
||||
$setting = 1;
|
||||
}
|
||||
|
||||
$index->[1] = $setting;
|
||||
}
|
||||
|
||||
if ($setting == 1) {
|
||||
print "Building from $name onwards, as specified by prefs\n";
|
||||
} else {
|
||||
printf "Failed to find buildfrom setting '$name'\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# ReadPrefsFile
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub ReadPrefsFile($$$$$)
|
||||
{
|
||||
my($file_path, $build_flags, $options_flags, $filepath_flags, $create_if_missing) = @_;
|
||||
|
||||
local(*PREFS_FILE);
|
||||
|
||||
if (open(PREFS_FILE, "< $file_path"))
|
||||
{
|
||||
print "Reading build prefs from '$file_path'\n";
|
||||
|
||||
while (<PREFS_FILE>)
|
||||
{
|
||||
my($line) = $_;
|
||||
chomp($line);
|
||||
|
||||
if ($line =~ /^\#/ || $line =~ /^\s*$/) { # ignore comments and empty lines
|
||||
next;
|
||||
}
|
||||
|
||||
if (($line =~ /^\s*([^#\s]+)\s+([^#\s]+)\s+\"(.+)\"(\s+#.+)?/) ||
|
||||
($line =~ /^\s*([^#\s]+)\s+([^#\s]+)\s+\'(.+)\'(\s+#.+)?/) ||
|
||||
($line =~ /^\s*([^#\s]+)\s+([^#\s]+)\s+([^#\s]+)(\s+#.+)?/))
|
||||
{
|
||||
my($array_name) = $1;
|
||||
my($option_name) = $2;
|
||||
my($option_value) = $3;
|
||||
|
||||
# print "Read '$array_name' '$option_name' '$option_value'\n";
|
||||
|
||||
if ($array_name eq "build")
|
||||
{
|
||||
HandlePrefSet($build_flags, $option_name, $option_value, "Build");
|
||||
}
|
||||
elsif ($array_name eq "options")
|
||||
{
|
||||
HandlePrefSet($options_flags, $option_name, $option_value, "Options");
|
||||
}
|
||||
elsif ($array_name eq "filepath" && $option_name && $option_value)
|
||||
{
|
||||
HandlePrefSet($filepath_flags, $option_name, $option_value, "Filepath");
|
||||
}
|
||||
else
|
||||
{
|
||||
print "Unknown pref option at $line\n";
|
||||
}
|
||||
}
|
||||
elsif ($line =~ /^\s*buildfrom\s+([^#\s]+)(\s+#.+)?/)
|
||||
{
|
||||
my($build_start) = $1;
|
||||
HandleBuildFromPref($build_flags, $build_start);
|
||||
}
|
||||
elsif ($line =~ /^\s*([^#\s]+)\s+([^#\s]+)(\s+#.+)?/)
|
||||
{
|
||||
my($build_var) = $1;
|
||||
my($var_setting) = $2;
|
||||
|
||||
print "Setting \$main::$build_var to $var_setting\n";
|
||||
eval "\$main::$build_var = \"$var_setting\"";
|
||||
}
|
||||
else
|
||||
{
|
||||
print "Unrecognized input line at $line\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
close(PREFS_FILE);
|
||||
}
|
||||
elsif ($create_if_missing)
|
||||
{
|
||||
print "No prefs file found at $file_path; using defaults\n";
|
||||
|
||||
my($folder_path) = $file_path;
|
||||
$folder_path =~ s/[^:]+$//;
|
||||
mkpath($folder_path);
|
||||
WriteDefaultPrefsFile($file_path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# ReadMozUserPrefs
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
sub ReadMozUserPrefs($$$$)
|
||||
{
|
||||
my($prefs_file_name, $build_flags, $options_flags, $filepath_flags) = @_;
|
||||
|
||||
if ($prefs_file_name eq "") { return; }
|
||||
|
||||
# if local prefs exist, just use those. Othewise, look in the prefs folder
|
||||
if (-e $prefs_file_name)
|
||||
{
|
||||
# read local prefs
|
||||
ReadPrefsFile($prefs_file_name, $build_flags, $options_flags, $filepath_flags, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
# first read prefs folder prefs
|
||||
my($prefs_path) = GetPrefsFolder();
|
||||
$prefs_path .= ":$prefs_file_name";
|
||||
|
||||
ReadPrefsFile($prefs_path, $build_flags, $options_flags, $filepath_flags, 1);
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
@@ -1,932 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# Simon Fraser <sfraser@netscape.com>
|
||||
#
|
||||
|
||||
package Moz::ProjectXML;
|
||||
|
||||
require 5.004;
|
||||
require Exporter;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
|
||||
use Cwd;
|
||||
use XML::DOM;
|
||||
|
||||
use vars qw(@ISA @EXPORT);
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(
|
||||
ParseXMLDocument
|
||||
DisposeXMLDocument
|
||||
WriteXMLDocument
|
||||
CleanupPro5XML
|
||||
GetTargetsList
|
||||
CloneTarget
|
||||
SetAsSharedLibraryTarget
|
||||
SetAsStaticLibraryTarget
|
||||
AddTarget
|
||||
RemoveTarget
|
||||
GetTargetSetting
|
||||
SetTargetSetting
|
||||
getChildElementTextContents
|
||||
);
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# A module for reading, manipulating, and writing XML-format CodeWarrior project files.
|
||||
#
|
||||
# Sample usage:
|
||||
#
|
||||
# use ProjectXML;
|
||||
#
|
||||
# my $doc = ProjectXML::ParseXMLDocument("Test.mcp.xml");
|
||||
# ProjectXML::CloneTarget($doc, "Test.shlb", "Test.lib");
|
||||
# ProjectXML::SetAsStaticLibraryTarget($doc, "Test.lib", "TestOutput.lib");
|
||||
# ProjectXML::WriteXMLDocument($doc, "Test_out.xml");
|
||||
# ProjectXML::DisposeXMLDocument($doc);
|
||||
#
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// ParseXMLDocument
|
||||
#// Note that the caller must call DisposeXMLDocument on the returned doc
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub ParseXMLDocument($)
|
||||
{
|
||||
my($doc_path) = @_;
|
||||
|
||||
my $parser = new XML::DOM::Parser(ErrorContext => 2);
|
||||
my $doc = $parser->parsefile($doc_path);
|
||||
|
||||
return $doc;
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// DisposeXMLDocument
|
||||
#// Needed to avoid memory leaks - cleanup circular references for garbage collection
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub DisposeXMLDocument($)
|
||||
{
|
||||
my($doc) = @_;
|
||||
|
||||
$doc->dispose();
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// WriteXMLDocument
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
|
||||
sub _pro5_tag_compression($$)
|
||||
{
|
||||
return 1; # Pro 5 is broken and can't import XML with <foo/> style tags
|
||||
}
|
||||
|
||||
sub _pro6plus_tag_compression($$)
|
||||
{
|
||||
return 0; # Pro 6 can deal with empty XML tags like <foo/>
|
||||
}
|
||||
|
||||
sub WriteXMLDocument($$$)
|
||||
{
|
||||
my($doc, $file_path, $ide_version) = @_;
|
||||
|
||||
if ($ide_version eq "4.0")
|
||||
{
|
||||
XML::DOM::setTagCompression(\&_pro5_tag_compression);
|
||||
}
|
||||
else
|
||||
{
|
||||
XML::DOM::setTagCompression(\&_pro6plus_tag_compression);
|
||||
}
|
||||
|
||||
$doc->printToFile($file_path);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// CleanupPro5XML
|
||||
#// XML Projects exported by Pro 5 contain garbage data under the MWMerge_MacOS_skipResources
|
||||
#// setting. This routine cleans this up, saving the result to a new file
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub CleanupPro5XML($$)
|
||||
{
|
||||
my($xml_path, $out_path) = @_;
|
||||
|
||||
local(*XML_FILE);
|
||||
open(XML_FILE, "< $xml_path") || die "Error: failed to open file $xml_path\n";
|
||||
|
||||
local(*CLEANED_FILE);
|
||||
open(CLEANED_FILE, "> $out_path") || die "Error: failed to open file $out_path for writing\n";
|
||||
|
||||
my $in_skip_resources_settings = 0;
|
||||
|
||||
while(<XML_FILE>)
|
||||
{
|
||||
my($line) = $_;
|
||||
|
||||
if ($line =~ /^<\?codewarrior/) # is processing inst line
|
||||
{
|
||||
my $test_line = $line;
|
||||
chomp($test_line);
|
||||
|
||||
my $out_line = $test_line;
|
||||
if ($test_line =~ /^<\?codewarrior\s+exportversion=\"(.+)\"\s+ideversion=\"(.+)\"\s*\?>$/)
|
||||
{
|
||||
my $export_version = $1;
|
||||
my $ide_version = $2;
|
||||
|
||||
$ide_version = "4.0_mozilla"; # pseudo IDE version so we know we touched it
|
||||
$out_line = "<?codewarrior exportversion=\"".$export_version."\" ideversion=\"".$ide_version."\"?>";
|
||||
}
|
||||
|
||||
print CLEANED_FILE "$out_line\n";
|
||||
next;
|
||||
}
|
||||
|
||||
if ($line =~ /MWMerge_MacOS_skipResources/)
|
||||
{
|
||||
$in_skip_resources_settings = 1;
|
||||
print CLEANED_FILE "$line";
|
||||
}
|
||||
elsif($in_skip_resources_settings && $line =~ /<!-- Settings for/)
|
||||
{
|
||||
# leaving bad settings lines. Write closing tag
|
||||
print CLEANED_FILE " <!-- Corrupted setting entries removed by script -->\n";
|
||||
print CLEANED_FILE " </SETTING>\n\n";
|
||||
|
||||
print CLEANED_FILE "$line";
|
||||
|
||||
$in_skip_resources_settings = 0;
|
||||
}
|
||||
elsif (!$in_skip_resources_settings)
|
||||
{
|
||||
print CLEANED_FILE "$line";
|
||||
}
|
||||
}
|
||||
|
||||
close(XML_FILE);
|
||||
close(CLEANED_FILE);
|
||||
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# SniffProjectXMLIDEVersion
|
||||
#
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
sub SniffProjectXMLIDEVersion($)
|
||||
{
|
||||
my($xml_path) = @_;
|
||||
|
||||
my $found_version = "";
|
||||
|
||||
local(*XML_FILE);
|
||||
open(XML_FILE, "< $xml_path") || die "Error: failed to open file $xml_path\n";
|
||||
|
||||
while(<XML_FILE>)
|
||||
{
|
||||
my($line) = $_;
|
||||
chomp($line);
|
||||
|
||||
if ($line =~ /^<\?codewarrior/) # is processing inst line
|
||||
{
|
||||
unless ($line =~ /^<\?codewarrior\s+exportversion=\"(.+)\"\s+ideversion=\"(.+)\"\s*\?>$/)
|
||||
{
|
||||
die "Error: Failed to find ideversion in $xml_path in line $line\n";
|
||||
}
|
||||
|
||||
my $export_version = $1;
|
||||
my $ide_version = $2;
|
||||
|
||||
$found_version = $ide_version;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
close(XML_FILE);
|
||||
|
||||
return $found_version;
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GetTargetsList
|
||||
#// Returns an array of target names
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub GetTargetsList($)
|
||||
{
|
||||
my($doc) = @_;
|
||||
|
||||
my $nodes = $doc->getElementsByTagName("TARGET");
|
||||
my $n = $nodes->getLength;
|
||||
|
||||
my @target_names;
|
||||
|
||||
for (my $i = 0; $i < $n; $i++)
|
||||
{
|
||||
my ($node) = $nodes->item($i);
|
||||
|
||||
my($target_name) = getChildElementTextContents($node, "NAME");
|
||||
push(@target_names, $target_name);
|
||||
}
|
||||
|
||||
return @target_names;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// CloneTarget
|
||||
#// Clone the named target, renaming it to 'new_name'
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub CloneTarget($$$)
|
||||
{
|
||||
my($doc, $target_name, $new_name) = @_;
|
||||
|
||||
my $target_node = getTargetNode($doc, $target_name);
|
||||
|
||||
# clone here
|
||||
my $target_clone = $target_node->cloneNode(1); # deep clone
|
||||
|
||||
# -- munge target settings --
|
||||
|
||||
# set the target name field
|
||||
setChildElementTextContents($doc, $target_clone, "NAME", $new_name);
|
||||
|
||||
# set the targetname pref
|
||||
setTargetNodeSetting($doc, $target_clone, "Targetname", $new_name);
|
||||
|
||||
# -- insert new target subtree --
|
||||
|
||||
my $target_list = $target_node->getParentNode();
|
||||
$target_list->appendChild($target_clone);
|
||||
|
||||
# -- now add to targetorder --
|
||||
my (@target_order_nodes) = getChildOfDocument($doc, "TARGETORDER");
|
||||
|
||||
my $target_order = @target_order_nodes[0];
|
||||
|
||||
my $new_order = $doc->createElement("ORDEREDTARGET");
|
||||
my $order_name = $doc->createElement("NAME");
|
||||
|
||||
$new_order->appendChild($order_name);
|
||||
|
||||
setChildElementTextContents($doc, $new_order, "NAME", $new_name);
|
||||
$target_order->appendChild($new_order);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// SetAsSharedLibraryTarget
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub SetAsSharedLibraryTarget($$$)
|
||||
{
|
||||
my($doc, $target_name, $output_name) = @_;
|
||||
|
||||
my $target_node = getTargetNode($doc, $target_name);
|
||||
|
||||
setTargetNodeSetting($doc, $target_node, "MWProject_PPC_type", "SharedLibrary");
|
||||
setTargetNodeSetting($doc, $target_node, "MWProject_PPC_filetype", "1936223330"); #'shlb'
|
||||
setTargetNodeSetting($doc, $target_node, "MWProject_PPC_outfile", $output_name);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// AddFileToTarget
|
||||
#//
|
||||
#// Add a file to the specified target(s).
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub AddFileToTarget($$$)
|
||||
{
|
||||
my($doc, $target_list, $file_name) = @_;
|
||||
|
||||
# the file must be added in 3 places:
|
||||
# 1. in <TARGET><FILELIST><FILE> (with linkage flags if necessary)
|
||||
# 2. in <TARGET><LINKORDER><FILEREF>
|
||||
# 3. in <GROUPLIST><GROUP><FILEREF>
|
||||
die "Write me\n";
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// RemoveFileFromTarget
|
||||
#//
|
||||
#// Remove a file from the specified target, removing it from the entire project
|
||||
#// if no other targets reference it.
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub RemoveFileFromTarget($$$)
|
||||
{
|
||||
my($doc, $target_node, $file_name) = @_;
|
||||
|
||||
# the file must be removed in 3 places:
|
||||
# 1. in <TARGET><FILELIST><FILE>
|
||||
# 2. in <TARGET><LINKORDER><FILEREF>
|
||||
# 3. in <GROUPLIST><GROUP><FILEREF>
|
||||
|
||||
# first, remove from <FILELIST>
|
||||
my $filelist_node = getFirstChildElement($target_node, "FILELIST");
|
||||
unless ($filelist_node) { die "Error: failed to find FILELIST node\n"; }
|
||||
|
||||
my $file_node = getChildNodeByGrandchildContents($doc, $filelist_node, "FILE", "PATH", $file_name);
|
||||
unless ($file_node) { return; }
|
||||
|
||||
$filelist_node->removeChild($file_node);
|
||||
|
||||
# next, remove from <LINKORDER>
|
||||
my $linkorder_node = getFirstChildElement($target_node, "LINKORDER");
|
||||
unless ($linkorder_node) { die "Error: failed to find LINKORDER node\n"; }
|
||||
|
||||
my $fileref_node = getChildNodeByGrandchildContents($doc, $linkorder_node, "FILEREF", "PATH", $file_name);
|
||||
unless ($fileref_node) { die "Error: link order node for file $file_name not found\n"; }
|
||||
|
||||
$linkorder_node->removeChild($fileref_node);
|
||||
|
||||
# last, remove from <GROUPLIST>
|
||||
# <GROUPLIST> is cross-target, so we have to be careful here.
|
||||
my $grouplist_node = getChildOfDocument($doc, "GROUPLIST");
|
||||
unless ($grouplist_node) { die "Error: failed to find GROUPLIST node\n"; }
|
||||
|
||||
# if the file isn't in any other targets, remove it from the groups
|
||||
if (!GetFileInUse($doc, $file_name))
|
||||
{
|
||||
print "File $file_name is in no other targest. Removing from project\n";
|
||||
|
||||
my @group_nodes;
|
||||
getChildElementsOfType($doc, $grouplist_node, "GROUP", \@group_nodes);
|
||||
my $group_node;
|
||||
foreach $group_node (@group_nodes)
|
||||
{
|
||||
my @fileref_nodes;
|
||||
getChildElementsOfType($doc, $group_node, "FILEREF", \@fileref_nodes);
|
||||
|
||||
my $fileref_node;
|
||||
foreach $fileref_node (@fileref_nodes)
|
||||
{
|
||||
my $path_name = getChildElementTextContents($fileref_node, "PATH");
|
||||
if ($path_name eq $file_name)
|
||||
{
|
||||
print "Removing $file_name from project group list\n";
|
||||
$group_node->removeChild($fileref_node);
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
# can a file appear in more than one group?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// SetAsStaticLibraryTarget
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub SetAsStaticLibraryTarget($$$)
|
||||
{
|
||||
my($doc, $target_name, $output_name) = @_;
|
||||
|
||||
my $target_node = getTargetNode($doc, $target_name);
|
||||
|
||||
setTargetNodeSetting($doc, $target_node, "MWProject_PPC_type", "Library");
|
||||
setTargetNodeSetting($doc, $target_node, "MWProject_PPC_filetype", "1061109567"); #'????'
|
||||
setTargetNodeSetting($doc, $target_node, "MWProject_PPC_outfile", $output_name);
|
||||
|
||||
# static targets don't need any library linkage, so we can remove linkage
|
||||
# with all .shlb and .Lib files.
|
||||
|
||||
my(@obsolete_files) = ("NSStdLibStubs", "InterfacesStubs", "InterfaceLib", "InternetConfigLib");
|
||||
|
||||
print " Removing libraries etc. from target\n";
|
||||
|
||||
# get all files in target
|
||||
my @target_files = GetTargetFilesList($doc, $target_name);
|
||||
my $target_file;
|
||||
foreach $target_file (@target_files)
|
||||
{
|
||||
if ($target_file =~ /(\.shlb|\.lib|\.Lib|\.o|\.exp)$/)
|
||||
{
|
||||
RemoveFileFromTarget($doc, $target_node, $target_file);
|
||||
}
|
||||
}
|
||||
|
||||
print " Removing stub libraries from target\n";
|
||||
|
||||
# then remove files with known names
|
||||
my $obs_file;
|
||||
foreach $obs_file (@obsolete_files)
|
||||
{
|
||||
RemoveFileFromTarget($doc, $target_node, $obs_file);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// AddTarget
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub AddTarget($$)
|
||||
{
|
||||
my($doc, $target_name) = @_;
|
||||
|
||||
die "Write me\n";
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// RemoveTarget
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub RemoveTarget($$)
|
||||
{
|
||||
my($doc, $target_name) = @_;
|
||||
|
||||
die "Write me\n";
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GetTargetSetting
|
||||
#// Get the value for the specified setting in the specified target
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub GetTargetSetting($$$)
|
||||
{
|
||||
my($doc, $target_name, $setting_name) = @_;
|
||||
|
||||
my $target_node = getTargetNode($doc, $target_name);
|
||||
return getTargetNodeSetting($target_node, "VALUE");
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// SetTargetSetting
|
||||
#// Set the value for the specified setting in the specified target
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub SetTargetSetting($$$$)
|
||||
{
|
||||
my($doc, $target_name, $setting_name, $new_value) = @_;
|
||||
|
||||
my $target_node = getTargetNode($doc, $target_name);
|
||||
setTargetNodeSetting($doc, $target_node, "VALUE", $new_value);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GetTargetFilesList
|
||||
#// Return an array of the files in the target (in filelist order)
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub GetTargetFilesList($$)
|
||||
{
|
||||
my($doc, $target_name) = @_;
|
||||
|
||||
my $target_node = getTargetNode($doc, $target_name);
|
||||
|
||||
my @files_list;
|
||||
|
||||
my $filelist_node = getFirstChildElement($target_node, "FILELIST");
|
||||
unless ($filelist_node) { die "Error: failed to find FILELIST node\n"; }
|
||||
|
||||
my @file_nodes;
|
||||
getChildElementsOfType($doc, $filelist_node, "FILE", \@file_nodes);
|
||||
|
||||
my $node;
|
||||
foreach $node (@file_nodes)
|
||||
{
|
||||
my $file_name = getChildElementTextContents($node, "PATH");
|
||||
push(@files_list, $file_name);
|
||||
}
|
||||
|
||||
return @files_list;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// FileIsInTarget
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub FileIsInTarget($$$)
|
||||
{
|
||||
my($doc, $file_name, $target_name) = @_;
|
||||
|
||||
my $target_node = getTargetNode($doc, $target_name);
|
||||
unless ($target_node) { die "Error: no target found called $target_name\n"; }
|
||||
|
||||
my $file_node = GetTargetFileNode($doc, $target_node, $file_name);
|
||||
if ($file_node) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GetFileTargetsList
|
||||
#// Return an array of the targets that a file is in (expensive)
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub GetFileTargetsList($$)
|
||||
{
|
||||
my ($doc, $file_name) = @_;
|
||||
|
||||
my @target_list;
|
||||
|
||||
my @targets = GetTargetsList($doc);
|
||||
my $target;
|
||||
|
||||
foreach $target (@targets)
|
||||
{
|
||||
if (FileIsInTarget($doc, $file_name, $target))
|
||||
{
|
||||
push(@target_list, $target);
|
||||
}
|
||||
}
|
||||
|
||||
return @target_list;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GetTargetFileNode
|
||||
#//
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub GetTargetFileNode($$$)
|
||||
{
|
||||
my($doc, $target_node, $file_name) = @_;
|
||||
|
||||
my $filelist_node = getFirstChildElement($target_node, "FILELIST");
|
||||
unless ($filelist_node) { die "Error: failed to find FILELIST node\n"; }
|
||||
|
||||
my $file_node = getChildNodeByGrandchildContents($doc, $filelist_node, "FILE", "PATH", $file_name);
|
||||
|
||||
return $file_node;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// GetFileInUse
|
||||
#// Return true if the file is used by any target
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub GetFileInUse($$)
|
||||
{
|
||||
my($doc, $file_name) = @_;
|
||||
|
||||
my $targetlist_node = getChildOfDocument($doc, "TARGETLIST");
|
||||
|
||||
my $target_node = $targetlist_node->getFirstChild();
|
||||
|
||||
while ($target_node)
|
||||
{
|
||||
if ($target_node->getNodeTypeName eq "ELEMENT_NODE" &&
|
||||
$target_node->getTagName() eq "TARGET")
|
||||
{
|
||||
# if this is a target node
|
||||
my $file_node = GetTargetFileNode($doc, $target_node, $file_name);
|
||||
if ($file_node) {
|
||||
return 1; # found it
|
||||
}
|
||||
}
|
||||
|
||||
$target_node = $target_node->getNextSibling();
|
||||
}
|
||||
|
||||
# not found
|
||||
return 0;
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getChildOfDocument
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getChildOfDocument($$)
|
||||
{
|
||||
my($doc, $child_type) = @_;
|
||||
|
||||
return getFirstChildElement($doc->getDocumentElement(), $child_type);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getFirstChildElement
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getFirstChildElement($$)
|
||||
{
|
||||
my($node, $element_name) = @_;
|
||||
|
||||
my $found_node;
|
||||
|
||||
unless ($node) { die "getFirstChildElement called with empty node\n"; }
|
||||
|
||||
#look for the first "element_name" child
|
||||
|
||||
my $child_node = $node->getFirstChild();
|
||||
|
||||
while ($child_node)
|
||||
{
|
||||
if ($child_node->getNodeTypeName eq "ELEMENT_NODE" &&
|
||||
$child_node->getTagName() eq $element_name)
|
||||
{
|
||||
$found_node = $child_node;
|
||||
last;
|
||||
}
|
||||
|
||||
$child_node = $child_node->getNextSibling();
|
||||
}
|
||||
|
||||
return $found_node;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getChildElementsOfType
|
||||
#//
|
||||
#// Return an array of refs to child nodes of the given type
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getChildElementsOfType($$$$)
|
||||
{
|
||||
my($doc, $node, $child_type, $array_ref) = @_;
|
||||
|
||||
my $child_node = $node->getFirstChild();
|
||||
|
||||
while ($child_node)
|
||||
{
|
||||
if ($child_node->getNodeTypeName eq "ELEMENT_NODE" &&
|
||||
$child_node->getTagName() eq $child_type)
|
||||
{
|
||||
push(@$array_ref, $child_node);
|
||||
}
|
||||
|
||||
$child_node = $child_node->getNextSibling();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getChildElementTextContents
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Given <FOOPY><NERD>Hi!</NERD></FOOPY>, where $node is <FOOPY>,
|
||||
# returns "Hi!". If > 1 <NERD> node, returns the contents of the first.
|
||||
#
|
||||
sub getChildElementTextContents($$)
|
||||
{
|
||||
my($node, $tag_name) = @_;
|
||||
|
||||
my $first_element = getFirstChildElement($node, $tag_name);
|
||||
my $text_node = $first_element->getFirstChild();
|
||||
|
||||
my $text_contents = "";
|
||||
|
||||
# concat adjacent text nodes
|
||||
while ($text_node)
|
||||
{
|
||||
if ($text_node->getNodeTypeName() ne "TEXT_NODE")
|
||||
{
|
||||
last;
|
||||
}
|
||||
|
||||
$text_contents = $text_contents.$text_node->getData();
|
||||
$text_node = $text_node->getNextSibling();
|
||||
}
|
||||
|
||||
return $text_contents;
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// setChildElementTextContents
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub setChildElementTextContents($$$$)
|
||||
{
|
||||
my($doc, $node, $tag_name, $contents_text) = @_;
|
||||
|
||||
my $first_element = getFirstChildElement($node, $tag_name);
|
||||
my $new_text_node = $doc->createTextNode($contents_text);
|
||||
|
||||
# replace all child elements with a text element
|
||||
removeAllChildren($first_element);
|
||||
|
||||
$first_element->appendChild($new_text_node);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getChildNodeByContents
|
||||
#//
|
||||
#// Consider <foo><bar><baz>Foopy</baz></bar><bar><baz>Loopy</baz></bar></foo>
|
||||
#// This function, when called with getChildNodeByContents($foonode, "bar", "baz", "Loopy")
|
||||
#// returns the second <bar> node.
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getChildNodeByGrandchildContents($$$$$)
|
||||
{
|
||||
my($doc, $node, $child_type, $gc_type, $gc_contents) = @_; # gc = grandchild
|
||||
|
||||
my $found_node;
|
||||
my $child_node = $node->getFirstChild();
|
||||
while ($child_node)
|
||||
{
|
||||
if ($child_node->getNodeTypeName eq "ELEMENT_NODE" &&
|
||||
$child_node->getTagName() eq $child_type)
|
||||
{
|
||||
# check for a child of this node of type
|
||||
my $child_contents = getChildElementTextContents($child_node, $gc_type);
|
||||
|
||||
if ($child_contents eq $gc_contents)
|
||||
{
|
||||
$found_node = $child_node;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
$child_node = $child_node->getNextSibling();
|
||||
}
|
||||
|
||||
return $found_node;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getTargetNode
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getTargetNode($$)
|
||||
{
|
||||
my($doc, $target_name) = @_;
|
||||
|
||||
my $targetlist_node = getChildOfDocument($doc, "TARGETLIST");
|
||||
return getChildNodeByGrandchildContents($doc, $targetlist_node, "TARGET", "NAME", $target_name);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getTargetNamedSettingNode
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getTargetNamedSettingNode($$)
|
||||
{
|
||||
my($target_node, $setting_name) = @_;
|
||||
|
||||
my $setting_node;
|
||||
|
||||
my $settinglist_node = getFirstChildElement($target_node, "SETTINGLIST");
|
||||
my $child_node = $settinglist_node->getFirstChild();
|
||||
|
||||
while ($child_node)
|
||||
{
|
||||
if ($child_node->getNodeTypeName ne "ELEMENT_NODE")
|
||||
{
|
||||
$child_node = $child_node->getNextSibling();
|
||||
next;
|
||||
}
|
||||
|
||||
if ($child_node->getTagName() eq "SETTING")
|
||||
{
|
||||
my $set_name = getChildElementTextContents($child_node, "NAME");
|
||||
|
||||
if ($set_name eq $setting_name)
|
||||
{
|
||||
$setting_node = $child_node;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
$child_node = $child_node->getNextSibling();
|
||||
}
|
||||
|
||||
return $setting_node;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// getTargetNodeSetting
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub getTargetNodeSetting($$)
|
||||
{
|
||||
my($target_node, $setting_name) = @_;
|
||||
|
||||
my $setting_node = getTargetNamedSettingNode($target_node, $setting_name);
|
||||
return getChildElementTextContents($setting_node, "VALUE");
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// setTargetNodeSetting
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub setTargetNodeSetting($$$$)
|
||||
{
|
||||
my($doc, $target_node, $setting_name, $new_value) = @_;
|
||||
|
||||
my $setting_node = getTargetNamedSettingNode($target_node, $setting_name);
|
||||
|
||||
setChildElementTextContents($doc, $setting_node, "VALUE", $new_value);
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// elementInArray
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub elementInArray($$)
|
||||
{
|
||||
my($element, $array) = @_;
|
||||
my $test;
|
||||
foreach $test (@$array)
|
||||
{
|
||||
if ($test eq $element) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// removeAllChildren
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub removeAllChildren($)
|
||||
{
|
||||
my($node) = @_;
|
||||
|
||||
my $child_node = $node->getFirstChild();
|
||||
|
||||
while ($child_node)
|
||||
{
|
||||
$node->removeChild($child_node);
|
||||
$child_node = $node->getFirstChild();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// dumpNodeData
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub dumpNodeData($)
|
||||
{
|
||||
my($node) = @_;
|
||||
|
||||
unless ($node) { die "Null node passed to dumpNodeData\n"; }
|
||||
|
||||
print "Dumping node $node\n";
|
||||
|
||||
my($node_type) = $node->getNodeTypeName();
|
||||
|
||||
if ($node_type eq "ELEMENT_NODE")
|
||||
{
|
||||
my($node_name) = $node->getTagName();
|
||||
print "Element $node_name\n";
|
||||
}
|
||||
elsif ($node_type eq "TEXT_NODE")
|
||||
{
|
||||
my($node_data) = $node->getData;
|
||||
# my(@node_vals) = unpack("C*", $node_data);
|
||||
print "Text '$node_data'\n"; # may contain LF chars
|
||||
}
|
||||
else
|
||||
{
|
||||
print "Node $node_type\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
#// dumpNodeTree
|
||||
#//--------------------------------------------------------------------------------------------------
|
||||
sub dumpNodeTree($)
|
||||
{
|
||||
my($node) = @_;
|
||||
|
||||
my($child_node) = $node->getFirstChild();
|
||||
|
||||
unless ($child_node) { return; }
|
||||
|
||||
# recurse
|
||||
dumpNodeData($child_node);
|
||||
|
||||
# then go through child nodes
|
||||
while ($child_node)
|
||||
{
|
||||
dumpNodeTree($child_node);
|
||||
|
||||
$child_node = $child_node->getNextSibling();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
#-------------------------------------------------------------------------------
|
||||
# These 3 lists are the 'master lists' to control what gets built.
|
||||
#
|
||||
# Ordering in these arrays is important; it has to reflect the order in
|
||||
# which the build occurs.
|
||||
#
|
||||
# Setting containing spaces must be quoted with double quotes.
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
build_flags
|
||||
all 1
|
||||
pull 0
|
||||
dist 0
|
||||
config 0
|
||||
xpidl 0
|
||||
idl 0
|
||||
stubs 0
|
||||
runtime 0
|
||||
common 0
|
||||
imglib 0
|
||||
libimg2 0
|
||||
necko 0
|
||||
security 0
|
||||
browserutils 0
|
||||
intl 0
|
||||
nglayout 0
|
||||
accessiblity 0
|
||||
editor 0
|
||||
embedding 0
|
||||
viewer 0
|
||||
xpapp 0
|
||||
extensions 0
|
||||
plugins 0
|
||||
mailnews 0
|
||||
apprunner 0
|
||||
resources 0
|
||||
|
||||
options_flags
|
||||
pull_by_date 0
|
||||
chrome_jars 1
|
||||
chrome_files 0
|
||||
use_jars 1
|
||||
transformiix 1
|
||||
mathml 0 MOZ_MATHML
|
||||
svg 0 MOZ_SVG
|
||||
# svg requires libart, which is an lgpl library. You need to pull it
|
||||
# explicitly.
|
||||
libart_lgpl 0
|
||||
mng 1
|
||||
ldap 1 MOZ_LDAP_XPCOM
|
||||
ldap_experimental 0 MOZ_LDAP_XPCOM_EXPERIMENTAL
|
||||
xmlextras 1
|
||||
wsp 0 MOZ_WSP
|
||||
inspector 1
|
||||
mailextras 1
|
||||
xptlink 0
|
||||
psm 0 MOZ_PSM
|
||||
embedding_test 1
|
||||
embedding_chrome 0
|
||||
embedding_xulprefs 0
|
||||
embedding_xulsecurity 0
|
||||
carbon 0 TARGET_CARBON
|
||||
useimg2 1 USE_IMG2
|
||||
lowmem 0 MOZ_MAC_LOWMEM
|
||||
accessible 1 ACCESSIBILITY
|
||||
bidi 1 IBMBIDI
|
||||
p3p 0
|
||||
jsd 1
|
||||
venkman 1
|
||||
moz_logging 1 MOZ_LOGGING
|
||||
chatzilla 1
|
||||
content_packs 1
|
||||
xml_rpc 1
|
||||
cview 1
|
||||
help 1
|
||||
timeline 0 MOZ_TIMELINE
|
||||
static_build 0 MOZ_STATIC_COMPONENT_LIBS
|
||||
string_debug 0 DEBUG_STRING
|
||||
string_stats 0 DEBUG_STRING_STATS
|
||||
xpctools 0 XPC_TOOLS_SUPPORT
|
||||
smime 1
|
||||
mdn 1
|
||||
print_preview 1 NS_PRINT_PREVIEW
|
||||
moz_xul 1 MOZ_XUL
|
||||
|
||||
filepath_flags
|
||||
idepath ":CodeWarrior IDE Path.txt"
|
||||
sessionpath ":Mozilla session path.txt"
|
||||
buildlogfilepath ":Build Logs:Mozilla build log.txt" # this is a path
|
||||
scriptlogfilepath ":Build Logs:Mozilla script log.txt"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,22 +0,0 @@
|
||||
# List of modules to check out. Format is
|
||||
# module, (tag), (date)
|
||||
# where tag and date are optional (non-trailing commas are required)
|
||||
#
|
||||
# Examples:
|
||||
# mozilla/nsprpub, NSPRPUB_CLIENT_TAG
|
||||
# mozilla/gc, , 10/25/2000 12:00:00
|
||||
#
|
||||
|
||||
mozilla/nsprpub, NETSCAPE_7_0_RTM
|
||||
mozilla/security/nss, NETSCAPE_7_0_RTM
|
||||
mozilla/security/manager, NETSCAPE_7_0_RTM
|
||||
mozilla/accessible, NETSCAPE_7_0_RTM
|
||||
mozilla/directory/c-sdk, NETSCAPE_7_0_RTM
|
||||
mozilla/lib/mac/Instrumentation, NETSCAPE_7_0_RTM
|
||||
mozilla/gfx2, NETSCAPE_7_0_RTM
|
||||
mozilla/modules/libpr0n, NETSCAPE_7_0_RTM
|
||||
SeaMonkeyAll, NETSCAPE_7_0_RTM
|
||||
|
||||
## You need this if you want to be able to use SVG
|
||||
## Note that this library is under the LGPL, not the MPL
|
||||
#mozilla/other-licenses/libart_lgpl
|
||||
@@ -1,79 +0,0 @@
|
||||
#!perl
|
||||
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# Simon Fraser <sfraser@netscape.com>
|
||||
#
|
||||
|
||||
require 5.004;
|
||||
|
||||
use strict;
|
||||
|
||||
use Cwd;
|
||||
use Moz::BuildUtils;
|
||||
use Moz::BuildCore;
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# Where have the build options gone?
|
||||
#
|
||||
# The various build flags have been centralized into one place.
|
||||
# The master list of options is in MozBuildFlags.txt. However,
|
||||
# you should never need to edit that file, or this one.
|
||||
#
|
||||
# To customize what gets built, or where to start the build,
|
||||
# edit the $prefs_file_name file in
|
||||
# System Folder:Preferences:Mozilla build prefs:
|
||||
# Documentation is provided in that file.
|
||||
#-------------------------------------------------------------
|
||||
|
||||
my($prefs_file_name) = "Mozilla pull prefs";
|
||||
|
||||
#-------------------------------------------------------------
|
||||
# hashes to hold build options
|
||||
#-------------------------------------------------------------
|
||||
my(%build);
|
||||
my(%options);
|
||||
my(%filepaths);
|
||||
my(%optiondefines);
|
||||
|
||||
# Hash of input files for this build. Eventually, there will be
|
||||
# input files for manifests, and projects too.
|
||||
my(%inputfiles) = (
|
||||
"buildflags", "MozillaBuildFlags.txt",
|
||||
"checkoutdata", "MozillaCheckoutList.txt",
|
||||
"buildprogress", "",
|
||||
"buildmodule", "MozillaBuildList.pm",
|
||||
"checkouttime", "Mozilla last checkout"
|
||||
);
|
||||
#-------------------------------------------------------------
|
||||
# end build hashes
|
||||
#-------------------------------------------------------------
|
||||
|
||||
# set the build root directory, which is the the dir above mozilla
|
||||
SetupBuildRootDir(":mozilla:build:mac:build_scripts");
|
||||
|
||||
# Set up all the flags on $main::, like DEBUG, CARBON etc.
|
||||
# Override the defaults using the preferences files.
|
||||
SetupDefaultBuildOptions(0, ":mozilla:dist:viewer:", "");
|
||||
|
||||
my($do_checkout) = 1;
|
||||
my($do_build) = 0;
|
||||
|
||||
RunBuild($do_checkout, $do_build, \%inputfiles, $prefs_file_name);
|
||||
@@ -1,511 +0,0 @@
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH=.
|
||||
|
||||
!if !defined(MOZ_TOP)
|
||||
#enable builds from changed top level directories
|
||||
MOZ_TOP=mozilla
|
||||
!endif
|
||||
|
||||
MOZ_SRC_FLIPPED = $(MOZ_SRC:\=/)
|
||||
MOZ_DIST_FLIPPED = $(MOZ_SRC_FLIPPED)/mozilla/dist
|
||||
!ifdef MOZ_DEBUG
|
||||
MOZ_OBJDIR = WIN32_D.OBJ
|
||||
!else
|
||||
MOZ_OBJDIR = WIN32_O.OBJ
|
||||
!endif
|
||||
|
||||
#
|
||||
# Command macro defines
|
||||
#
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Figure out how to do the pull.
|
||||
#//------------------------------------------------------------------------
|
||||
# uncomment these, modify branch tag, and check in to branch for milestones
|
||||
MOZ_BRANCH=NETSCAPE_7_0_RTM
|
||||
NSPR_CO_TAG=NETSCAPE_7_0_RTM
|
||||
PSM_CO_TAG=NETSCAPE_7_0_RTM
|
||||
NSS_CO_TAG=NETSCAPE_7_0_RTM
|
||||
LDAPCSDK_CO_TAG=NETSCAPE_7_0_RTM
|
||||
ACCESSIBLE_CO_TAG=NETSCAPE_7_0_RTM
|
||||
IMGLIB2_CO_TAG=NETSCAPE_7_0_RTM
|
||||
GFX2_CO_TAG=NETSCAPE_7_0_RTM
|
||||
|
||||
|
||||
!ifdef MOZ_BRANCH
|
||||
CVS_BRANCH=-r $(MOZ_BRANCH)
|
||||
!endif
|
||||
|
||||
!ifdef MOZ_DATE
|
||||
CVS_BRANCH=$(CVS_BRANCH) -D "$(MOZ_DATE)"
|
||||
!endif
|
||||
|
||||
# default pull is "quiet" but it can be overridden with MOZ_CVS_VERBOSE
|
||||
!ifndef MOZ_CVS_VERBOSE
|
||||
CVS_FLAGS=-q
|
||||
!endif
|
||||
|
||||
# honor any user-defined CVS flags
|
||||
!ifdef MOZ_CVS_FLAGS
|
||||
CVS_FLAGS=$(CVS_FLAGS) $(MOZ_CVS_FLAGS)
|
||||
!endif
|
||||
|
||||
# let's be explicit about CVSROOT... some windows cvs clients
|
||||
# are too stupid to correctly work without the -d option
|
||||
#
|
||||
# if they are too stupid, they should fail. I am
|
||||
# commenting this out because this does not work
|
||||
# under 4nt. (%'s are evaluted differently)
|
||||
#
|
||||
# If it breaks you, mail dougt@netscape.com
|
||||
# and leaf@mozilla.org
|
||||
#
|
||||
!if 0
|
||||
!if defined(CVSROOT)
|
||||
CVS_FLAGS=$(CVS_FLAGS) -d "$(CVSROOT)"
|
||||
!endif
|
||||
!endif
|
||||
|
||||
!ifndef MOZ_CO_FLAGS
|
||||
MOZ_CO_FLAGS = -P
|
||||
!endif
|
||||
|
||||
CVSCO = cvs $(CVS_FLAGS) co $(MOZ_CO_FLAGS) $(CVS_BRANCH)
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Figure out how to pull NSPR.
|
||||
#// If no NSPR_CO_TAG is specified, use the default static tag
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
!ifndef NSPR_CO_FLAGS
|
||||
NSPR_CO_FLAGS=$(MOZ_CO_FLAGS)
|
||||
!endif
|
||||
|
||||
NSPR_CO_FLAGS=$(NSPR_CO_FLAGS) $(CVS_BRANCH)
|
||||
|
||||
|
||||
CVSCO_NSPR = cvs $(CVS_FLAGS) co $(NSPR_CO_FLAGS)
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Figure out how to pull NSS and PSM libs.
|
||||
#// If no NSS_CO_TAG or PSM_CO_TAG is specified, use the default static tag
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
!ifndef NSS_CO_FLAGS
|
||||
NSS_CO_FLAGS=$(MOZ_CO_FLAGS)
|
||||
!endif
|
||||
|
||||
NSS_CO_FLAGS=$(NSS_CO_FLAGS) $(CVS_BRANCH)
|
||||
|
||||
CVSCO_NSS = cvs $(CVS_FLAGS) co $(NSS_CO_FLAGS)
|
||||
|
||||
!ifndef PSM_CO_FLAGS
|
||||
PSM_CO_FLAGS=$(MOZ_CO_FLAGS)
|
||||
!endif
|
||||
|
||||
PSM_CO_FLAGS=$(PSM_CO_FLAGS) $(CVS_BRANCH)
|
||||
|
||||
CVSCO_PSM = cvs $(CVS_FLAGS) co $(PSM_CO_FLAGS)
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Figure out how to pull LDAP C SDK client libs.
|
||||
#// If no LDAPCSDK_CO_TAG is specified, use the default tag
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
|
||||
!ifndef LDAPCSDK_CO_FLAGS
|
||||
LDAPCSDK_CO_FLAGS=$(MOZ_CO_FLAGS)
|
||||
!endif
|
||||
|
||||
LDAPCSDK_CO_FLAGS=$(LDAPCSDK_CO_FLAGS) $(CVS_BRANCH)
|
||||
|
||||
CVSCO_LDAPCSDK = cvs $(CVS_FLAGS) co $(LDAPCSDK_CO_FLAGS)
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Figure out how to pull accessibility libs.
|
||||
#// If no ACCESSIBLE_CO_TAG is specified, use the default tag
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
!ifndef ACCESSIBLE_CO_FLAGS
|
||||
ACCESSIBLE_CO_FLAGS=$(MOZ_CO_FLAGS)
|
||||
!endif
|
||||
|
||||
ACCESSIBLE_CO_FLAGS=$(ACCESSIBLE_CO_FLAGS) $(CVS_BRANCH)
|
||||
|
||||
CVSCO_ACCESSIBLE = cvs $(CVS_FLAGS) co $(ACCESSIBLE_CO_FLAGS)
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Figure out how to pull new image library.
|
||||
#// If no IMGLIB2_CO_TAG is specified, use the default tag
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
!ifndef IMGLIB2_CO_FLAGS
|
||||
IMGLIB2_CO_FLAGS=$(MOZ_CO_FLAGS)
|
||||
!endif
|
||||
|
||||
IMGLIB2_CO_FLAGS=$(IMGLIB2_CO_FLAGS) $(CVS_BRANCH)
|
||||
|
||||
CVSCO_IMGLIB2 = cvs $(CVS_FLAGS) co $(IMGLIB2_CO_FLAGS)
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Figure out how to pull new image library.
|
||||
#// If no GFX2_CO_TAG is specified, use the default tag
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
!ifndef GFX2_CO_FLAGS
|
||||
GFX2_CO_FLAGS=$(MOZ_CO_FLAGS)
|
||||
!endif
|
||||
|
||||
GFX2_CO_FLAGS=$(GFX2_CO_FLAGS) $(CVS_BRANCH)
|
||||
|
||||
CVSCO_GFX2 = cvs $(CVS_FLAGS) co $(GFX2_CO_FLAGS)
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Figure out how to pull the internal libart
|
||||
#// (only pulled and built if MOZ_INTERNAL_LIBART_LGPL is set)
|
||||
#// If no MOZ_INTERNAL_LIBART_CO_TAG is specified, use the default tag
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
!if defined(MOZ_SVG) && !defined(MOZ_INTERNAL_LIBART_LGPL)
|
||||
ERR_MESSAGE = ^
|
||||
You are trying to build Mozilla with SVG support (MOZ_SVG=1), but you ^
|
||||
haven not specified that mozilla/other-licenses/libart_lgpl should be ^
|
||||
pulled and built. At the moment Mozilla SVG builds need this patched ^
|
||||
version of libart. You either need to disable SVG support (unset MOZ_SVG) ^
|
||||
or enable pulling and building by setting MOZ_INTERNAL_LIBART_LGPL=1.^
|
||||
^
|
||||
If you choose to pull and build libart, note that it is only licensed^
|
||||
under the terms of the LGPL, not the MPL. (Which is why you have to opt^
|
||||
in explicitly.)
|
||||
!endif
|
||||
|
||||
!if defined(MOZ_INTERNAL_LIBART_LGPL)
|
||||
|
||||
!ifndef MOZ_INTERNAL_LIBART_CO_FLAGS
|
||||
MOZ_INTERNAL_LIBART_CO_FLAGS=$(MOZ_CO_FLAGS)
|
||||
!endif
|
||||
|
||||
!if "$(MOZ_INTERNAL_LIBART_CO_TAG)" != ""
|
||||
MOZ_INTERNAL_LIBART_CO_FLAGS=$(MOZ_INTERNAL_LIBART_CO_FLAGS) -r $(MOZ_INTERNAL_LIBART_CO_TAG)
|
||||
!else
|
||||
MOZ_INTERNAL_LIBART_CO_FLAGS=$(MOZ_INTERNAL_LIBART_CO_FLAGS) $(CVS_BRANCH)
|
||||
!endif
|
||||
|
||||
CVSCO_MOZ_INTERNAL_LIBART = cvs $(CVS_FLAGS) co $(MOZ_INTERNAL_LIBART_CO_FLAGS)
|
||||
|
||||
!endif
|
||||
|
||||
## The master target
|
||||
############################################################
|
||||
|
||||
pull_and_build_all: pull_all build_all_dep
|
||||
|
||||
|
||||
## Rules for pulling the source from the cvs repository
|
||||
############################################################
|
||||
|
||||
pull_clobber_and_build_all: pull_all clobber_all build_all
|
||||
|
||||
!if !defined(MOZ_INTERNAL_LIBART_LGPL)
|
||||
pull_all: pull_nspr pull_psm pull_ldapcsdk pull_accessible pull_gfx2 pull_imglib2 pull_seamonkey
|
||||
!else
|
||||
pull_all: pull_nspr pull_psm pull_ldapcsdk pull_accessible pull_gfx2 pull_imglib2 pull_moz_internal_libart pull_seamonkey
|
||||
!endif
|
||||
|
||||
pull_nspr: pull_clientmak
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO_NSPR) mozilla/nsprpub
|
||||
|
||||
pull_nss:
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO_NSS) mozilla/security/coreconf
|
||||
$(CVSCO_NSS) mozilla/security/nss
|
||||
|
||||
pull_psm: pull_nss
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO_PSM) mozilla/security/manager
|
||||
$(CVSCO_PSM) mozilla/security/makefile.win
|
||||
|
||||
pull_ldapcsdk:
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO_LDAPCSDK) mozilla/directory/c-sdk
|
||||
|
||||
pull_accessible:
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO_ACCESSIBLE) mozilla/accessible
|
||||
|
||||
pull_gfx2:
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO_GFX2) mozilla/gfx2
|
||||
|
||||
pull_imglib2:
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO_IMGLIB2) mozilla/modules/libpr0n
|
||||
|
||||
!if defined(MOZ_INTERNAL_LIBART_LGPL)
|
||||
pull_moz_internal_libart:
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO_MOZ_INTERNAL_LIBART) mozilla/other-licenses/libart_lgpl
|
||||
!endif
|
||||
|
||||
pull_xpconnect: pull_nspr
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO) mozilla/include
|
||||
$(CVSCO) mozilla/config
|
||||
$(CVSCO) -l mozilla/js
|
||||
$(CVSCO) -l mozilla/js/src
|
||||
$(CVSCO) mozilla/js/src/fdlibm
|
||||
$(CVSCO) mozilla/js/src/xpconnect
|
||||
$(CVSCO) mozilla/modules/libreg
|
||||
$(CVSCO) mozilla/xpcom
|
||||
$(CVSCO) mozilla/string
|
||||
|
||||
# pull either layout only or seamonkey the browser
|
||||
pull_layout:
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO) RaptorWin
|
||||
|
||||
pull_seamonkey: pull_clientmak
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO) SeaMonkeyAll
|
||||
|
||||
pull_clientmak:
|
||||
cd $(MOZ_SRC)\.
|
||||
$(CVSCO) mozilla/client.mak
|
||||
|
||||
############################################################
|
||||
|
||||
# nmake has to be hardcoded, or we have to depend on mozilla/config
|
||||
# being pulled already to figure out what $(NMAKE) should be.
|
||||
|
||||
clobber_all: clobber_nspr clobber_ldapcsdk clobber_psm clobber_seamonkey
|
||||
|
||||
build_all: build_nspr build_ldapcsdk build_seamonkey
|
||||
|
||||
build_all_dep: depend libs
|
||||
|
||||
distclean:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\directory\c-sdk
|
||||
gmake -f gmakefile.win distclean MOZ_SRC_FLIPPED=$(MOZ_SRC_FLIPPED)
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\nsprpub
|
||||
gmake -f gmakefile.win distclean MOZ_SRC_FLIPPED=$(MOZ_SRC_FLIPPED)
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)
|
||||
nmake /f client.mak clobber_psm
|
||||
nmake /f client.mak clobber_seamonkey
|
||||
|
||||
clobber_ldapcsdk:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\directory\c-sdk
|
||||
gmake -f gmakefile.win clobber_all MOZ_SRC_FLIPPED=$(MOZ_SRC_FLIPPED) \
|
||||
SHELL=sh
|
||||
|
||||
clobber_nspr:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\nsprpub
|
||||
gmake -f gmakefile.win clobber_all MOZ_SRC_FLIPPED=$(MOZ_SRC_FLIPPED)
|
||||
|
||||
clobber_psm:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\security
|
||||
nmake -f makefile.win clobber_all
|
||||
|
||||
clobber_xpconnect:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\.
|
||||
-rd /s /q dist
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\nsprpub
|
||||
gmake -f gmakefile.win clobber_all MOZ_SRC_FLIPPED=$(MOZ_SRC_FLIPPED)
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\include
|
||||
nmake -f makefile.win clobber_all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\modules\libreg
|
||||
nmake -f makefile.win clobber_all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\string
|
||||
nmake -f makefile.win clobber_all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\xpcom
|
||||
nmake -f makefile.win clobber_all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\js
|
||||
nmake -f makefile.win clobber_all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\js\src\xpconnect
|
||||
nmake -f makefile.win clobber_all
|
||||
|
||||
clobber_seamonkey:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\.
|
||||
-rd /s /q dist
|
||||
nmake -f makefile.win clobber_all
|
||||
|
||||
depend: export
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\.
|
||||
nmake -f makefile.win depend
|
||||
|
||||
depend_xpconnect:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\include
|
||||
nmake -f makefile.win depend
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\modules\libreg
|
||||
nmake -f makefile.win depend
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\string
|
||||
nmake -f makefile.win depend
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\xpcom
|
||||
nmake -f makefile.win depend
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\js\src
|
||||
nmake -f makefile.win depend
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\js\src\xpconnect
|
||||
nmake -f makefile.win depend
|
||||
|
||||
build_nspr:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\nsprpub
|
||||
gmake -f gmakefile.win MOZ_SRC_FLIPPED=$(MOZ_SRC_FLIPPED)
|
||||
|
||||
build_ldapcsdk:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\directory\c-sdk
|
||||
gmake -f gmakefile.win MOZ_SRC_FLIPPED=$(MOZ_SRC_FLIPPED) SHELL=sh
|
||||
|
||||
build_psm:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\security
|
||||
nmake -f makefile.win
|
||||
|
||||
build_xpconnect: build_nspr
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\include
|
||||
nmake -f makefile.win all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\modules\libreg
|
||||
nmake -f makefile.win all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\xpcom
|
||||
nmake -f makefile.win export
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\string
|
||||
nmake -f makefile.win all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\xpcom
|
||||
nmake -f makefile.win libs
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\js\src
|
||||
nmake -f makefile.win all
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\js\src\xpconnect
|
||||
nmake -f makefile.win all
|
||||
|
||||
build_seamonkey:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\.
|
||||
nmake -f makefile.win all
|
||||
|
||||
build_client:
|
||||
@cd $(MOZ_SRC)\mozilla\.
|
||||
nmake -f makefile.win all
|
||||
|
||||
build_layout:
|
||||
@cd $(MOZ_SRC)\mozilla\.
|
||||
nmake -f makefile.win all
|
||||
|
||||
build_dist:
|
||||
@cd $(MOZ_SRC)\mozilla\.
|
||||
nmake -f makefile.win all
|
||||
|
||||
libs:
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\.
|
||||
nmake -f makefile.win libs
|
||||
|
||||
export: build_nspr build_ldapcsdk
|
||||
@cd $(MOZ_SRC)\$(MOZ_TOP)\.
|
||||
nmake -f makefile.win export
|
||||
|
||||
clobber_dist:
|
||||
@cd $(MOZ_SRC)\mozilla\.
|
||||
nmake -f makefile.win clobber_all
|
||||
|
||||
clobber_client:
|
||||
@cd $(MOZ_SRC)\mozilla\.
|
||||
nmake -f makefile.win clobber_all
|
||||
|
||||
clobber_layout:
|
||||
@cd $(MOZ_SRC)\mozilla\.
|
||||
nmake -f makefile.win clobber_all
|
||||
|
||||
browse_info::
|
||||
cd $(MOZ_SRC)\$(MOZ_TOP)
|
||||
-dir /s /b *.sbr > sbrlist.tmp
|
||||
-bscmake /Es /o mozilla.bsc @sbrlist.tmp
|
||||
-rm sbrlist.tmp
|
||||
|
||||
regchrome::
|
||||
@cd $(MOZ_SRC)\mozilla\.
|
||||
nmake /f makefile.win regchrome
|
||||
|
||||
deliver::
|
||||
@cd $(MOZ_SRC)\mozilla\.
|
||||
nmake /f makefile.win splitsymbols
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Utility stuff...
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
# Verify that MOZ_SRC is set correctly
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
# Check to see if it is set at all
|
||||
!if "$(MOZ_SRC)"==""
|
||||
MOZ_SRC = $(MAKEDIR)\..
|
||||
!endif
|
||||
|
||||
#
|
||||
# create a temp file at the root and make sure it is visible from MOZ_SRC
|
||||
#
|
||||
!if [copy $(MAKEDIR)\client.mak $(MAKEDIR)\xyzzy.tmp > NUL] == 0
|
||||
!endif
|
||||
|
||||
!if !EXIST( $(MOZ_SRC)\mozilla\xyzzy.tmp )
|
||||
ERR_MESSAGE=$(ERR_MESSAGE)^
|
||||
MOZ_SRC isn't set correctly: [$(MOZ_SRC)\mozilla]!=[$(MAKEDIR)]
|
||||
!endif
|
||||
|
||||
!if [del $(MAKEDIR)\xyzzy.tmp]
|
||||
!endif
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
# Verify that MOZ_BITS is set
|
||||
#//------------------------------------------------------------------------
|
||||
!if !defined(MOZ_BITS)
|
||||
ERR_MESSAGE=$(ERR_MESSAGE)^
|
||||
Environment variable MOZ_BITS isn't set.
|
||||
!endif
|
||||
|
||||
!if !defined(MOZ_TOOLS)
|
||||
ERR_MESSAGE=$(ERR_MESSAGE)^
|
||||
Environment variable MOZ_TOOLS isn't set.
|
||||
!endif
|
||||
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#// Display error
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
!if "$(ERR_MESSAGE)" != ""
|
||||
ERR_MESSAGE = ^
|
||||
client.mak: ^
|
||||
$(ERR_MESSAGE) ^
|
||||
^
|
||||
client.mak: usage^
|
||||
^
|
||||
nmake -f client.mak [MOZ_BRANCH=<cvs_branch_name>] ^
|
||||
[MOZ_DATE=<cvs_date>]^
|
||||
[pull_and_build_all]^
|
||||
[pull_all]^
|
||||
[build_all]^
|
||||
^
|
||||
Environment variables:^
|
||||
^
|
||||
MOZ_BITS set to 32^
|
||||
MOZ_TOOLS set to the directory containing the needed tools ^
|
||||
|
||||
!ERROR $(ERR_MESSAGE)
|
||||
|
||||
!endif
|
||||
@@ -1,650 +0,0 @@
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s): Stephen Lamm
|
||||
|
||||
# Build the Mozilla client.
|
||||
#
|
||||
# This needs CVSROOT set to work, e.g.,
|
||||
# setenv CVSROOT :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot
|
||||
# or
|
||||
# setenv CVSROOT :pserver:username%somedomain.org@cvs.mozilla.org:/cvsroot
|
||||
#
|
||||
# To checkout and build a tree,
|
||||
# 1. cvs co mozilla/client.mk
|
||||
# 2. cd mozilla
|
||||
# 3. gmake -f client.mk
|
||||
#
|
||||
# Other targets (gmake -f client.mk [targets...]),
|
||||
# checkout
|
||||
# build
|
||||
# clean (realclean is now the same as clean)
|
||||
# distclean
|
||||
#
|
||||
# See http://www.mozilla.org/build/unix.html for more information.
|
||||
#
|
||||
# Options:
|
||||
# MOZ_OBJDIR - Destination object directory
|
||||
# MOZ_CO_DATE - Date tag to use for checkout (default: none)
|
||||
# MOZ_CO_MODULE - Module to checkout (default: SeaMonkeyAll)
|
||||
# MOZ_CVS_FLAGS - Flags to pass cvs (default: -q -z3)
|
||||
# MOZ_CO_FLAGS - Flags to pass after 'cvs co' (default: -P)
|
||||
# MOZ_MAKE_FLAGS - Flags to pass to $(MAKE)
|
||||
# MOZ_CO_BRANCH - Branch tag (Deprecated. Use MOZ_CO_TAG below.)
|
||||
#
|
||||
|
||||
#######################################################################
|
||||
# Checkout Tags
|
||||
#
|
||||
# For branches, uncomment the MOZ_CO_TAG line with the proper tag,
|
||||
# and commit this file on that tag.
|
||||
MOZ_CO_TAG = NETSCAPE_7_0_RTM
|
||||
NSPR_CO_TAG = NETSCAPE_7_0_RTM
|
||||
PSM_CO_TAG = NETSCAPE_7_0_RTM
|
||||
NSS_CO_TAG = NETSCAPE_7_0_RTM
|
||||
LDAPCSDK_CO_TAG = NETSCAPE_7_0_RTM
|
||||
ACCESSIBLE_CO_TAG = NETSCAPE_7_0_RTM
|
||||
GFX2_CO_TAG = NETSCAPE_7_0_RTM
|
||||
IMGLIB2_CO_TAG = NETSCAPE_7_0_RTM
|
||||
BUILD_MODULES = all
|
||||
|
||||
#######################################################################
|
||||
# Defines
|
||||
#
|
||||
CVS = cvs
|
||||
|
||||
CWD := $(shell pwd)
|
||||
|
||||
ifeq "$(CWD)" "/"
|
||||
CWD := /.
|
||||
endif
|
||||
|
||||
ifneq (, $(wildcard client.mk))
|
||||
# Ran from mozilla directory
|
||||
ROOTDIR := $(shell dirname $(CWD))
|
||||
TOPSRCDIR := $(CWD)
|
||||
else
|
||||
# Ran from mozilla/.. directory (?)
|
||||
ROOTDIR := $(CWD)
|
||||
TOPSRCDIR := $(CWD)/mozilla
|
||||
endif
|
||||
|
||||
# on os2, TOPSRCDIR may have two forward slashes in a row, which doesn't
|
||||
# work; replace first instance with one forward slash
|
||||
TOPSRCDIR := $(shell echo "$(TOPSRCDIR)" | sed -e 's%//%/%')
|
||||
|
||||
ifndef TOPSRCDIR_MOZ
|
||||
TOPSRCDIR_MOZ=$(TOPSRCDIR)
|
||||
endif
|
||||
|
||||
# if ROOTDIR equals only drive letter (i.e. "C:"), set to "/"
|
||||
DIRNAME := $(shell echo "$(ROOTDIR)" | sed -e 's/^.://')
|
||||
ifeq ($(DIRNAME),)
|
||||
ROOTDIR := /.
|
||||
endif
|
||||
|
||||
AUTOCONF := autoconf
|
||||
MKDIR := mkdir
|
||||
SH := /bin/sh
|
||||
ifndef MAKE
|
||||
MAKE := gmake
|
||||
endif
|
||||
|
||||
CONFIG_GUESS_SCRIPT := $(wildcard $(TOPSRCDIR)/build/autoconf/config.guess)
|
||||
ifdef CONFIG_GUESS_SCRIPT
|
||||
CONFIG_GUESS = $(shell $(CONFIG_GUESS_SCRIPT))
|
||||
else
|
||||
_IS_FIRST_CHECKOUT := 1
|
||||
endif
|
||||
|
||||
####################################
|
||||
# CVS
|
||||
|
||||
# Add the CVS root to CVS_FLAGS if needed
|
||||
CVS_ROOT_IN_TREE := $(shell cat $(TOPSRCDIR)/CVS/Root 2>/dev/null)
|
||||
ifneq ($(CVS_ROOT_IN_TREE),)
|
||||
ifneq ($(CVS_ROOT_IN_TREE),$(CVSROOT))
|
||||
CVS_FLAGS := -d $(CVS_ROOT_IN_TREE)
|
||||
endif
|
||||
endif
|
||||
|
||||
CVSCO = $(strip $(CVS) $(CVS_FLAGS) co $(CVS_CO_FLAGS))
|
||||
CVSCO_LOGFILE := $(ROOTDIR)/cvsco.log
|
||||
CVSCO_LOGFILE := $(shell echo $(CVSCO_LOGFILE) | sed s%//%/%)
|
||||
|
||||
ifdef MOZ_CO_TAG
|
||||
CVS_CO_FLAGS := -r $(MOZ_CO_TAG)
|
||||
endif
|
||||
|
||||
####################################
|
||||
# Load mozconfig Options
|
||||
|
||||
# See build pages, http://www.mozilla.org/build/unix.html,
|
||||
# for how to set up mozconfig.
|
||||
MOZCONFIG_LOADER := mozilla/build/autoconf/mozconfig2client-mk
|
||||
MOZCONFIG_FINDER := mozilla/build/autoconf/mozconfig-find
|
||||
MOZCONFIG_MODULES := mozilla/build/unix/modules.mk
|
||||
run_for_side_effects := \
|
||||
$(shell cd $(ROOTDIR); \
|
||||
if test "$(_IS_FIRST_CHECKOUT)"; then \
|
||||
$(CVSCO) $(MOZCONFIG_FINDER) $(MOZCONFIG_LOADER) $(MOZCONFIG_MODULES); \
|
||||
else true; \
|
||||
fi; \
|
||||
$(MOZCONFIG_LOADER) $(TOPSRCDIR) mozilla/.mozconfig.mk > mozilla/.mozconfig.out)
|
||||
include $(TOPSRCDIR)/.mozconfig.mk
|
||||
include $(TOPSRCDIR)/build/unix/modules.mk
|
||||
|
||||
####################################
|
||||
# Options that may come from mozconfig
|
||||
|
||||
# Change CVS flags if anonymous root is requested
|
||||
ifdef MOZ_CO_USE_MIRROR
|
||||
CVS_FLAGS := -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot
|
||||
endif
|
||||
|
||||
# MOZ_CVS_FLAGS - Basic CVS flags
|
||||
ifeq "$(origin MOZ_CVS_FLAGS)" "undefined"
|
||||
CVS_FLAGS := $(CVS_FLAGS) -q -z 3
|
||||
else
|
||||
CVS_FLAGS := $(MOZ_CVS_FLAGS)
|
||||
endif
|
||||
|
||||
# This option is deprecated. The best way to have client.mk pull a tag
|
||||
# is to set MOZ_CO_TAG (see above) and commit that change on the tag.
|
||||
ifdef MOZ_CO_BRANCH
|
||||
$(warning Use MOZ_CO_TAG instead of MOZ_CO_BRANCH)
|
||||
CVS_CO_FLAGS := -r $(MOZ_CO_BRANCH)
|
||||
endif
|
||||
|
||||
# MOZ_CO_FLAGS - Anything that we should use on all checkouts
|
||||
ifeq "$(origin MOZ_CO_FLAGS)" "undefined"
|
||||
CVS_CO_FLAGS := $(CVS_CO_FLAGS) -P
|
||||
else
|
||||
CVS_CO_FLAGS := $(CVS_CO_FLAGS) $(MOZ_CO_FLAGS)
|
||||
endif
|
||||
|
||||
ifdef MOZ_CO_DATE
|
||||
CVS_CO_DATE_FLAGS := -D "$(MOZ_CO_DATE)"
|
||||
endif
|
||||
|
||||
ifdef MOZ_OBJDIR
|
||||
OBJDIR := $(MOZ_OBJDIR)
|
||||
MOZ_MAKE := $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)
|
||||
else
|
||||
OBJDIR := $(TOPSRCDIR)
|
||||
MOZ_MAKE := $(MAKE) $(MOZ_MAKE_FLAGS)
|
||||
endif
|
||||
|
||||
####################################
|
||||
# CVS defines for PSM
|
||||
#
|
||||
PSM_CO_MODULE= mozilla/security/manager
|
||||
PSM_CO_FLAGS := -P -A
|
||||
ifdef MOZ_CO_FLAGS
|
||||
PSM_CO_FLAGS := $(MOZ_CO_FLAGS)
|
||||
endif
|
||||
ifdef PSM_CO_TAG
|
||||
PSM_CO_FLAGS := $(PSM_CO_FLAGS) -r $(PSM_CO_TAG)
|
||||
endif
|
||||
CVSCO_PSM = $(CVS) $(CVS_FLAGS) co $(PSM_CO_FLAGS) $(CVS_CO_DATE_FLAGS) $(PSM_CO_MODULE)
|
||||
|
||||
####################################
|
||||
# CVS defines for NSS
|
||||
#
|
||||
NSS_CO_MODULE = mozilla/security/nss \
|
||||
mozilla/security/coreconf \
|
||||
$(NULL)
|
||||
|
||||
NSS_CO_FLAGS := -P
|
||||
ifdef MOZ_CO_FLAGS
|
||||
NSS_CO_FLAGS := $(MOZ_CO_FLAGS)
|
||||
endif
|
||||
ifdef NSS_CO_TAG
|
||||
NSS_CO_FLAGS := $(NSS_CO_FLAGS) -r $(NSS_CO_TAG)
|
||||
endif
|
||||
# Cannot pull static tags by date
|
||||
ifeq ($(NSS_CO_TAG),NSS_CLIENT_TAG)
|
||||
CVSCO_NSS = $(CVS) $(CVS_FLAGS) co $(NSS_CO_FLAGS) $(NSS_CO_MODULE)
|
||||
else
|
||||
CVSCO_NSS = $(CVS) $(CVS_FLAGS) co $(NSS_CO_FLAGS) $(CVS_CO_DATE_FLAGS) $(NSS_CO_MODULE)
|
||||
endif
|
||||
|
||||
####################################
|
||||
# CVS defines for NSPR
|
||||
#
|
||||
NSPR_CO_MODULE = mozilla/nsprpub
|
||||
NSPR_CO_FLAGS := -P
|
||||
ifdef MOZ_CO_FLAGS
|
||||
NSPR_CO_FLAGS := $(MOZ_CO_FLAGS)
|
||||
endif
|
||||
ifdef NSPR_CO_TAG
|
||||
NSPR_CO_FLAGS := $(NSPR_CO_FLAGS) -r $(NSPR_CO_TAG)
|
||||
endif
|
||||
# Cannot pull static tags by date
|
||||
ifeq ($(NSPR_CO_TAG),NSPRPUB_CLIENT_TAG)
|
||||
CVSCO_NSPR = $(CVS) $(CVS_FLAGS) co $(NSPR_CO_FLAGS) $(NSPR_CO_MODULE)
|
||||
else
|
||||
CVSCO_NSPR = $(CVS) $(CVS_FLAGS) co $(NSPR_CO_FLAGS) $(CVS_CO_DATE_FLAGS) $(NSPR_CO_MODULE)
|
||||
endif
|
||||
|
||||
####################################
|
||||
# CVS defines for the C LDAP SDK
|
||||
#
|
||||
LDAPCSDK_CO_MODULE = mozilla/directory/c-sdk
|
||||
LDAPCSDK_CO_FLAGS := -P
|
||||
ifdef MOZ_CO_FLAGS
|
||||
LDAPCSDK_CO_FLAGS := $(MOZ_CO_FLAGS)
|
||||
endif
|
||||
ifdef LDAPCSDK_CO_TAG
|
||||
LDAPCSDK_CO_FLAGS := $(LDAPCSDK_CO_FLAGS) -r $(LDAPCSDK_CO_TAG)
|
||||
endif
|
||||
CVSCO_LDAPCSDK = $(CVS) $(CVS_FLAGS) co $(LDAPCSDK_CO_FLAGS) $(CVS_CO_DATE_FLAGS) $(LDAPCSDK_CO_MODULE)
|
||||
|
||||
####################################
|
||||
# CVS defines for the C LDAP SDK
|
||||
#
|
||||
ACCESSIBLE_CO_MODULE = mozilla/accessible
|
||||
ACCESSIBLE_CO_FLAGS := -P
|
||||
ifdef MOZ_CO_FLAGS
|
||||
ACCESSIBLE_CO_FLAGS := $(MOZ_CO_FLAGS)
|
||||
endif
|
||||
ifdef ACCESSIBLE_CO_TAG
|
||||
ACCESSIBLE_CO_FLAGS := $(ACCESSIBLE_CO_FLAGS) -r $(ACCESSIBLE_CO_TAG)
|
||||
endif
|
||||
CVSCO_ACCESSIBLE = $(CVS) $(CVS_FLAGS) co $(ACCESSIBLE_CO_FLAGS) $(CVS_CO_DATE_FLAGS) $(ACCESSIBLE_CO_MODULE)
|
||||
|
||||
####################################
|
||||
# CVS defines for gfx2
|
||||
#
|
||||
GFX2_CO_MODULE = mozilla/gfx2
|
||||
GFX2_CO_FLAGS := -P
|
||||
ifdef MOZ_CO_FLAGS
|
||||
GFX2_CO_FLAGS := $(MOZ_CO_FLAGS)
|
||||
endif
|
||||
ifdef GFX2_CO_TAG
|
||||
GFX2_CO_FLAGS := $(GFX2_CO_FLAGS) -r $(GFX2_CO_TAG)
|
||||
endif
|
||||
CVSCO_GFX2 = $(CVS) $(CVS_FLAGS) co $(GFX2_CO_FLAGS) $(CVS_CO_DATE_FLAGS) $(GFX2_CO_MODULE)
|
||||
|
||||
####################################
|
||||
# CVS defines for new image library
|
||||
#
|
||||
IMGLIB2_CO_MODULE = mozilla/modules/libpr0n
|
||||
IMGLIB2_CO_FLAGS := -P
|
||||
ifdef MOZ_CO_FLAGS
|
||||
IMGLIB2_CO_FLAGS := $(MOZ_CO_FLAGS)
|
||||
endif
|
||||
ifdef IMGLIB2_CO_TAG
|
||||
IMGLIB2_CO_FLAGS := $(IMGLIB2_CO_FLAGS) -r $(IMGLIB2_CO_TAG)
|
||||
endif
|
||||
CVSCO_IMGLIB2 = $(CVS) $(CVS_FLAGS) co $(IMGLIB2_CO_FLAGS) $(CVS_CO_DATE_FLAGS) $(IMGLIB2_CO_MODULE)
|
||||
|
||||
####################################
|
||||
# CVS defines for standalone modules
|
||||
#
|
||||
ifneq ($(BUILD_MODULES),all)
|
||||
MOZ_CO_MODULE := $(filter-out $(NSPRPUB_DIR) security directory/c-sdk, $(BUILD_MODULE_CVS))
|
||||
MOZ_CO_MODULE += allmakefiles.sh client.mk aclocal.m4 configure configure.in
|
||||
MOZ_CO_MODULE += Makefile.in
|
||||
MOZ_CO_MODULE := $(addprefix mozilla/, $(MOZ_CO_MODULE))
|
||||
|
||||
NOSUBDIRS_MODULE := $(addprefix mozilla/, $(BUILD_MODULE_CVS_NS))
|
||||
ifneq ($(NOSUBDIRS_MODULE),)
|
||||
CVSCO_NOSUBDIRS := $(CVSCO) -l $(CVS_CO_DATE_FLAGS) $(NOSUBDIRS_MODULE)
|
||||
endif
|
||||
|
||||
ifeq (,$(filter $(NSPRPUB_DIR), $(BUILD_MODULE_CVS)))
|
||||
CVSCO_NSPR :=
|
||||
endif
|
||||
ifeq (,$(filter security security/manager, $(BUILD_MODULE_CVS)))
|
||||
CVSCO_PSM :=
|
||||
CVSCO_NSS :=
|
||||
endif
|
||||
ifeq (,$(filter directory/c-sdk, $(BUILD_MODULE_CVS)))
|
||||
CVSCO_LDAPCSDK :=
|
||||
endif
|
||||
ifeq (,$(filter accessible, $(BUILD_MODULE_CVS)))
|
||||
CVSCO_ACCESSIBLE :=
|
||||
endif
|
||||
ifeq (,$(filter gfx2, $(BUILD_MODULE_CVS)))
|
||||
CVSCO_GFX2 :=
|
||||
endif
|
||||
ifeq (,$(filter modules/libpr0n, $(BUILD_MODULE_CVS)))
|
||||
CVSCO_IMGLIB2 :=
|
||||
endif
|
||||
endif
|
||||
|
||||
####################################
|
||||
# CVS defines for SeaMonkey
|
||||
#
|
||||
ifeq ($(MOZ_CO_MODULE),)
|
||||
MOZ_CO_MODULE := SeaMonkeyAll
|
||||
endif
|
||||
CVSCO_SEAMONKEY := $(CVSCO) $(CVS_CO_DATE_FLAGS) $(MOZ_CO_MODULE)
|
||||
|
||||
####################################
|
||||
# CVS defined for libart (pulled and built if MOZ_INTERNAL_LIBART_LGPL is set)
|
||||
#
|
||||
CVSCO_LIBART := $(CVSCO) $(CVS_CO_DATE_FLAGS) mozilla/other-licenses/libart_lgpl
|
||||
|
||||
ifdef MOZ_INTERNAL_LIBART_LGPL
|
||||
FASTUPDATE_LIBART := fast_update $(CVSCO_LIBART)
|
||||
CHECKOUT_LIBART := cvs_co $(CVSCO_LIBART)
|
||||
else
|
||||
CHECKOUT_LIBART := true
|
||||
FASTUPDATE_LIBART := true
|
||||
endif
|
||||
|
||||
####################################
|
||||
# CVS defines for Calendar (pulled and built if MOZ_CALENDAR is set)
|
||||
#
|
||||
CVSCO_CALENDAR := $(CVSCO) $(CVS_CO_DATE_FLAGS) mozilla/calendar
|
||||
|
||||
ifdef MOZ_CALENDAR
|
||||
FASTUPDATE_CALENDAR := fast_update $(CVSCO_CALENDAR)
|
||||
CHECKOUT_CALENDAR := cvs_co $(CVSCO_CALENDAR)
|
||||
else
|
||||
CHECKOUT_CALENDAR := true
|
||||
FASTUPDATE_CALENDAR := true
|
||||
endif
|
||||
|
||||
|
||||
# because some cygwin tools can't handle native dos-drive paths & vice-versa
|
||||
# force configure to use a relative path for --srcdir
|
||||
# need a better check for win32
|
||||
# and we need to get OBJDIR earlier
|
||||
ifdef MOZ_TOOLS
|
||||
_tmpobjdir := $(shell cygpath -u $(OBJDIR))
|
||||
_abs2rel := $(shell cygpath -w $(TOPSRCDIR)/build/unix/abs2rel.pl | sed -e 's|\\|/|g')
|
||||
_OBJ2SRCPATH := $(shell $(_abs2rel) $(TOPSRCDIR) $(_tmpobjdir))
|
||||
endif
|
||||
|
||||
#######################################################################
|
||||
# Rules
|
||||
#
|
||||
|
||||
# Print out any options loaded from mozconfig.
|
||||
all build checkout clean depend distclean export libs install realclean::
|
||||
@if test -f .mozconfig.out; then \
|
||||
cat .mozconfig.out; \
|
||||
rm -f .mozconfig.out; \
|
||||
else true; \
|
||||
fi
|
||||
|
||||
ifdef _IS_FIRST_CHECKOUT
|
||||
all:: checkout build
|
||||
else
|
||||
all:: checkout alldep
|
||||
endif
|
||||
|
||||
# Windows equivalents
|
||||
pull_all: checkout
|
||||
build_all: build
|
||||
build_all_dep: alldep
|
||||
build_all_depend: alldep
|
||||
clobber clobber_all: clean
|
||||
pull_and_build_all: checkout alldep
|
||||
|
||||
# Do everything from scratch
|
||||
everything: checkout clean build
|
||||
|
||||
####################################
|
||||
# CVS checkout
|
||||
#
|
||||
checkout::
|
||||
# @: Backup the last checkout log.
|
||||
@if test -f $(CVSCO_LOGFILE) ; then \
|
||||
mv $(CVSCO_LOGFILE) $(CVSCO_LOGFILE).old; \
|
||||
else true; \
|
||||
fi
|
||||
ifdef RUN_AUTOCONF_LOCALLY
|
||||
@echo "Removing local configures" ; \
|
||||
cd $(ROOTDIR) && \
|
||||
$(RM) -f mozilla/configure mozilla/nsprpub/configure \
|
||||
mozilla/directory/c-sdk/configure
|
||||
endif
|
||||
@echo "checkout start: "`date` | tee $(CVSCO_LOGFILE)
|
||||
@echo '$(CVSCO) mozilla/client.mk mozilla/build/unix/modules.mk'; \
|
||||
cd $(ROOTDIR) && \
|
||||
$(CVSCO) mozilla/client.mk mozilla/build/unix/modules.mk
|
||||
@cd $(ROOTDIR) && $(MAKE) -f mozilla/client.mk real_checkout
|
||||
|
||||
real_checkout:
|
||||
# @: Start the checkout. Split the output to the tty and a log file. \
|
||||
# : If it fails, touch an error file because "tee" hides the error.
|
||||
@failed=.cvs-failed.tmp; rm -f $$failed*; \
|
||||
cvs_co() { echo "$$@" ; \
|
||||
("$$@" || touch $$failed) 2>&1 | tee -a $(CVSCO_LOGFILE) && \
|
||||
if test -f $$failed; then false; else true; fi; }; \
|
||||
cvs_co $(CVSCO_NSPR) && \
|
||||
cvs_co $(CVSCO_NSS) && \
|
||||
cvs_co $(CVSCO_PSM) && \
|
||||
cvs_co $(CVSCO_LDAPCSDK) && \
|
||||
cvs_co $(CVSCO_ACCESSIBLE) && \
|
||||
cvs_co $(CVSCO_GFX2) && \
|
||||
cvs_co $(CVSCO_IMGLIB2) && \
|
||||
$(CHECKOUT_CALENDAR) && \
|
||||
$(CHECKOUT_LIBART) && \
|
||||
cvs_co $(CVSCO_SEAMONKEY) && \
|
||||
cvs_co $(CVSCO_NOSUBDIRS)
|
||||
@echo "checkout finish: "`date` | tee -a $(CVSCO_LOGFILE)
|
||||
# @: Check the log for conflicts. ;
|
||||
@conflicts=`egrep "^C " $(CVSCO_LOGFILE)` ;\
|
||||
if test "$$conflicts" ; then \
|
||||
echo "$(MAKE): *** Conflicts during checkout." ;\
|
||||
echo "$$conflicts" ;\
|
||||
echo "$(MAKE): Refer to $(CVSCO_LOGFILE) for full log." ;\
|
||||
false; \
|
||||
else true; \
|
||||
fi
|
||||
ifdef RUN_AUTOCONF_LOCALLY
|
||||
@echo Generating configures using $(AUTOCONF) ; \
|
||||
cd $(TOPSRCDIR) && $(AUTOCONF) && \
|
||||
cd $(TOPSRCDIR)/nsprpub && $(AUTOCONF) && \
|
||||
cd $(TOPSRCDIR)/directory/c-sdk && $(AUTOCONF)
|
||||
endif
|
||||
|
||||
fast-update:
|
||||
# @: Backup the last checkout log.
|
||||
@if test -f $(CVSCO_LOGFILE) ; then \
|
||||
mv $(CVSCO_LOGFILE) $(CVSCO_LOGFILE).old; \
|
||||
else true; \
|
||||
fi
|
||||
ifdef RUN_AUTOCONF_LOCALLY
|
||||
@echo "Removing local configures" ; \
|
||||
cd $(ROOTDIR) && \
|
||||
$(RM) -f mozilla/configure mozilla/nsprpub/configure \
|
||||
mozilla/directory/c-sdk/configure
|
||||
endif
|
||||
@echo "checkout start: "`date` | tee $(CVSCO_LOGFILE)
|
||||
@echo '$(CVSCO) mozilla/client.mk mozilla/build/unix/modules.mk'; \
|
||||
cd $(ROOTDIR) && \
|
||||
$(CVSCO) mozilla/client.mk mozilla/build/unix/modules.mk
|
||||
@cd $(TOPSRCDIR) && \
|
||||
$(MAKE) -f client.mk real_fast-update
|
||||
|
||||
real_fast-update:
|
||||
# @: Start the update. Split the output to the tty and a log file. \
|
||||
# : If it fails, touch an error file because "tee" hides the error.
|
||||
@failed=.fast_update-failed.tmp; rm -f $$failed*; \
|
||||
fast_update() { (config/cvsco-fast-update.pl $$@ || touch $$failed) 2>&1 | tee -a $(CVSCO_LOGFILE) && \
|
||||
if test -f $$failed; then false; else true; fi; }; \
|
||||
cvs_co() { echo "$$@" ; \
|
||||
("$$@" || touch $$failed) 2>&1 | tee -a $(CVSCO_LOGFILE) && \
|
||||
if test -f $$failed; then false; else true; fi; }; \
|
||||
fast_update $(CVSCO_NSPR) && \
|
||||
cd $(ROOTDIR) && \
|
||||
failed=mozilla/.fast_update-failed.tmp && \
|
||||
cvs_co $(CVSCO_NSS) && \
|
||||
failed=.fast_update-failed.tmp && \
|
||||
cd mozilla && \
|
||||
fast_update $(CVSCO_PSM) && \
|
||||
fast_update $(CVSCO_LDAPCSDK) && \
|
||||
fast_update $(CVSCO_ACCESSIBLE) && \
|
||||
fast_update $(CVSCO_GFX2) && \
|
||||
fast_update $(CVSCO_IMGLIB2) && \
|
||||
$(FASTUPDATE_CALENDAR) && \
|
||||
$(FASTUPDATE_LIBART) && \
|
||||
fast_update $(CVSCO_SEAMONKEY) && \
|
||||
fast_update $(CVSCO_NOSUBDIRS)
|
||||
@echo "fast_update finish: "`date` | tee -a $(CVSCO_LOGFILE)
|
||||
# @: Check the log for conflicts. ;
|
||||
@conflicts=`egrep "^C " $(CVSCO_LOGFILE)` ;\
|
||||
if test "$$conflicts" ; then \
|
||||
echo "$(MAKE): *** Conflicts during fast-update." ;\
|
||||
echo "$$conflicts" ;\
|
||||
echo "$(MAKE): Refer to $(CVSCO_LOGFILE) for full log." ;\
|
||||
false; \
|
||||
else true; \
|
||||
fi
|
||||
ifdef RUN_AUTOCONF_LOCALLY
|
||||
@echo Generating configures using $(AUTOCONF) ; \
|
||||
cd $(TOPSRCDIR) && $(AUTOCONF) && \
|
||||
cd $(TOPSRCDIR)/nsprpub && $(AUTOCONF) && \
|
||||
cd $(TOPSRCDIR)/directory/c-sdk && $(AUTOCONF)
|
||||
endif
|
||||
|
||||
####################################
|
||||
# Web configure
|
||||
|
||||
WEBCONFIG_FILE := $(HOME)/.mozconfig
|
||||
|
||||
MOZCONFIG2CONFIGURATOR := build/autoconf/mozconfig2configurator
|
||||
webconfig:
|
||||
@cd $(TOPSRCDIR); \
|
||||
url=`$(MOZCONFIG2CONFIGURATOR) $(TOPSRCDIR)`; \
|
||||
echo Running mozilla with the following url: ;\
|
||||
echo ;\
|
||||
echo $$url ;\
|
||||
mozilla -remote "openURL($$url)" || \
|
||||
netscape -remote "openURL($$url)" || \
|
||||
mozilla $$url || \
|
||||
netscape $$url ;\
|
||||
echo ;\
|
||||
echo 1. Fill out the form on the browser. ;\
|
||||
echo 2. Save the results to $(WEBCONFIG_FILE)
|
||||
|
||||
#####################################################
|
||||
# First Checkout
|
||||
|
||||
ifdef _IS_FIRST_CHECKOUT
|
||||
# First time, do build target in a new process to pick up new files.
|
||||
build::
|
||||
$(MAKE) -f $(TOPSRCDIR)/client.mk build
|
||||
else
|
||||
|
||||
#####################################################
|
||||
# After First Checkout
|
||||
|
||||
|
||||
####################################
|
||||
# Configure
|
||||
|
||||
CONFIG_STATUS := $(wildcard $(OBJDIR)/config.status)
|
||||
CONFIG_CACHE := $(wildcard $(OBJDIR)/config.cache)
|
||||
|
||||
ifdef RUN_AUTOCONF_LOCALLY
|
||||
EXTRA_CONFIG_DEPS := \
|
||||
$(TOPSRCDIR)/aclocal.m4 \
|
||||
$(wildcard $(TOPSRCDIR)/build/autoconf/*.m4) \
|
||||
$(NULL)
|
||||
|
||||
$(TOPSRCDIR)/configure: $(TOPSRCDIR)/configure.in $(EXTRA_CONFIG_DEPS)
|
||||
@echo Generating $@ using autoconf
|
||||
cd $(TOPSRCDIR); $(AUTOCONF)
|
||||
endif
|
||||
|
||||
CONFIG_STATUS_DEPS_L10N := $(wildcard $(TOPSRCDIR)/l10n/makefiles.all)
|
||||
|
||||
CONFIG_STATUS_DEPS := \
|
||||
$(TOPSRCDIR)/configure \
|
||||
$(TOPSRCDIR)/allmakefiles.sh \
|
||||
$(TOPSRCDIR)/.mozconfig.mk \
|
||||
$(wildcard $(TOPSRCDIR)/nsprpub/configure) \
|
||||
$(wildcard $(TOPSRCDIR)/directory/c-sdk/configure) \
|
||||
$(wildcard $(TOPSRCDIR)/mailnews/makefiles) \
|
||||
$(CONFIG_STATUS_DEPS_L10N) \
|
||||
$(wildcard $(TOPSRCDIR)/themes/makefiles) \
|
||||
$(NULL)
|
||||
|
||||
# configure uses the program name to determine @srcdir@. Calling it without
|
||||
# $(TOPSRCDIR) will set @srcdir@ to "."; otherwise, it is set to the full
|
||||
# path of $(TOPSRCDIR).
|
||||
ifeq ($(TOPSRCDIR),$(OBJDIR))
|
||||
CONFIGURE := ./configure
|
||||
else
|
||||
CONFIGURE := $(TOPSRCDIR)/configure
|
||||
endif
|
||||
|
||||
ifdef _OBJ2SRCPATH
|
||||
CONFIGURE_ARGS := --srcdir=$(_OBJ2SRCPATH) $(CONFIGURE_ARGS)
|
||||
endif
|
||||
|
||||
$(OBJDIR)/Makefile $(OBJDIR)/config.status: $(CONFIG_STATUS_DEPS)
|
||||
@if test ! -d $(OBJDIR); then $(MKDIR) $(OBJDIR); else true; fi
|
||||
@echo cd $(OBJDIR);
|
||||
@echo $(CONFIGURE) $(CONFIGURE_ARGS)
|
||||
@cd $(OBJDIR) && $(CONFIGURE_ENV_ARGS) $(CONFIGURE) $(CONFIGURE_ARGS) \
|
||||
|| ( echo "*** Fix above errors and then restart with\
|
||||
\"$(MAKE) -f client.mk build\"" && exit 1 )
|
||||
@touch $(OBJDIR)/Makefile
|
||||
|
||||
ifdef CONFIG_STATUS
|
||||
$(OBJDIR)/config/autoconf.mk: $(TOPSRCDIR)/config/autoconf.mk.in
|
||||
cd $(OBJDIR); \
|
||||
CONFIG_FILES=config/autoconf.mk ./config.status
|
||||
endif
|
||||
|
||||
|
||||
####################################
|
||||
# Depend
|
||||
|
||||
depend:: $(OBJDIR)/Makefile $(OBJDIR)/config.status
|
||||
$(MOZ_MAKE) export && $(MOZ_MAKE) depend
|
||||
|
||||
####################################
|
||||
# Build it
|
||||
|
||||
build:: $(OBJDIR)/Makefile $(OBJDIR)/config.status
|
||||
$(MOZ_MAKE)
|
||||
|
||||
####################################
|
||||
# Other targets
|
||||
|
||||
# Pass these target onto the real build system
|
||||
install export libs clean realclean distclean alldep:: $(OBJDIR)/Makefile $(OBJDIR)/config.status
|
||||
$(MOZ_MAKE) $@
|
||||
|
||||
cleansrcdir:
|
||||
@cd $(TOPSRCDIR); \
|
||||
if [ -f webshell/embed/gtk/Makefile ]; then \
|
||||
$(MAKE) -C webshell/embed/gtk distclean; \
|
||||
fi; \
|
||||
if [ -f Makefile ]; then \
|
||||
$(MAKE) distclean ; \
|
||||
else \
|
||||
echo "Removing object files from srcdir..."; \
|
||||
rm -fr `find . -type d \( -name .deps -print -o -name CVS \
|
||||
-o -exec test ! -d {}/CVS \; \) -prune \
|
||||
-o \( -name '*.[ao]' -o -name '*.so' \) -type f -print`; \
|
||||
build/autoconf/clean-config.sh; \
|
||||
fi;
|
||||
|
||||
# (! IS_FIRST_CHECKOUT)
|
||||
endif
|
||||
|
||||
.PHONY: checkout real_checkout depend build export libs alldep install clean realclean distclean cleansrcdir pull_all build_all clobber clobber_all pull_and_build_all everything
|
||||
38
mozilla/java/Makefile.in
Normal file
38
mozilla/java/Makefile.in
Normal file
@@ -0,0 +1,38 @@
|
||||
#!gmake
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ..
|
||||
topsrcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
# PENDING(edburns): make it so it's possible to just build
|
||||
# webclient and javadom
|
||||
|
||||
DIRS= util \
|
||||
dom \
|
||||
plugins \
|
||||
webclient \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
43
mozilla/java/Makefile.win
Normal file
43
mozilla/java/Makefile.win
Normal file
@@ -0,0 +1,43 @@
|
||||
#!nmake
|
||||
#
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
IGNORE_MANIFEST=1
|
||||
#//------------------------------------------------------------------------
|
||||
#//
|
||||
#// Makefile to build the java enhancers to mozilla
|
||||
#//
|
||||
#//------------------------------------------------------------------------
|
||||
|
||||
|
||||
#//------------------------------------------------------------------------
|
||||
#//
|
||||
#// Specify the depth of the current directory relative to the
|
||||
#// root of NS
|
||||
#//
|
||||
#//------------------------------------------------------------------------
|
||||
DEPTH = ..
|
||||
|
||||
DIRS = external \
|
||||
util \
|
||||
dom \
|
||||
webclient
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
36
mozilla/java/README
Normal file
36
mozilla/java/README
Normal file
@@ -0,0 +1,36 @@
|
||||
Here lies the code that comprises the java enhancers to mozilla.
|
||||
|
||||
Authors: see the README files for each individual subdirectory
|
||||
|
||||
Requirements:
|
||||
|
||||
* JDK1.2 or greater (may work with lower versions, haven't checked).
|
||||
|
||||
* Successfully built MOZ_DEBUG=1 Mozilla M13 tree.
|
||||
|
||||
* Perl 5 perl.exe must be in your path
|
||||
|
||||
How To Build:
|
||||
|
||||
* make it so the directory in which this file resides is a child of your
|
||||
top level Mozilla M13 directory
|
||||
|
||||
* make sure the environment var JDKHOME is set to your jdk installation
|
||||
directory, ie SET JDKHOME=C:\jdk1.2.2
|
||||
|
||||
* type "nmake /f makefile.win all" and hope for the best
|
||||
|
||||
* this should compile the clasess into %MOZ_SRC%\dist\classes
|
||||
|
||||
Problems:
|
||||
|
||||
* clobber_all doesn't remove the .class files from dist\classes. You
|
||||
have to do this manually.
|
||||
|
||||
* post to netscape.public.mozilla.java newsgroup
|
||||
|
||||
General notes:
|
||||
|
||||
* Please update the ChangeLog (changelo) files in the subdirectories when
|
||||
you make changes.
|
||||
|
||||
106
mozilla/java/README.commercial
Normal file
106
mozilla/java/README.commercial
Normal file
@@ -0,0 +1,106 @@
|
||||
******************** BLACKWOOD RELEASE 0.9 README ********************
|
||||
|
||||
|
||||
READ THIS DOCUMENT BEFORE RUNNING ANY OF THE BLACKWOOD COMPONENTS
|
||||
|
||||
|
||||
This version of Blackwood has been built on and configured for
|
||||
the Solaris(TM) operating environment
|
||||
|
||||
|
||||
This package contains the following components of the Blackwood Project
|
||||
- Pluglets, JavaDOM and Webclient
|
||||
|
||||
The Blackwood project aims to -
|
||||
1. Better integrate the Java (TM) platform with the Mozilla (Netscape 6)
|
||||
Browser so developers can extend the browser with components and
|
||||
plug-ins written in the Java programming language
|
||||
2. Make sure that Mozilla's layout engine can be embedded in
|
||||
applications running on a Java virtual machine (JVM).
|
||||
|
||||
More information on the Blackwood project can be obtained online at
|
||||
http://www.mozilla.org/projects/blackwood/
|
||||
|
||||
|
||||
------------------------------------------------------------------------
|
||||
SYSTEM REQUIREMENTS
|
||||
------------------------------------------------------------------------
|
||||
|
||||
The Blackwood software components run on Solaris for SPARC(TM) and
|
||||
Solaris for Intel with Solaris versions 7 and 8.
|
||||
|
||||
You will also need to install the JRE1.3.0_01 Java Bundle that goes
|
||||
with Netscape 6 PR3
|
||||
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
BLACKWOOD COMPONENTS
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
JAVA PLUGLET API - A Pluglet is a plug-in that is written in the Java
|
||||
programming Language. The Java Pluglet API is a close 1:1 implementation
|
||||
of the new C++ Plug-in API in Mozilla and it allows users to develop
|
||||
plug-ins in Java that run inside a Java Virtual Machione (JVM).
|
||||
|
||||
More information can be obtained online at
|
||||
http://www.mozilla.org/projects/blackwood/java-plugins/
|
||||
|
||||
|
||||
JAVA DOM API - The Java DOM API is an implementation of the Java Bindings
|
||||
specified in the Document Object Model (DOM) Level 1 Specification. This
|
||||
API allows Java Applets and Pluglets to interact with and modify the
|
||||
document they are embedded into.
|
||||
|
||||
More information can be obtained online at
|
||||
http://www.mozilla.org/projects/blackwood/dom/
|
||||
http://www.w3.org/TR/REC-DOM-Level-1/java-language-binding.html
|
||||
|
||||
|
||||
WEBCLIENT - Webclient is a browser-neutral Java API that enables generic
|
||||
web browsing capabilities in a Java application.
|
||||
|
||||
More information can be obtained online at
|
||||
http://www.mozilla.org/projects/blackwood/webclient/
|
||||
http://www.mozilla.org/projects/blackwood/webclient/ref_guides/Developer_guide/index.htm
|
||||
http://www.mozilla.org/projects/blackwood/webclient/ref_guides/Implementation_guide/index.htm
|
||||
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
RUN INSTRUCTIONS
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
PLUGLETS
|
||||
- Launch the browser using the shell script "netscape_pluglets"
|
||||
- Navigate to the url file:///<your_Netscape6_install_dir>/res/javadev/pluglets/test.html
|
||||
- If you wish to observe Mozilla debug messages on your shell prompt, launch Pluglets
|
||||
using the script "netscape_debug_pluglets"
|
||||
|
||||
This contains several Pluglet examples.
|
||||
|
||||
|
||||
JAVADOM
|
||||
- The DOMViewer example in the Pluglets example list is a JavaDOM example
|
||||
|
||||
|
||||
WEBCLIENT
|
||||
- set the Environment variable MOZILLA_FIVE_HOME to the location of your
|
||||
Netscape 6 binaries. If you install the SVR4 package, this will be
|
||||
setenv MOZILLA_FIVE_HOME /opt/SUNWns6
|
||||
- cd to the javadev/example directory
|
||||
- run the shell script runem as
|
||||
runem <your url>
|
||||
|
||||
|
||||
============================================================================
|
||||
Copyright 2000 Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto,
|
||||
California 94303 U.S.A. All rights reserved.
|
||||
|
||||
Sun, Sun Microsystems, Java, SunOS, OpenWindows, and Solaris are trademarks,
|
||||
registered trademarks, or service marks of Sun Microsystems, Inc. in the U.S.A.
|
||||
and other countries. All SPARC trademarks are used under license and are
|
||||
trademarks or registered trademarks of SPARC International, Inc. in the U.S.A.
|
||||
and other countries. Products bearing SPARC trademarks are based upon an
|
||||
architecture developed by Sun Microsystems, Inc. Netscape is a trademark of
|
||||
Netscape Communications Corporation. PostScript is a trademark of Adobe
|
||||
Systems, Incorporated, which may be registered in certain jurisdictions.
|
||||
|
||||
5
mozilla/java/changelo
Normal file
5
mozilla/java/changelo
Normal file
@@ -0,0 +1,5 @@
|
||||
Fri Jul 30 14:57:28 1999 Ed Burns <Ed Burns <ed.burns@sun.com>>
|
||||
|
||||
* Made necessary changes to build files to build with jdk1.1.7 or
|
||||
jdk1.2.2.
|
||||
|
||||
44
mozilla/java/config/buildpkg.bat
Normal file
44
mozilla/java/config/buildpkg.bat
Normal file
@@ -0,0 +1,44 @@
|
||||
@echo off
|
||||
rem The contents of this file are subject to the Netscape Public
|
||||
rem License Version 1.1 (the "License"); you may not use this file
|
||||
rem except in compliance with the License. You may obtain a copy of
|
||||
rem the License at http://www.mozilla.org/NPL/
|
||||
rem
|
||||
rem Software distributed under the License is distributed on an "AS
|
||||
rem IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
rem implied. See the License for the specific language governing
|
||||
rem rights and limitations under the License.
|
||||
rem
|
||||
rem The Original Code is mozilla.org code.
|
||||
rem
|
||||
rem The Initial Developer of the Original Code is Netscape
|
||||
rem Communications Corporation. Portions created by Netscape are
|
||||
rem Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
rem Rights Reserved.
|
||||
rem
|
||||
rem Contributor(s):
|
||||
@echo on
|
||||
|
||||
@echo off
|
||||
if not exist %2 echo Warning: %2 does not exist! (you may need to check it out)
|
||||
if not exist %2 exit 1
|
||||
|
||||
pushd %2
|
||||
|
||||
goto NO_CAFE
|
||||
|
||||
if "%MOZ_CAFE%"=="" goto NO_CAFE
|
||||
|
||||
mkdir %MOZ_SRC%\mozilla\dist\classes\%2
|
||||
%MOZ_TOOLS%\bin\sj.exe -classpath %MOZ_SRC%\mozilla\dist\classes;%MOZ_SRC%\mozilla\sun-java\classsrc -d %MOZ_SRC%\mozilla\dist\classes *.java
|
||||
goto END
|
||||
|
||||
:NO_CAFE
|
||||
|
||||
perl.exe %MOZ_SRC%\mozilla\config\outofdate.pl -d %MOZ_SRC%\mozilla\dist\classes\%2 -cfg %1 *.java > doit.bat
|
||||
call doit.bat
|
||||
del /F /A:A doit.bat
|
||||
|
||||
:END
|
||||
|
||||
popd
|
||||
19
mozilla/java/config/localdefs.mak
Normal file
19
mozilla/java/config/localdefs.mak
Normal file
@@ -0,0 +1,19 @@
|
||||
# this file contains defs that should be in the top level mozilla/config
|
||||
# directory, but may not be there due to tree update issues.
|
||||
|
||||
|
||||
!ifndef JAVA_HOME
|
||||
JAVA_HOME=$(JDKHOME)
|
||||
!endif
|
||||
|
||||
JAVA_DESTPATH = $(MOZ_SRC)\mozilla\dist\classes
|
||||
DEFAULT_JAVA_SOURCEPATH = $(MOZ_SRC)\mozilla\sun-java\classsrc
|
||||
JAVA_SOURCEPATH = $(MOZ_SRC)\mozilla\sun-java\classsrc11;$(DEFAULT_JAVA_SOURCEPATH)
|
||||
JAVAC_ZIP=$(JAVA_HOME)\lib\classes.zip
|
||||
JAVAC_CLASSPATH=$(JAVAC_ZIP)$(PATH_SEPARATOR)$(JAVA_DESTPATH)$(PATH_SEPARATOR)$(JAVA_SOURCEPATH)
|
||||
|
||||
|
||||
JAVA=$(JDKHOME)\bin\java
|
||||
JAVAH=$(JDKHOME)\bin\JAVAH
|
||||
JAVAH_FLAGS=-jni -classpath $(JAVAC_CLASSPATH)
|
||||
|
||||
134
mozilla/java/config/outofdate.pl
Normal file
134
mozilla/java/config/outofdate.pl
Normal file
@@ -0,0 +1,134 @@
|
||||
#!perl
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
|
||||
#
|
||||
#Input: [-d dir] foo1.java foo2.java
|
||||
#Compares with: foo1.class foo2.class (if -d specified, checks in 'dir',
|
||||
# otherwise assumes .class files in same directory as .java files)
|
||||
#Returns: list of input arguments which are newer than corresponding class
|
||||
#files (non-existant class files are considered to be real old :-)
|
||||
#
|
||||
|
||||
$found = 1;
|
||||
|
||||
# GLOBALS
|
||||
$SEP = 0; # the paltform independent path separator
|
||||
$CFG = 0; # the value of the -cfg flag
|
||||
|
||||
# determine the path separator
|
||||
$_ = $ENV{"PATH"};
|
||||
if (m|/|) {
|
||||
$SEP = "/";
|
||||
}
|
||||
else {
|
||||
$SEP = "\\";
|
||||
}
|
||||
|
||||
if ($ARGV[0] eq '-d') {
|
||||
$classdir = $ARGV[1];
|
||||
$classdir .= $SEP;
|
||||
shift;
|
||||
shift;
|
||||
} else {
|
||||
$classdir = "." . $SEP;
|
||||
}
|
||||
|
||||
# if -cfg is specified, print out the contents of the cfg file to stdout
|
||||
if ($ARGV[0] eq '-cfg') {
|
||||
$CFG = $ARGV[1];
|
||||
shift;
|
||||
shift;
|
||||
}
|
||||
|
||||
$_ = $ARGV[0];
|
||||
if (m/\*.java/) {
|
||||
# Account for the fact that the shell didn't expand *.java by doing it
|
||||
# manually.
|
||||
&manuallyExpandArgument("java");
|
||||
}
|
||||
|
||||
$printFile = 0;
|
||||
|
||||
foreach $filename (@ARGV) {
|
||||
$classfilename = $classdir;
|
||||
$classfilename .= $filename;
|
||||
$classfilename =~ s/.java$/.class/;
|
||||
# workaround to only build sun/io/* classes when necessary
|
||||
# change the pathname of target file to be consistent
|
||||
# with sun/io subdirectories
|
||||
#
|
||||
# sun/io was always getting rebuilt because the java files
|
||||
# were split into subdirectories, but the package names
|
||||
# remained the same. This was confusing outofdate.pl
|
||||
#
|
||||
$classfilename =~ s/sun\/io\/extended.\//sun\/io\//;
|
||||
$classfilename =~ s/\.\.\/\.\.\/sun-java\/classsrc\///;
|
||||
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
|
||||
$ctime,$blksize,$blocks) = stat($filename);
|
||||
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$classmtime,
|
||||
$ctime,$blksize,$blocks) = stat($classfilename);
|
||||
# print $filename, " ", $mtime, ", ", $classfilename, " ", $classmtime, "\n";
|
||||
if ($mtime > $classmtime) {
|
||||
|
||||
# Only print the file header if we actually have some files to
|
||||
# compile.
|
||||
if (!$printFile) {
|
||||
$printFile = 1;
|
||||
&printFile($CFG);
|
||||
}
|
||||
print $filename, " ";
|
||||
$found = 0;
|
||||
}
|
||||
}
|
||||
|
||||
print "\n";
|
||||
|
||||
# push onto $ARG array all filenames with extension $ext
|
||||
|
||||
# @param ext the extension of the file
|
||||
|
||||
sub manuallyExpandArgument {
|
||||
local($ext) = @_;
|
||||
$ext = "\." . $ext; # put it in regexp
|
||||
|
||||
$result = opendir(DIR, ".");
|
||||
|
||||
@allfiles = grep(/$ext/, readdir(DIR));
|
||||
$i = 0;
|
||||
foreach $file (@allfiles) {
|
||||
#skip emacs save files
|
||||
$_ = $file;
|
||||
if (!/~/) {
|
||||
$ARGV[$i++] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub printFile {
|
||||
local($file) = @_;
|
||||
|
||||
$result = open(CFG, $file);
|
||||
while (<CFG>) {
|
||||
chop;
|
||||
print $_;
|
||||
}
|
||||
}
|
||||
10
mozilla/java/dom/DOMAccessor.java.patch
Normal file
10
mozilla/java/dom/DOMAccessor.java.patch
Normal file
@@ -0,0 +1,10 @@
|
||||
Index: DOMAccessor.java
|
||||
===================================================================
|
||||
RCS file: /cvsroot/mozilla/java/dom/classes/org/mozilla/dom/DOMAccessor.java,v
|
||||
retrieving revision 1.2
|
||||
diff -r1.2 DOMAccessor.java
|
||||
31a32,33
|
||||
> import org.mozilla.dom.util.GenericDocLoadListener;
|
||||
>
|
||||
38a41
|
||||
> addDocumentLoadListener(new GenericDocLoadListener("JavaDOM"));
|
||||
30
mozilla/java/dom/Makefile
Normal file
30
mozilla/java/dom/Makefile
Normal file
@@ -0,0 +1,30 @@
|
||||
#!gmake
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ../..
|
||||
topsrcdir = ../..
|
||||
VPATH = .
|
||||
srcdir = .
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
DIRS = classes jni src
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
30
mozilla/java/dom/Makefile.in
Normal file
30
mozilla/java/dom/Makefile.in
Normal file
@@ -0,0 +1,30 @@
|
||||
#!gmake
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ../..
|
||||
topsrcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
DIRS = classes src jni
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
153
mozilla/java/dom/README
Normal file
153
mozilla/java/dom/README
Normal file
@@ -0,0 +1,153 @@
|
||||
|
||||
Sources
|
||||
=======
|
||||
|
||||
The sources are located in mozilla/java/dom.
|
||||
Subdirectories
|
||||
|
||||
classes
|
||||
jni
|
||||
src
|
||||
tests
|
||||
|
||||
contain Java sources, Java native methods implementation,
|
||||
native c++ code and Java DOM API tests respectively.
|
||||
|
||||
Note:
|
||||
Sources that work with mozilla PR1 and earlier
|
||||
versions should be checked out using DOM_PR1 tag.
|
||||
|
||||
No tags are needed for the sources that work with
|
||||
the latest mozilla tree.
|
||||
|
||||
Building
|
||||
========
|
||||
|
||||
Requirenments:
|
||||
--------------
|
||||
Current mozilla build
|
||||
JDK1.2 or JDK1.3
|
||||
Perl 5 must be in your path
|
||||
JDKHOME environment variable set to your JDK dir
|
||||
CLASSPATH environment cvariable set to contain
|
||||
org.w3c.dom classes. The sources can be found at
|
||||
http://www.w3.org/TR/2000/CR-DOM-Level-2-20000307/java-binding.html
|
||||
(for mozilla PR1 and earlie versions)
|
||||
http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/java-binding.html
|
||||
(for the latest mozilla)
|
||||
|
||||
Solaris specific
|
||||
----------------
|
||||
Add following directories to LD_LIBRARY_PATH environment variable:
|
||||
$MOZILLA_FIVE_HOME
|
||||
$JDKHOME/jre/lib/$HOSTTYPE/native_threads
|
||||
$JDKHOME/jre/lib/$HOSTTYPE/classic
|
||||
$JDKHOME/jre/lib/$HOSTTYPE/
|
||||
|
||||
goto mozilla/java/dom directory and type "gmake"
|
||||
|
||||
|
||||
Windows NT specific
|
||||
-------------------
|
||||
To enable OJI usage set environment variable JAVA_DOM_OJI_ENABLE=1
|
||||
Add following directories to PATH environment variable:
|
||||
%MOZILLA_FIVE_HOME%
|
||||
%JDKHOME%\jre\bin\classic (only in case you don't use OJI)
|
||||
|
||||
goto mozilla/java/dom directory and type "nmake /f makefile.win"
|
||||
|
||||
|
||||
Using the Java DOM API
|
||||
======================
|
||||
|
||||
A Java component obtains a org.w3c.dom.Document by registering for
|
||||
Document load notifications. The Document is passed in along with the
|
||||
notifications. The preferred way for a Java component to register for
|
||||
Document load notifications is to register via the DOMAccessor class.
|
||||
|
||||
However, this is possible only if OJI usage is enabled. This works
|
||||
on Windows NT platform.
|
||||
|
||||
On Solaris currently the nsJavaDOM component instantiates its own JVM.
|
||||
When an OJI-compatible JVM is available, we will move over to using it.
|
||||
So, one has to apply two patches to
|
||||
|
||||
mozilla/webshell/src/nsWebShell.cpp
|
||||
mozilla/java/dom/classes/org/mozilla/dom/DOMAccessor.java
|
||||
|
||||
They can be found at mozilla/java/dom directory.
|
||||
The first one inits nsJavaDOM component and adds it as a
|
||||
document load observer listener.
|
||||
|
||||
The second one registers a document load listener via DOMAccessor.
|
||||
Note:
|
||||
any class that implements the DocumentLoadListener interface may
|
||||
stand for GenericDocLoadListener.
|
||||
|
||||
After applying a patch to nsWebShell.cpp edit
|
||||
mozilla/webshell/src/Makefile.in to add -DJAVA_DOM to the list of
|
||||
defines. Then do a gmake in this directory.
|
||||
|
||||
After applying a patch to DOMAccessor.java go to mozilla/java/dom/classes
|
||||
and do a gmake. No changes in makefiles are needed.
|
||||
|
||||
You can find examples of Java DOM API usage in
|
||||
|
||||
mozilla/java/dom/classes/org/mozilla/dom/util
|
||||
mozilla/java/dom/tests/src/applets
|
||||
|
||||
|
||||
DOM2 events
|
||||
------------
|
||||
|
||||
At the moment all DOM2 event-related interfaces are present
|
||||
however they are not fully implemented yet
|
||||
because Mozilla's core DOM does not support DOM2 events fully.
|
||||
Consequences:
|
||||
- some methods throws OperationUnsupportedException()
|
||||
|
||||
The basic implementation architecture is following:
|
||||
- NodeImpl is extended to support EventTarget interface
|
||||
- for every addEventListener call special NativeDOMProxyListener object is
|
||||
created and is registered with Mozilla's DOM
|
||||
It's task is to propagate event notifications from Mozilla's DOM
|
||||
to target Java EventListener
|
||||
- In order to sucessfully unregister EventListeners we need to
|
||||
save association between java EventListener and corresponding
|
||||
NativeDOMProxyListener object. This is done by storing such
|
||||
associations Vector at NodeImpl
|
||||
- javaDOMEventsGlobals class is used much like javaDOMGlobals for caching
|
||||
(this code may be moved to javaDOMGlobals)
|
||||
|
||||
NSPR Logging
|
||||
------------
|
||||
|
||||
The NSPR Log module name is javadom. For instructions on how to enable
|
||||
logging, see dist/include/prlog.h
|
||||
|
||||
|
||||
Debug output
|
||||
------------
|
||||
|
||||
The debug build of the Java DOM API creates the JVM with the verbose
|
||||
and the verboseGC options turned on, to help in debugging. It also
|
||||
creates two files in the current working directory, dom-java.txt and
|
||||
dom-cpp.txt, which are simple dumps of the DOM, as printed from C++
|
||||
and from Java. The two should be identical. The code to write these
|
||||
files is, essentially, my regression test. Feel free to add to it.
|
||||
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
Currently tested on Solaris 7 only with Java 2 SDK 1.2.1. egcs-2.91.66,
|
||||
Sun Workshop C++ 4.2 and 5.0 have been know to compile this code
|
||||
fine. gcc-2.8.1 does *not* work. I have not used anything
|
||||
Java2-specific, and it works with JDK1.1.x too (I have been using JDK
|
||||
1.1.6 too).
|
||||
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
I highly recommend reading Sheng Liang's new JNI book.
|
||||
25
mozilla/java/dom/TODO
Normal file
25
mozilla/java/dom/TODO
Normal file
@@ -0,0 +1,25 @@
|
||||
o Convert to using IDL and GenericFactories. Once support for
|
||||
ComponentLoaders is implemented in xpcom, use that to load our
|
||||
component.
|
||||
|
||||
[5d]
|
||||
|
||||
o Use OJI to obtain the JVM.
|
||||
|
||||
[5d. Awaiting OJI availability]
|
||||
|
||||
o i18n the API
|
||||
|
||||
o Use nsISupportsProxies to work around thread
|
||||
limitations. This will mean writing an IDL for nsIJavaDOM.h, but
|
||||
that sould be trivial. Dcumentation for nsISupportsProxies is
|
||||
available at
|
||||
http://www.mozilla.org/projects/xpcom/Proxies.html.
|
||||
|
||||
[2w. Assigned. Contact: Sergey Lunegov <lsv@sparc.spb.su>]
|
||||
|
||||
o Investigate the possibility of writing a tool that can generate the
|
||||
JNI code from idl. This is the only practical way to implement the
|
||||
HTML DOM (because it is too big to hand-code).
|
||||
|
||||
[4w+]
|
||||
42
mozilla/java/dom/classes/Makefile
Normal file
42
mozilla/java/dom/classes/Makefile
Normal file
@@ -0,0 +1,42 @@
|
||||
#!gmake
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ../../..
|
||||
topsrcdir = ../../..
|
||||
VPATH = .
|
||||
srcdir = .
|
||||
|
||||
IGNORE_MANIFEST=1
|
||||
JAVA_OR_NSJVM=1
|
||||
NO_CAFE=1
|
||||
|
||||
JDIRS = org/mozilla/dom \
|
||||
org/mozilla/dom/events \
|
||||
org/mozilla/dom/util \
|
||||
$(NULL)
|
||||
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
JAVAC_PROG = $(JDKHOME)/bin/javac
|
||||
JAVAC_FLAGS = -classpath $(CLASSPATH):$(JAVA_DESTPATH) -d $(JAVA_DESTPATH)
|
||||
JAVAC = $(JAVAC_PROG) $(JAVAC_FLAGS)
|
||||
|
||||
42
mozilla/java/dom/classes/Makefile.in
Normal file
42
mozilla/java/dom/classes/Makefile.in
Normal file
@@ -0,0 +1,42 @@
|
||||
#!gmake
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (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.mozilla.org/NPL/
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
|
||||
IGNORE_MANIFEST=1
|
||||
JAVA_OR_NSJVM=1
|
||||
NO_CAFE=1
|
||||
|
||||
JDIRS = org/mozilla/dom \
|
||||
org/mozilla/dom/events \
|
||||
org/mozilla/dom/util \
|
||||
$(NULL)
|
||||
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
JAVAC_PROG = $(JDKHOME)/bin/javac
|
||||
JAVAC_FLAGS = -classpath $(CLASSPATH) -d $(JAVA_DESTPATH)
|
||||
JAVAC = $(JAVAC_PROG) $(JAVAC_FLAGS)
|
||||
|
||||
37
mozilla/java/dom/classes/makefile.win
Normal file
37
mozilla/java/dom/classes/makefile.win
Normal file
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
IGNORE_MANIFEST=1
|
||||
DEPTH = ..\..\..
|
||||
|
||||
JAVA_OR_NSJVM=1
|
||||
NO_CAFE=1
|
||||
|
||||
include <$(DEPTH)\config\config.mak>
|
||||
|
||||
JDIRS = org\mozilla\dom \
|
||||
org\mozilla\dom\events \
|
||||
org\mozilla\dom\util \
|
||||
$(NULL)
|
||||
|
||||
JAVAC_PROG=$(JDKHOME)\bin\javac
|
||||
JAVAC_FLAGS=-classpath $(CLASSPATH);$(JAVA_DESTPATH) -d $(JAVA_DESTPATH)
|
||||
include <$(DEPTH)\config\javarules.mak>
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
43
mozilla/java/dom/classes/org/mozilla/dom/AttrImpl.java
Normal file
43
mozilla/java/dom/classes/org/mozilla/dom/AttrImpl.java
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
public class AttrImpl extends NodeImpl implements Attr {
|
||||
|
||||
// instantiated from JNI or Document.createAttribute()
|
||||
private AttrImpl() {}
|
||||
|
||||
public native String getName();
|
||||
public native boolean getSpecified();
|
||||
public native String getValue();
|
||||
public native void setValue(String value);
|
||||
|
||||
/**
|
||||
* The <code>Element</code> node this attribute is attached to or
|
||||
* <code>null</code> if this attribute is not in use.
|
||||
* @since DOM Level 2
|
||||
*/
|
||||
public native Element getOwnerElement();
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.CDATASection;
|
||||
|
||||
public class CDATASectionImpl extends TextImpl implements CDATASection {
|
||||
|
||||
// instantiated from JNI or Document.createCDATASection()
|
||||
private CDATASectionImpl() {}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.CharacterData;
|
||||
|
||||
public class CharacterDataImpl extends NodeImpl implements CharacterData {
|
||||
|
||||
// instantiated from JNI only
|
||||
protected CharacterDataImpl() {}
|
||||
|
||||
public native void appendData(String arg);
|
||||
public native void deleteData(int offset, int count);
|
||||
public native String getData();
|
||||
public native int getLength();
|
||||
public native void insertData(int offset, String arg);
|
||||
public native void replaceData(int offset, int count, String arg);
|
||||
public native void setData(String data);
|
||||
public native String substringData(int offset, int count);
|
||||
}
|
||||
30
mozilla/java/dom/classes/org/mozilla/dom/CommentImpl.java
Normal file
30
mozilla/java/dom/classes/org/mozilla/dom/CommentImpl.java
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Comment;
|
||||
|
||||
public class CommentImpl extends CharacterDataImpl implements Comment {
|
||||
|
||||
// instantiated from JNI or Document.createComment()
|
||||
private CommentImpl() {}
|
||||
}
|
||||
203
mozilla/java/dom/classes/org/mozilla/dom/DOMAccessor.java
Normal file
203
mozilla/java/dom/classes/org/mozilla/dom/DOMAccessor.java
Normal file
@@ -0,0 +1,203 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
* W3C® IPR SOFTWARE NOTICE
|
||||
|
||||
* Copyright © 1994-2000 World Wide Web Consortium, (Massachusetts
|
||||
* Institute of Technology, Institut National de Recherche en
|
||||
* Informatique et en Automatique, Keio University). All Rights
|
||||
* Reserved. http://www.w3.org/Consortium/Legal/
|
||||
|
||||
* This W3C work (including software, documents, or other related items) is
|
||||
* being provided by the copyright holders under the following
|
||||
* license. By obtaining, using and/or copying this work, you (the
|
||||
* licensee) agree that you have read, understood, and will comply with
|
||||
* the following terms and conditions:
|
||||
|
||||
* Permission to use, copy, and modify this software and its documentation,
|
||||
* with or without modification, for any purpose and without fee or
|
||||
* royalty is hereby granted, provided that you include the following on
|
||||
* ALL copies of the software and documentation or portions thereof,
|
||||
* including modifications, that you make:
|
||||
|
||||
* The full text of this NOTICE in a location viewable to users of the
|
||||
* redistributed or derivative work.
|
||||
|
||||
* Any pre-existing intellectual property disclaimers, notices, or terms
|
||||
* and conditions. If none exist, a short notice of the following form
|
||||
* (hypertext is preferred, text is permitted) should be used within the
|
||||
* body of any redistributed or derivative code: "Copyright ©
|
||||
* [$date-of-software] World Wide Web Consortium, (Massachusetts
|
||||
* Institute of Technology, Institut National de Recherche en
|
||||
* Informatique et en Automatique, Keio University). All Rights
|
||||
* Reserved. http://www.w3.org/Consortium/Legal/"
|
||||
|
||||
* Notice of any changes or modifications to the W3C files, including
|
||||
* the date changes were made. (We recommend you provide URIs to the
|
||||
* location from which the code is derived.)
|
||||
|
||||
* THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
|
||||
* HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR
|
||||
* FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
|
||||
* DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
|
||||
* TRADEMARKS OR OTHER RIGHTS.
|
||||
|
||||
* COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE
|
||||
* SOFTWARE OR DOCUMENTATION.
|
||||
|
||||
* The name and trademarks of copyright holders may NOT be used in
|
||||
* advertising or publicity pertaining to the software without specific,
|
||||
* written prior permission. Title to copyright in this software and any
|
||||
* associated documentation will at all times remain with copyright
|
||||
* holders.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import java.util.Vector;
|
||||
import java.util.Enumeration;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import java.security.AccessController;
|
||||
|
||||
public final class DOMAccessor {
|
||||
|
||||
private static Vector documentLoadListeners = new Vector();
|
||||
private static JavaDOMPermission permission = new JavaDOMPermission("JavaDOM");
|
||||
|
||||
static {
|
||||
System.loadLibrary("javadomjni");
|
||||
}
|
||||
|
||||
private void DOMAccessorImpl() {}
|
||||
|
||||
private static native void register();
|
||||
private static native void unregister();
|
||||
private static native Node getNodeByHandle(long p);
|
||||
private static native void doGC();
|
||||
|
||||
public static native void initialize();
|
||||
|
||||
public static synchronized void
|
||||
addDocumentLoadListener(DocumentLoadListener listener) {
|
||||
if (documentLoadListeners.size() == 0) {
|
||||
register();
|
||||
}
|
||||
documentLoadListeners.addElement(listener);
|
||||
}
|
||||
|
||||
public static synchronized void
|
||||
removeDocumentLoadListener(DocumentLoadListener listener) {
|
||||
|
||||
documentLoadListeners.removeElement(listener);
|
||||
if (documentLoadListeners.size() == 0) {
|
||||
unregister();
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void
|
||||
startURLLoad(String url, String contentType, long p_doc) {
|
||||
|
||||
AccessController.checkPermission(permission);
|
||||
for (Enumeration e = documentLoadListeners.elements();
|
||||
e.hasMoreElements();) {
|
||||
DocumentLoadListener listener =
|
||||
(DocumentLoadListener) e.nextElement();
|
||||
listener.startURLLoad(url, contentType, (Document)getNodeByHandle(p_doc));
|
||||
}
|
||||
doGC();
|
||||
}
|
||||
|
||||
public static synchronized void
|
||||
endURLLoad(String url, int status, long p_doc) {
|
||||
|
||||
AccessController.checkPermission(permission);
|
||||
for (Enumeration e = documentLoadListeners.elements();
|
||||
e.hasMoreElements();) {
|
||||
DocumentLoadListener listener =
|
||||
(DocumentLoadListener) e.nextElement();
|
||||
listener.endURLLoad(url, status, (Document)getNodeByHandle(p_doc));
|
||||
}
|
||||
doGC();
|
||||
}
|
||||
|
||||
public static synchronized void
|
||||
progressURLLoad(String url, int progress, int progressMax,
|
||||
long p_doc) {
|
||||
|
||||
AccessController.checkPermission(permission);
|
||||
for (Enumeration e = documentLoadListeners.elements();
|
||||
e.hasMoreElements();) {
|
||||
DocumentLoadListener listener =
|
||||
(DocumentLoadListener) e.nextElement();
|
||||
listener.progressURLLoad(url, progress, progressMax, (Document)getNodeByHandle(p_doc));
|
||||
}
|
||||
doGC();
|
||||
}
|
||||
|
||||
public static synchronized void
|
||||
statusURLLoad(String url, String message, long p_doc) {
|
||||
|
||||
AccessController.checkPermission(permission);
|
||||
for (Enumeration e = documentLoadListeners.elements();
|
||||
e.hasMoreElements();) {
|
||||
DocumentLoadListener listener =
|
||||
(DocumentLoadListener) e.nextElement();
|
||||
listener.statusURLLoad(url, message, (Document)getNodeByHandle(p_doc));
|
||||
}
|
||||
doGC();
|
||||
}
|
||||
|
||||
|
||||
public static synchronized void
|
||||
startDocumentLoad(String url) {
|
||||
|
||||
AccessController.checkPermission(permission);
|
||||
for (Enumeration e = documentLoadListeners.elements();
|
||||
e.hasMoreElements();) {
|
||||
DocumentLoadListener listener =
|
||||
(DocumentLoadListener) e.nextElement();
|
||||
listener.startDocumentLoad(url);
|
||||
}
|
||||
doGC();
|
||||
}
|
||||
|
||||
public static synchronized void
|
||||
endDocumentLoad(String url, int status, long p_doc) {
|
||||
|
||||
AccessController.checkPermission(permission);
|
||||
for (Enumeration e = documentLoadListeners.elements();
|
||||
e.hasMoreElements();) {
|
||||
DocumentLoadListener listener =
|
||||
(DocumentLoadListener) e.nextElement();
|
||||
listener.endDocumentLoad(url, status, (Document)getNodeByHandle(p_doc));
|
||||
}
|
||||
doGC();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
public class DOMExceptionImpl extends DOMException
|
||||
{
|
||||
// instantiated from JNI only
|
||||
private DOMExceptionImpl(short code, String message) {
|
||||
super(code, message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.DOMImplementation;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
public class DOMImplementationImpl implements DOMImplementation {
|
||||
|
||||
private long p_nsIDOMDOMImplementation = 0;
|
||||
|
||||
// instantiated from JNI only
|
||||
private DOMImplementationImpl() {}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (!(o instanceof NodeListImpl))
|
||||
return false;
|
||||
else
|
||||
return (XPCOM_equals(o));
|
||||
}
|
||||
|
||||
public int hashCode(){
|
||||
return XPCOM_hashCode();
|
||||
}
|
||||
|
||||
public native boolean hasFeature(String feature, String version);
|
||||
|
||||
protected native void finalize();
|
||||
|
||||
private native boolean XPCOM_equals(Object o);
|
||||
private native int XPCOM_hashCode();
|
||||
|
||||
//since DOM2
|
||||
public native DocumentType createDocumentType(String qualifiedName,
|
||||
String publicID,
|
||||
String systemID);
|
||||
|
||||
public native Document createDocument(String namespaceURI,
|
||||
String qualifiedName,
|
||||
DocumentType doctype);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.DocumentFragment;
|
||||
|
||||
public class DocumentFragmentImpl extends NodeImpl implements DocumentFragment {
|
||||
// instantiated from JNI or Document.createDocumentFragment()
|
||||
private DocumentFragmentImpl() {}
|
||||
}
|
||||
78
mozilla/java/dom/classes/org/mozilla/dom/DocumentImpl.java
Normal file
78
mozilla/java/dom/classes/org/mozilla/dom/DocumentImpl.java
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.CDATASection;
|
||||
import org.w3c.dom.Comment;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentFragment;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.EntityReference;
|
||||
import org.w3c.dom.ProcessingInstruction;
|
||||
import org.w3c.dom.Text;
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.DOMImplementation;
|
||||
import org.w3c.dom.events.DocumentEvent;
|
||||
import org.w3c.dom.events.Event;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
public class DocumentImpl extends NodeImpl implements Document, DocumentEvent {
|
||||
|
||||
// instantiated from JNI only
|
||||
private DocumentImpl() {}
|
||||
|
||||
public native Attr createAttribute(String name);
|
||||
public native CDATASection createCDATASection(String data);
|
||||
public native Comment createComment(String data);
|
||||
public native DocumentFragment createDocumentFragment();
|
||||
public native Element createElement(String tagName);
|
||||
public native EntityReference createEntityReference(String name);
|
||||
public native ProcessingInstruction
|
||||
createProcessingInstruction(String target,
|
||||
String data);
|
||||
public native Text createTextNode(String data);
|
||||
|
||||
public native DocumentType getDoctype();
|
||||
public native Element getDocumentElement();
|
||||
public native NodeList getElementsByTagName(String tagName);
|
||||
public native DOMImplementation getImplementation();
|
||||
public native Event createEvent(String type);
|
||||
public native NodeList getElementsByTagNameNS(String namespaceURI, String localName);
|
||||
public native Element getElementById(String elementId);
|
||||
|
||||
public Node importNode(Node importedNode, boolean deep) throws DOMException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public Element createElementNS(String namespaceURI, String qualifiedName)
|
||||
throws DOMException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public Attr createAttributeNS(String namespaceURI, String qualifiedName)
|
||||
throws DOMException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
|
||||
public interface DocumentLoadListener {
|
||||
|
||||
public void startURLLoad(String url, String contentType, Document doc);
|
||||
public void endURLLoad(String url, int status, Document doc);
|
||||
public void progressURLLoad(String url, int progress, int progressMax,
|
||||
Document doc);
|
||||
public void statusURLLoad(String url, String message, Document doc);
|
||||
|
||||
public void startDocumentLoad(String url);
|
||||
public void endDocumentLoad(String url, int status, Document doc);
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
|
||||
public class DocumentTypeImpl extends NodeImpl implements DocumentType {
|
||||
|
||||
// instantiated from JNI only
|
||||
private DocumentTypeImpl() {}
|
||||
|
||||
public native String getName();
|
||||
public native NamedNodeMap getEntities();
|
||||
public native NamedNodeMap getNotations();
|
||||
|
||||
//since DOM level 2
|
||||
public native String getPublicId();
|
||||
public native String getSystemId();
|
||||
public native String getInternalSubset();
|
||||
}
|
||||
53
mozilla/java/dom/classes/org/mozilla/dom/ElementImpl.java
Normal file
53
mozilla/java/dom/classes/org/mozilla/dom/ElementImpl.java
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Attr;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
public class ElementImpl extends NodeImpl implements Element {
|
||||
|
||||
// instantiated from JNI or Document.createElement()
|
||||
private ElementImpl() {}
|
||||
|
||||
public native String getAttribute(String name);
|
||||
public native Attr getAttributeNode(String name);
|
||||
public native NodeList getElementsByTagName(String name);
|
||||
public native String getTagName();
|
||||
public native void normalize();
|
||||
public native void removeAttribute(String name);
|
||||
public native Attr removeAttributeNode(Attr oldAttr);
|
||||
public native void setAttribute(String name, String value);
|
||||
public native Attr setAttributeNode(Attr newAttr);
|
||||
|
||||
//since DOM2
|
||||
public native String getAttributeNS(String namespaceURI, String localName);
|
||||
public native void setAttributeNS(String namespaceURI, String qualifiedName, String value);
|
||||
public native void removeAttributeNS(String namespacURI, String localName);
|
||||
public native Attr getAttributeNodeNS(String namespaceURI, String localName);
|
||||
public native Attr setAttributeNodeNS(Attr newAttr);
|
||||
public native NodeList getElementsByTagNameNS(String namespaceURI, String localName);
|
||||
public native boolean hasAttribute(String name);
|
||||
public native boolean hasAttributeNS(String namespaceURI, String localName);
|
||||
}
|
||||
34
mozilla/java/dom/classes/org/mozilla/dom/EntityImpl.java
Normal file
34
mozilla/java/dom/classes/org/mozilla/dom/EntityImpl.java
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Entity;
|
||||
|
||||
public class EntityImpl extends NodeImpl implements Entity {
|
||||
|
||||
// instantiated from JNI only
|
||||
private EntityImpl() {}
|
||||
|
||||
public native String getPublicId();
|
||||
public native String getSystemId();
|
||||
public native String getNotationName();
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.EntityReference;
|
||||
|
||||
public class EntityReferenceImpl extends NodeImpl implements EntityReference {
|
||||
|
||||
// instantiated from JNI or Document.createEntityReference()
|
||||
private EntityReferenceImpl() {}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import java.security.BasicPermission;
|
||||
|
||||
public final class JavaDOMPermission extends BasicPermission {
|
||||
public JavaDOMPermission(String name)
|
||||
{
|
||||
super(name);
|
||||
}
|
||||
|
||||
public JavaDOMPermission(String name, String actions)
|
||||
{
|
||||
super(name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.DOMException;
|
||||
|
||||
public class NamedNodeMapImpl implements NamedNodeMap {
|
||||
|
||||
private long p_nsIDOMNamedNodeMap = 0;
|
||||
// instantiated from JNI only
|
||||
private NamedNodeMapImpl() {}
|
||||
|
||||
public native int getLength();
|
||||
public native Node getNamedItem(String name);
|
||||
public native Node item(int index);
|
||||
public native Node removeNamedItem(String name);
|
||||
public native Node setNamedItem(Node arg);
|
||||
|
||||
|
||||
public Node getNamedItemNS(String namespaceURI, String localName) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public Node removeNamedItemNS(String namespaceURI, String name)
|
||||
throws DOMException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public Node setNamedItemNS(Node arg)
|
||||
throws DOMException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
219
mozilla/java/dom/classes/org/mozilla/dom/NodeImpl.java
Normal file
219
mozilla/java/dom/classes/org/mozilla/dom/NodeImpl.java
Normal file
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.events.Event;
|
||||
import org.w3c.dom.events.EventTarget;
|
||||
import org.w3c.dom.events.EventListener;
|
||||
import java.util.Vector;
|
||||
import java.util.Hashtable;
|
||||
|
||||
class NodeEventListener {
|
||||
EventListener listener = null;
|
||||
String type = null;
|
||||
boolean useCapture = false;
|
||||
long nativeListener = 0;
|
||||
|
||||
NodeEventListener(String aType, EventListener aListener,
|
||||
boolean aUseCapture, long aNativeListener) {
|
||||
type = aType;
|
||||
listener = aListener;
|
||||
useCapture = aUseCapture;
|
||||
nativeListener = aNativeListener;
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (!(o instanceof NodeEventListener))
|
||||
return false;
|
||||
else {
|
||||
NodeEventListener n = (NodeEventListener) o;
|
||||
if ((useCapture != n.useCapture)
|
||||
|| (type == null) || !type.equals(n.type)
|
||||
|| (listener == null) || !listener.equals(n.listener))
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class NodeImpl implements Node, EventTarget {
|
||||
|
||||
/* The derived classes (Attr, CharacterData, DocumentFragment,
|
||||
Document, Element, EntityReference, NamedNodeMap,
|
||||
ProcessingInstruction) will also use this native pointer, since
|
||||
the nsIDOM coreDom classes follow the same hierarchy */
|
||||
|
||||
private long p_nsIDOMNode = 0;
|
||||
|
||||
// this map stores association of java DOM listeners
|
||||
// with corresponding native Nodes
|
||||
static private Hashtable javaDOMlisteners = new Hashtable();
|
||||
|
||||
// instantiated from JNI only
|
||||
protected NodeImpl() {}
|
||||
protected NodeImpl(long p) {
|
||||
p_nsIDOMNode = p;
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (!(o instanceof NodeImpl))
|
||||
return false;
|
||||
else
|
||||
return (XPCOM_equals(o));
|
||||
}
|
||||
|
||||
public int hashCode(){
|
||||
return XPCOM_hashCode();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "<" + getNodeName() +
|
||||
" t=" + nodeTypeString(getNodeType()) +
|
||||
" c=org.mozilla.dom.NodeImpl p=" +
|
||||
Long.toHexString(p_nsIDOMNode) + ">";
|
||||
}
|
||||
|
||||
private static String nodeTypeString(int type) {
|
||||
switch (type) {
|
||||
case Node.ELEMENT_NODE: return "ELEMENT";
|
||||
case Node.ATTRIBUTE_NODE: return "ATTRIBUTE";
|
||||
case Node.TEXT_NODE: return "TEXT";
|
||||
case Node.CDATA_SECTION_NODE: return "CDATA_SECTION";
|
||||
case Node.ENTITY_REFERENCE_NODE: return "ENTITY_REFERENCE";
|
||||
case Node.ENTITY_NODE: return "ENTITY";
|
||||
case Node.PROCESSING_INSTRUCTION_NODE: return "PROCESSING_INSTRUCTION";
|
||||
case Node.COMMENT_NODE: return "COMMENT";
|
||||
case Node.DOCUMENT_NODE: return "DOCUMENT";
|
||||
case Node.DOCUMENT_TYPE_NODE: return "DOCUMENT_TYPE";
|
||||
case Node.DOCUMENT_FRAGMENT_NODE: return "DOCUMENT_FRAGMENT";
|
||||
case Node.NOTATION_NODE: return "NOTATION";
|
||||
}
|
||||
return "ERROR";
|
||||
}
|
||||
|
||||
public native Node appendChild(Node newChild) throws DOMException;
|
||||
public native Node cloneNode(boolean deep);
|
||||
public native NamedNodeMap getAttributes();
|
||||
public native NodeList getChildNodes();
|
||||
public native Node getFirstChild();
|
||||
public native Node getLastChild();
|
||||
public native Node getNextSibling();
|
||||
public native String getNodeName();
|
||||
public native short getNodeType();
|
||||
public native String getNodeValue();
|
||||
public native Document getOwnerDocument();
|
||||
public native Node getParentNode();
|
||||
public native Node getPreviousSibling();
|
||||
public native boolean hasChildNodes();
|
||||
public native Node insertBefore(Node newChild, Node refChild) throws DOMException;
|
||||
public native Node removeChild(Node oldChild) throws DOMException;
|
||||
public native Node replaceChild(Node newChild, Node oldChild) throws DOMException;
|
||||
public native void setNodeValue(String nodeValue);
|
||||
|
||||
protected native void finalize();
|
||||
|
||||
private native boolean XPCOM_equals(Object o);
|
||||
private native int XPCOM_hashCode();
|
||||
|
||||
//since DOM level 2
|
||||
public native boolean supports(String feature, String version);
|
||||
public native String getNamespaceURI();
|
||||
public native String getPrefix();
|
||||
public native void setPrefix(String prefix);
|
||||
public native String getLocalName();
|
||||
|
||||
public void addEventListener(String type,
|
||||
EventListener listener,
|
||||
boolean useCapture) {
|
||||
|
||||
long nativeListener = addNativeEventListener(type, listener, useCapture);
|
||||
|
||||
Long lnode = new Long(p_nsIDOMNode);
|
||||
|
||||
Vector listeners;
|
||||
|
||||
//in conjunction with internal synchronization of Hashtable and Vector
|
||||
// this should be enough for safe concurrent access
|
||||
synchronized (javaDOMlisteners) {
|
||||
listeners = (Vector) javaDOMlisteners.get(lnode);
|
||||
|
||||
if (listeners == null) {
|
||||
listeners = new Vector();
|
||||
javaDOMlisteners.put(lnode, listeners);
|
||||
}
|
||||
}
|
||||
|
||||
if (nativeListener != 0) {
|
||||
|
||||
NodeEventListener l = new NodeEventListener(type,
|
||||
listener,
|
||||
useCapture,
|
||||
nativeListener);
|
||||
listeners.add(l);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeEventListener(String type,
|
||||
EventListener listener,
|
||||
boolean useCapture) {
|
||||
|
||||
Vector listeners = (Vector) javaDOMlisteners.get(new Long(p_nsIDOMNode));
|
||||
|
||||
if (listeners == null)
|
||||
return;
|
||||
|
||||
NodeEventListener l = new NodeEventListener(type,
|
||||
listener, useCapture, 0);
|
||||
|
||||
int idx = listeners.indexOf(l);
|
||||
|
||||
//if trying to remove non-existing listener then return
|
||||
if (idx == -1)
|
||||
return;
|
||||
|
||||
l = (NodeEventListener) listeners.remove(idx);
|
||||
|
||||
removeNativeEventListener(type, l.nativeListener, useCapture);
|
||||
}
|
||||
|
||||
public boolean dispatchEvent(Event evt) throws DOMException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
private native long addNativeEventListener(String type,
|
||||
EventListener listener,
|
||||
boolean useCapture);
|
||||
|
||||
private native void removeNativeEventListener(String type,
|
||||
long nativeListener,
|
||||
boolean useCapture);
|
||||
|
||||
public void normalize() {
|
||||
throw new UnsupportedOperationException();
|
||||
};
|
||||
}
|
||||
52
mozilla/java/dom/classes/org/mozilla/dom/NodeListImpl.java
Normal file
52
mozilla/java/dom/classes/org/mozilla/dom/NodeListImpl.java
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
public class NodeListImpl implements NodeList {
|
||||
|
||||
private long p_nsIDOMNodeList = 0;
|
||||
|
||||
// instantiated from JNI or Document.createAttribute()
|
||||
private NodeListImpl() {}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (!(o instanceof NodeListImpl))
|
||||
return false;
|
||||
else
|
||||
return (XPCOM_equals(o));
|
||||
}
|
||||
|
||||
public int hashCode(){
|
||||
return XPCOM_hashCode();
|
||||
}
|
||||
|
||||
public native int getLength();
|
||||
public native Node item(int index);
|
||||
|
||||
protected native void finalize();
|
||||
|
||||
private native boolean XPCOM_equals(Object o);
|
||||
private native int XPCOM_hashCode();
|
||||
}
|
||||
33
mozilla/java/dom/classes/org/mozilla/dom/NotationImpl.java
Normal file
33
mozilla/java/dom/classes/org/mozilla/dom/NotationImpl.java
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Notation;
|
||||
|
||||
public class NotationImpl extends NodeImpl implements Notation {
|
||||
|
||||
// instantiated from JNI only
|
||||
private NotationImpl() {}
|
||||
|
||||
public native String getPublicId();
|
||||
public native String getSystemId();
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.ProcessingInstruction;
|
||||
|
||||
public class ProcessingInstructionImpl extends NodeImpl implements ProcessingInstruction {
|
||||
|
||||
// instantiated from JNI or Document.createProcessingInstruction()
|
||||
private ProcessingInstructionImpl() {}
|
||||
|
||||
public native String getData();
|
||||
public native String getTarget();
|
||||
public native void setData(String data);
|
||||
}
|
||||
33
mozilla/java/dom/classes/org/mozilla/dom/TextImpl.java
Normal file
33
mozilla/java/dom/classes/org/mozilla/dom/TextImpl.java
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom;
|
||||
|
||||
import org.w3c.dom.Text;
|
||||
|
||||
public class TextImpl extends CharacterDataImpl implements Text {
|
||||
|
||||
// instantiated from JNI or Document.createTextNode()
|
||||
protected TextImpl() {}
|
||||
|
||||
public native Text splitText(int offset);
|
||||
}
|
||||
|
||||
151
mozilla/java/dom/classes/org/mozilla/dom/events/EventImpl.java
Normal file
151
mozilla/java/dom/classes/org/mozilla/dom/events/EventImpl.java
Normal file
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom.events;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.events.Event;
|
||||
import org.w3c.dom.events.EventTarget;
|
||||
|
||||
/**
|
||||
* The <code>Event</code> interface is used to provide contextual information
|
||||
* about an event to the handler processing the event. An object which
|
||||
* implements the <code>Event</code> interface is generally passed as the
|
||||
* first parameter to an event handler. More specific context information
|
||||
* is passed to event handlers by deriving additional interfaces from
|
||||
* <code>Event</code> which contain information directly relating to the type
|
||||
* of event they accompany. These derived interfaces are also implemented by
|
||||
* the object passed to the event listener.
|
||||
* @since DOM Level 2
|
||||
*/
|
||||
public class EventImpl implements Event {
|
||||
|
||||
protected long p_nsIDOMEvent = 0;
|
||||
|
||||
// instantiated from JNI only
|
||||
protected EventImpl() {}
|
||||
|
||||
public String toString() {
|
||||
return "<c=org.mozilla.dom.events.Event type=" + getType() +
|
||||
" target=" + getTarget() +
|
||||
" phase=" + getEventPhase() +
|
||||
" p=" + Long.toHexString(p_nsIDOMEvent) + ">";
|
||||
}
|
||||
|
||||
/**
|
||||
* The <code>type</code> property represents the event name as a string
|
||||
* property.
|
||||
*/
|
||||
public native String getType();
|
||||
|
||||
/**
|
||||
* The <code>target</code> property indicates the <code>EventTarget</code>
|
||||
* to which the event was originally dispatched.
|
||||
*/
|
||||
public native EventTarget getTarget();
|
||||
|
||||
/**
|
||||
* The <code>currentNode</code> property indicates the <code>Node</code>
|
||||
* whose <code>EventListener</code>s are currently being processed. This
|
||||
* is particularly useful during capturing and bubbling.
|
||||
*/
|
||||
public native EventTarget getCurrentTarget();
|
||||
|
||||
/**
|
||||
* The <code>eventPhase</code> property indicates which phase of event flow
|
||||
* is currently being evaluated.
|
||||
*/
|
||||
public native short getEventPhase();
|
||||
|
||||
/**
|
||||
* The <code>bubbles</code> property indicates whether or not an event is a
|
||||
* bubbling event. If the event can bubble the value is true, else the
|
||||
* value is false.
|
||||
*/
|
||||
public native boolean getBubbles();
|
||||
|
||||
/**
|
||||
* The <code>cancelable</code> property indicates whether or not an event
|
||||
* can have its default action prevented. If the default action can be
|
||||
* prevented the value is true, else the value is false.
|
||||
*/
|
||||
public native boolean getCancelable();
|
||||
|
||||
/**
|
||||
* The <code>preventBubble</code> method is used to end the bubbling phase
|
||||
* of event flow. If this method is called by any
|
||||
* <code>EventListener</code>s registered on the same
|
||||
* <code>EventTarget</code> during bubbling, the bubbling phase will cease
|
||||
* at that level and the event will not be propagated upward within the
|
||||
* tree.
|
||||
*/
|
||||
public native void preventBubble();
|
||||
|
||||
/**
|
||||
* The <code>preventCapture</code> method is used to end the capturing phase
|
||||
* of event flow. If this method is called by any
|
||||
* <code>EventListener</code>s registered on the same
|
||||
* <code>EventTarget</code> during capturing, the capturing phase will
|
||||
* cease at that level and the event will not be propagated any further
|
||||
* down.
|
||||
*/
|
||||
public native void preventCapture();
|
||||
|
||||
/**
|
||||
* If an event is cancelable, the <code>preventCapture</code> method is used
|
||||
* to signify that the event is to be canceled, meaning any default action
|
||||
* normally taken by the implementation as a result of the event will not
|
||||
* occur. If, during any stage of event flow, the
|
||||
* <code>preventDefault</code> method is called the event is canceled. Any
|
||||
* default action associated with the event will not occur. Calling this
|
||||
* method for a non-cancelable event has no effect. Once
|
||||
* <code>preventDefault</code> has been called it will remain in effect
|
||||
* throughout the remainder of the event's propagation.
|
||||
*/
|
||||
public native void preventDefault();
|
||||
|
||||
/**
|
||||
* The <code>stopPropagation</code> method is used prevent further
|
||||
* propagation of an event during event flow. If this method is called by
|
||||
* any <code>EventListener</code> the event will cease propagating
|
||||
* through the tree. The event will complete dispatch to all listeners
|
||||
* on the current <code>EventTarget</code> before event flow stops. This
|
||||
* method may be used during any stage of event flow.
|
||||
*/
|
||||
public native void stopPropagation();
|
||||
|
||||
/**
|
||||
*
|
||||
* @param eventTypeArg Specifies the event type. This type may be any event
|
||||
* type currently defined in this specification or a new event type. Any
|
||||
* new event type must not begin with any upper, lower, or mixed case
|
||||
* version of the string "DOM". This prefix is reserved for future DOM
|
||||
* event sets.
|
||||
* @param canBubbleArg Specifies whether or not the event can bubble.
|
||||
* @param cancelableArg Specifies whether or not the event's default action
|
||||
* can be prevented.
|
||||
*/
|
||||
public native void initEvent(String eventTypeArg,
|
||||
boolean canBubbleArg,
|
||||
boolean cancelableArg);
|
||||
|
||||
public native long getTimeStamp();
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom.events;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.views.AbstractView;
|
||||
import org.w3c.dom.events.MouseEvent;
|
||||
import org.w3c.dom.events.EventTarget;
|
||||
|
||||
/**
|
||||
* The <code>MouseEvent</code> interface provides specific contextual
|
||||
* information associated with Mouse events.
|
||||
* <p>The <code>detail</code> attribute inherited from <code>UIEvent</code>
|
||||
* indicates the number of times a mouse button has been pressed and released
|
||||
* over the same screen location during a user action. The attribute value
|
||||
* is 1 when the user begins this action and increments by 1 for each full
|
||||
* sequence of pressing and releasing. If the user moves the mouse between
|
||||
* the mousedown and mouseup the value will be set to 0, indicating that no
|
||||
* click is occurring.
|
||||
* @since DOM Level 2
|
||||
*/
|
||||
public class MouseEventImpl extends UIEventImpl implements MouseEvent {
|
||||
|
||||
// instantiated from JNI only
|
||||
private MouseEventImpl() {}
|
||||
|
||||
public String toString() {
|
||||
return "<c=org.mozilla.dom.events.mouseUIEvent type=" + getType() +
|
||||
" screen=(" + getScreenX() + "," + getScreenY() + ")" +
|
||||
" client=(" + getClientX() + "," + getClientY() + ")" +
|
||||
" mods=(" + getCtrlKey() + "," + getMetaKey() + "," + getShiftKey() + "," + getAltKey() + ")" +
|
||||
" button=" + getButton() +
|
||||
" target=" + getTarget() +
|
||||
" phase=" + getEventPhase() +
|
||||
" p=" + Long.toHexString(p_nsIDOMEvent) + ">";
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>screenX</code> indicates the horizontal coordinate at which the
|
||||
* event occurred in relative to the origin of the screen coordinate system.
|
||||
*/
|
||||
public native int getScreenX();
|
||||
|
||||
/**
|
||||
* <code>screenY</code> indicates the vertical coordinate at which the event
|
||||
* occurred relative to the origin of the screen coordinate system.
|
||||
*/
|
||||
public native int getScreenY();
|
||||
|
||||
/**
|
||||
* <code>clientX</code> indicates the horizontal coordinate at which the
|
||||
* event occurred relative to the DOM implementation's client area.
|
||||
*/
|
||||
public native int getClientX();
|
||||
|
||||
/**
|
||||
* <code>clientY</code> indicates the vertical coordinate at which the event
|
||||
* occurred relative to the DOM implementation's client area.
|
||||
*/
|
||||
public native int getClientY();
|
||||
|
||||
/**
|
||||
* <code>ctrlKey</code> indicates whether the 'ctrl' key was depressed
|
||||
* during the firing of the event.
|
||||
*/
|
||||
public native boolean getCtrlKey();
|
||||
|
||||
/**
|
||||
* <code>shiftKey</code> indicates whether the 'shift' key was depressed
|
||||
* during the firing of the event.
|
||||
*/
|
||||
public native boolean getShiftKey();
|
||||
|
||||
/**
|
||||
* <code>altKey</code> indicates whether the 'alt' key was depressed during
|
||||
* the firing of the event. On some platforms this key may map to an
|
||||
* alternative key name.
|
||||
*/
|
||||
public native boolean getAltKey();
|
||||
|
||||
/**
|
||||
* <code>metaKey</code> indicates whether the 'meta' key was depressed
|
||||
* during the firing of the event. On some platforms this key may map to
|
||||
* an alternative key name.
|
||||
*/
|
||||
public native boolean getMetaKey();
|
||||
|
||||
/**
|
||||
* During mouse events caused by the depression or release of a mouse
|
||||
* button, <code>button</code> is used to indicate which mouse button
|
||||
* changed state.
|
||||
*/
|
||||
public native short getButton();
|
||||
|
||||
/**
|
||||
* <code>relatedNode</code> is used to identify a secondary node related to
|
||||
* a UI event.
|
||||
*/
|
||||
public native EventTarget getRelatedTarget();
|
||||
|
||||
/**
|
||||
*
|
||||
* @param typeArg Specifies the event type.
|
||||
* @param canBubbleArg Specifies whether or not the event can bubble.
|
||||
* @param cancelableArg Specifies whether or not the event's default action
|
||||
* can be prevent.
|
||||
* @param viewArg Specifies the <code>Event</code>'s
|
||||
* <code>AbstractView</code>.
|
||||
* @param detailArg Specifies the <code>Event</code>'s mouse click count.
|
||||
* @param screenXArg Specifies the <code>Event</code>'s screen x coordinate
|
||||
* @param screenYArg Specifies the <code>Event</code>'s screen y coordinate
|
||||
* @param clientXArg Specifies the <code>Event</code>'s client x coordinate
|
||||
* @param clientYArg Specifies the <code>Event</code>'s client y coordinate
|
||||
* @param ctrlKeyArg Specifies whether or not control key was depressed
|
||||
* during the <code>Event</code>.
|
||||
* @param altKeyArg Specifies whether or not alt key was depressed during
|
||||
* the <code>Event</code>.
|
||||
* @param shiftKeyArg Specifies whether or not shift key was depressed
|
||||
* during the <code>Event</code>.
|
||||
* @param metaKeyArg Specifies whether or not meta key was depressed during
|
||||
* the <code>Event</code>.
|
||||
* @param buttonArg Specifies the <code>Event</code>'s mouse button.
|
||||
* @param relatedNodeArg Specifies the <code>Event</code>'s related Node.
|
||||
*/
|
||||
public native void initMouseEvent(String typeArg,
|
||||
boolean canBubbleArg,
|
||||
boolean cancelableArg,
|
||||
AbstractView viewArg,
|
||||
int detailArg,
|
||||
int screenXArg,
|
||||
int screenYArg,
|
||||
int clientXArg,
|
||||
int clientYArg,
|
||||
boolean ctrlKeyArg,
|
||||
boolean altKeyArg,
|
||||
boolean shiftKeyArg,
|
||||
boolean metaKeyArg,
|
||||
short buttonArg,
|
||||
EventTarget relatedTargetArg);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom.events;
|
||||
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.events.MutationEvent;
|
||||
import org.mozilla.dom.events.EventImpl;
|
||||
|
||||
public class MutationEventImpl extends EventImpl implements MutationEvent {
|
||||
/**
|
||||
* <code>relatedNode</code> is used to identify a secondary node related to
|
||||
* a mutation event. For example, if a mutation event is dispatched to a
|
||||
* node indicating that its parent has changed, the <code>relatedNode</code>
|
||||
* is the changed parent. If an event is instead dispatch to a subtree
|
||||
* indicating a node was changed within it, the <code>relatedNode</code> is
|
||||
* the changed node.
|
||||
*/
|
||||
public Node getRelatedNode() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>prevValue</code> indicates the previous value of text nodes and
|
||||
* attributes in attrModified and charDataModified events.
|
||||
*/
|
||||
public String getPrevValue() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>newValue</code> indicates the new value of text nodes and
|
||||
* attributes in attrModified and charDataModified events.
|
||||
*/
|
||||
public String getNewValue() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
/**
|
||||
* <code>attrName</code> indicates the changed attr in the attrModified
|
||||
* event.
|
||||
*/
|
||||
public String getAttrName() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param typeArg Specifies the event type.
|
||||
* @param canBubbleArg Specifies whether or not the event can bubble.
|
||||
* @param cancelableArg Specifies whether or not the event's default action
|
||||
* can be prevent.
|
||||
* @param relatedNodeArg Specifies the <code>Event</code>'s related Node
|
||||
* @param prevValueArg Specifies the <code>Event</code>'s
|
||||
* <code>prevValue</code> property
|
||||
* @param newValueArg Specifies the <code>Event</code>'s
|
||||
* <code>newValue</code> property
|
||||
* @param attrNameArg Specifies the <code>Event</code>'s
|
||||
* <code>attrName</code> property
|
||||
*/
|
||||
public void initMutationEvent(String typeArg,
|
||||
boolean canBubbleArg,
|
||||
boolean cancelableArg,
|
||||
Node relatedNodeArg,
|
||||
String prevValueArg,
|
||||
String newValueArg,
|
||||
String attrNameArg) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom.events;
|
||||
|
||||
import org.w3c.dom.events.UIEvent;
|
||||
import org.w3c.dom.views.AbstractView;
|
||||
import org.mozilla.dom.events.EventImpl;
|
||||
|
||||
/**
|
||||
* The <code>UIEvent</code> interface provides specific contextual
|
||||
* information associated with User Interface events.
|
||||
* @since DOM Level 2
|
||||
*/
|
||||
public class UIEventImpl extends EventImpl implements UIEvent {
|
||||
|
||||
// instantiated from JNI only
|
||||
protected UIEventImpl() {}
|
||||
|
||||
public String toString() {
|
||||
return "<c=org.mozilla.dom.events.UIEvent type=" + getType() +
|
||||
" target=" + getTarget() +
|
||||
" phase=" + getEventPhase() +
|
||||
" p=" + Long.toHexString(p_nsIDOMEvent) + ">";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The <code>view</code> attribute identifies the <code>AbstractView</code>
|
||||
* from which the event was generated.
|
||||
*/
|
||||
public native AbstractView getView();
|
||||
|
||||
/**
|
||||
* Specifies some detail information about the <code>Event</code>, depending
|
||||
* on the type of event.
|
||||
*/
|
||||
public native int getDetail();
|
||||
|
||||
/**
|
||||
*
|
||||
* @param typeArg Specifies the event type.
|
||||
* @param canBubbleArg Specifies whether or not the event can bubble.
|
||||
* @param cancelableArg Specifies whether or not the event's default action
|
||||
* can be prevent.
|
||||
* @param viewArg Specifies the <code>Event</code>'s
|
||||
* <code>AbstractView</code>.
|
||||
* @param detailArg Specifies the <code>Event</code>'s detail.
|
||||
*/
|
||||
public native void initUIEvent(String typeArg,
|
||||
boolean canBubbleArg,
|
||||
boolean cancelableArg,
|
||||
AbstractView viewArg,
|
||||
int detailArg);
|
||||
}
|
||||
|
||||
231
mozilla/java/dom/classes/org/mozilla/dom/util/DOMTreeDumper.java
Normal file
231
mozilla/java/dom/classes/org/mozilla/dom/util/DOMTreeDumper.java
Normal file
@@ -0,0 +1,231 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License
|
||||
* Version 1.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.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.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Sun Microsystems,
|
||||
* Inc. Portions created by Sun are Copyright (C) 1999 Sun Microsystems,
|
||||
* Inc. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Denis Sharypov <sdv@sparc.spb.su>
|
||||
*
|
||||
*/
|
||||
|
||||
package org.mozilla.dom.util;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.DocumentType;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
public class DOMTreeDumper {
|
||||
|
||||
private String name;
|
||||
private boolean debug;
|
||||
private PrintStream ps;
|
||||
private boolean inA;
|
||||
private final String[] endTagForbiddenNames = {"AREA",
|
||||
"BASE",
|
||||
"BASEFONT",
|
||||
"BR",
|
||||
"COL",
|
||||
"FRAME",
|
||||
"HR",
|
||||
"IMG",
|
||||
"INPUT",
|
||||
"ISINDEX",
|
||||
"LINK",
|
||||
"META",
|
||||
"PARAM"};
|
||||
|
||||
public DOMTreeDumper() {
|
||||
this("DOMTreeDumper", true);
|
||||
}
|
||||
|
||||
public DOMTreeDumper(boolean debug) {
|
||||
this("DOMTreeDumper", debug);
|
||||
}
|
||||
|
||||
public DOMTreeDumper(String name) {
|
||||
this(name, true);
|
||||
}
|
||||
|
||||
public DOMTreeDumper(String name, boolean debug) {
|
||||
this.name = name;
|
||||
this.debug = debug;
|
||||
}
|
||||
|
||||
private void dumpDocument(Document doc) {
|
||||
if (doc == null) return;
|
||||
Element element = doc.getDocumentElement();
|
||||
if (element == null) return;
|
||||
element.normalize();
|
||||
// DocumentType dt = doc.getDoctype();
|
||||
// dumpNode(dt);
|
||||
|
||||
dumpNode(element);
|
||||
ps.println();
|
||||
ps.flush();
|
||||
|
||||
element = null;
|
||||
doc = null;
|
||||
}
|
||||
|
||||
private void dumpNode(Node node) {
|
||||
dumpNode(node, false);
|
||||
}
|
||||
|
||||
private void dumpNode(Node node, boolean isMapNode) {
|
||||
if (node == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
int type = node.getNodeType();
|
||||
String name = node.getNodeName();
|
||||
String value = node.getNodeValue();
|
||||
|
||||
switch (type) {
|
||||
case Node.ELEMENT_NODE:
|
||||
if (name.equals("A")) inA = true;
|
||||
if (!(inA || name.equals("BR"))) {
|
||||
ps.println();
|
||||
}
|
||||
ps.print("<" + name);
|
||||
dumpAttributes(node);
|
||||
ps.print(">");
|
||||
dumpChildren(node);
|
||||
if (name.equals("A")) inA = false;
|
||||
if (!endTagForbidden(name)) {
|
||||
ps.print("</" + node.getNodeName() + ">");
|
||||
}
|
||||
break;
|
||||
case Node.ATTRIBUTE_NODE:
|
||||
ps.print(" " + name.toUpperCase() + "=\"" + value + "\"");
|
||||
break;
|
||||
case Node.TEXT_NODE:
|
||||
if (!node.getParentNode().getNodeName().equals("PRE")) {
|
||||
value = value.trim();
|
||||
}
|
||||
if (!value.equals("")) {
|
||||
if (!inA) {
|
||||
ps.println();
|
||||
}
|
||||
ps.print(canonicalize(value));
|
||||
}
|
||||
break;
|
||||
case Node.COMMENT_NODE:
|
||||
ps.print("\n<!--" + value + "-->");
|
||||
break;
|
||||
case Node.CDATA_SECTION_NODE:
|
||||
case Node.ENTITY_REFERENCE_NODE:
|
||||
case Node.ENTITY_NODE:
|
||||
case Node.PROCESSING_INSTRUCTION_NODE:
|
||||
case Node.DOCUMENT_NODE:
|
||||
case Node.DOCUMENT_TYPE_NODE:
|
||||
case Node.DOCUMENT_FRAGMENT_NODE:
|
||||
case Node.NOTATION_NODE:
|
||||
ps.println("\n<!-- NOT HANDLED: " + name +
|
||||
" value=" + value + " -->");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void dumpAttributes(Node node) {
|
||||
NamedNodeMap map = node.getAttributes();
|
||||
if (map == null) return;
|
||||
int length = map.getLength();
|
||||
for (int i=0; i < length; i++) {
|
||||
Node item = map.item(i);
|
||||
dumpNode(item, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void dumpChildren(Node node) {
|
||||
NodeList children = node.getChildNodes();
|
||||
int length = 0;
|
||||
boolean hasChildren = ((children != null) && ((length = children.getLength()) > 0));
|
||||
if (!hasChildren) {
|
||||
return;
|
||||
}
|
||||
for (int i=0; i < length; i++) {
|
||||
dumpNode(children.item(i), false);
|
||||
}
|
||||
if (!inA) {
|
||||
ps.println();
|
||||
}
|
||||
}
|
||||
|
||||
private String canonicalize(String str) {
|
||||
StringBuffer in = new StringBuffer(str);
|
||||
int length = in.length();
|
||||
StringBuffer out = new StringBuffer(length);
|
||||
char c;
|
||||
for (int i = 0; i < length; i++) {
|
||||
switch (c = in.charAt(i)) {
|
||||
case '&' :
|
||||
out.append("&");
|
||||
break;
|
||||
case '<':
|
||||
out.append("<");
|
||||
break;
|
||||
case '>':
|
||||
out.append(">");
|
||||
break;
|
||||
case '\u00A0':
|
||||
out.append(" ");
|
||||
break;
|
||||
default:
|
||||
out.append(c);
|
||||
}
|
||||
}
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
private boolean endTagForbidden(String name) {
|
||||
for (int i = 0; i < endTagForbiddenNames.length; i++) {
|
||||
if (name.equals(endTagForbiddenNames[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void dumpToFile(String fileName, Document doc) {
|
||||
try {
|
||||
FileOutputStream fos = new FileOutputStream(fileName);
|
||||
ps = new PrintStream(new BufferedOutputStream(fos, 1024));
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
return;
|
||||
}
|
||||
dbg("dumping to " + fileName);
|
||||
dumpDocument(doc);
|
||||
dbg("finished dumping...");
|
||||
}
|
||||
|
||||
public void dumpToStream(PrintStream ps, Document doc) {
|
||||
this.ps = ps;
|
||||
dbg("dumping to stream...");
|
||||
dumpDocument(doc);
|
||||
dbg("finished dumping...");
|
||||
}
|
||||
|
||||
private void dbg(String str) {
|
||||
if (debug) {
|
||||
System.out.println(name + ": " + str);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom.util;
|
||||
|
||||
import java.io.PrintStream;
|
||||
import org.w3c.dom.Document;
|
||||
import org.mozilla.dom.DocumentLoadListener;
|
||||
|
||||
public class GenericDocLoadListener implements DocumentLoadListener {
|
||||
|
||||
private String name;
|
||||
private PrintStream ps;
|
||||
|
||||
public GenericDocLoadListener() {
|
||||
this("GenericDocLoadListener",
|
||||
new PrintStream(System.out));
|
||||
}
|
||||
|
||||
public GenericDocLoadListener(String name) {
|
||||
this(name,
|
||||
new PrintStream(System.out));
|
||||
}
|
||||
|
||||
public GenericDocLoadListener(PrintStream ps) {
|
||||
this("GenericDocLoadListener", ps);
|
||||
}
|
||||
|
||||
public GenericDocLoadListener(String name, PrintStream ps) {
|
||||
this.name = name;
|
||||
this.ps = ps;
|
||||
}
|
||||
|
||||
public DocumentLoadListener getDocumentLoadListener() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public void startURLLoad(String url, String contentType, Document doc) {
|
||||
if (ps != null) {
|
||||
ps.println(name + " :start URL load - " +
|
||||
url.toString() + " " +
|
||||
contentType);
|
||||
}
|
||||
}
|
||||
|
||||
public void endURLLoad(String url, int status, Document doc) {
|
||||
|
||||
if (ps != null) {
|
||||
ps.println(name + " :end URL load - " +
|
||||
url.toString() + " " +
|
||||
Integer.toHexString(status));
|
||||
}
|
||||
}
|
||||
|
||||
public void progressURLLoad(String url, int progress, int progressMax,
|
||||
Document doc) {
|
||||
if (ps != null) {
|
||||
ps.println(name + " :progress URL load - " +
|
||||
url.toString() + " " +
|
||||
Integer.toString(progress) + "/" +
|
||||
Integer.toString(progressMax));
|
||||
}
|
||||
}
|
||||
|
||||
public void statusURLLoad(String url, String message, Document doc) {
|
||||
if (ps != null) {
|
||||
ps.println(name + " :status URL load - " +
|
||||
url.toString() + " (" +
|
||||
message + ")");
|
||||
}
|
||||
}
|
||||
|
||||
public void startDocumentLoad(String url) {
|
||||
if (ps != null) {
|
||||
ps.println(name + " :start doc load - " +
|
||||
url.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public void endDocumentLoad(String url, int status, Document doc) {
|
||||
if (ps != null) {
|
||||
ps.println(name + " :end doc load - " +
|
||||
url.toString() + " " +
|
||||
Integer.toHexString(status));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License
|
||||
* Version 1.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.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.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Sun Microsystems,
|
||||
* Inc. Portions created by Sun are Copyright (C) 1999 Sun Microsystems,
|
||||
* Inc. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
*/
|
||||
package org.mozilla.dom.util;
|
||||
|
||||
import java.io.PrintStream;
|
||||
import org.w3c.dom.events.Event;
|
||||
import org.w3c.dom.events.EventListener;
|
||||
|
||||
public class GenericEventListener implements EventListener {
|
||||
|
||||
private String name;
|
||||
private PrintStream ps;
|
||||
|
||||
public GenericEventListener() {
|
||||
this("GenericEventListener",
|
||||
new PrintStream(System.out));
|
||||
}
|
||||
|
||||
public GenericEventListener(String name) {
|
||||
this(name, new PrintStream(System.out));
|
||||
}
|
||||
|
||||
public GenericEventListener(PrintStream ps) {
|
||||
this("GenericEventListener", ps);
|
||||
}
|
||||
|
||||
public GenericEventListener(String name, PrintStream ps) {
|
||||
this.name = name;
|
||||
this.ps = ps;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called whenever an event occurs of the type for which the
|
||||
* <code> EventListener</code> interface was registered.
|
||||
* @param event The <code>Event</code> contains contextual information about
|
||||
* the event. It also contains the <code>returnValue</code> and
|
||||
* <code>cancelBubble</code> properties which are used in determining
|
||||
* proper event flow.
|
||||
*/
|
||||
public void handleEvent(Event event) {
|
||||
try {
|
||||
if (ps != null) {
|
||||
ps.println(name + ": got event " + event);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (ps != null) {
|
||||
ps.println(name + ": exception in handleEvent " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
84
mozilla/java/dom/jni/Makefile
Normal file
84
mozilla/java/dom/jni/Makefile
Normal file
@@ -0,0 +1,84 @@
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ../../..
|
||||
topsrcdir = $(DEPTH)
|
||||
srcdir = $(topsrcdir)/java/dom/jni
|
||||
VPATH = $(topsrcdir)/java/dom/jni
|
||||
|
||||
JAVAHOME = $(JDKHOME)
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
LIBRARY_NAME = javadomjni
|
||||
|
||||
CPPSRCS = \
|
||||
javaDOMGlobals.cpp \
|
||||
javaDOMEventsGlobals.cpp \
|
||||
nativeDOMProxyListener.cpp \
|
||||
org_mozilla_dom_DOMAccessor.cpp \
|
||||
org_mozilla_dom_AttrImpl.cpp \
|
||||
org_mozilla_dom_CharacterDataImpl.cpp \
|
||||
org_mozilla_dom_DocumentImpl.cpp \
|
||||
org_mozilla_dom_DocumentTypeImpl.cpp \
|
||||
org_mozilla_dom_DOMImplementationImpl.cpp \
|
||||
org_mozilla_dom_ElementImpl.cpp \
|
||||
org_mozilla_dom_EntityImpl.cpp \
|
||||
org_mozilla_dom_NamedNodeMapImpl.cpp \
|
||||
org_mozilla_dom_NodeImpl.cpp \
|
||||
org_mozilla_dom_NodeListImpl.cpp \
|
||||
org_mozilla_dom_NotationImpl.cpp \
|
||||
org_mozilla_dom_ProcessingInstructionImpl.cpp \
|
||||
org_mozilla_dom_TextImpl.cpp \
|
||||
org_mozilla_dom_events_EventImpl.cpp \
|
||||
org_mozilla_dom_events_UIEventImpl.cpp \
|
||||
org_mozilla_dom_events_MouseEventImpl.cpp
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
JAVA_CLS= \
|
||||
org.mozilla.dom.DOMAccessor \
|
||||
org.mozilla.dom.AttrImpl \
|
||||
org.mozilla.dom.CharacterDataImpl \
|
||||
org.mozilla.dom.DocumentImpl \
|
||||
org.mozilla.dom.DocumentTypeImpl \
|
||||
org.mozilla.dom.DOMImplementationImpl \
|
||||
org.mozilla.dom.ElementImpl \
|
||||
org.mozilla.dom.EntityImpl \
|
||||
org.mozilla.dom.NamedNodeMapImpl \
|
||||
org.mozilla.dom.NodeImpl \
|
||||
org.mozilla.dom.NodeListImpl \
|
||||
org.mozilla.dom.NotationImpl \
|
||||
org.mozilla.dom.ProcessingInstructionImpl \
|
||||
org.mozilla.dom.TextImpl \
|
||||
org.mozilla.dom.events.EventImpl \
|
||||
org.mozilla.dom.events.MouseEventImpl \
|
||||
org.mozilla.dom.events.UIEventImpl \
|
||||
$(NULL)
|
||||
|
||||
JAVAH_PROG=$(JDKHOME)/bin/javah
|
||||
JAVAH_FLAGS=-jni -classpath $(CLASSPATH):$(JAVA_DESTPATH)
|
||||
|
||||
export::
|
||||
$(JAVAH_PROG) $(JAVAH_FLAGS) $(JAVA_CLS)
|
||||
|
||||
clobber::
|
||||
rm -f org_*.h
|
||||
84
mozilla/java/dom/jni/Makefile.in
Normal file
84
mozilla/java/dom/jni/Makefile.in
Normal file
@@ -0,0 +1,84 @@
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ../../..
|
||||
topsrcdir = $(DEPTH)
|
||||
srcdir = $(topsrcdir)/java/dom/jni
|
||||
VPATH = $(topsrcdir)/java/dom/jni
|
||||
|
||||
JAVAHOME = $(JDKHOME)
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
LIBRARY_NAME = javadomjni
|
||||
|
||||
CPPSRCS = \
|
||||
javaDOMGlobals.cpp \
|
||||
javaDOMEventsGlobals.cpp \
|
||||
nativeDOMProxyListener.cpp \
|
||||
org_mozilla_dom_DOMAccessor.cpp \
|
||||
org_mozilla_dom_AttrImpl.cpp \
|
||||
org_mozilla_dom_CharacterDataImpl.cpp \
|
||||
org_mozilla_dom_DocumentImpl.cpp \
|
||||
org_mozilla_dom_DocumentTypeImpl.cpp \
|
||||
org_mozilla_dom_DOMImplementationImpl.cpp \
|
||||
org_mozilla_dom_ElementImpl.cpp \
|
||||
org_mozilla_dom_EntityImpl.cpp \
|
||||
org_mozilla_dom_NamedNodeMapImpl.cpp \
|
||||
org_mozilla_dom_NodeImpl.cpp \
|
||||
org_mozilla_dom_NodeListImpl.cpp \
|
||||
org_mozilla_dom_NotationImpl.cpp \
|
||||
org_mozilla_dom_ProcessingInstructionImpl.cpp \
|
||||
org_mozilla_dom_TextImpl.cpp \
|
||||
org_mozilla_dom_events_EventImpl.cpp \
|
||||
org_mozilla_dom_events_UIEventImpl.cpp \
|
||||
org_mozilla_dom_events_MouseEventImpl.cpp
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
JAVA_CLS= \
|
||||
org.mozilla.dom.DOMAccessor \
|
||||
org.mozilla.dom.AttrImpl \
|
||||
org.mozilla.dom.CharacterDataImpl \
|
||||
org.mozilla.dom.DocumentImpl \
|
||||
org.mozilla.dom.DocumentTypeImpl \
|
||||
org.mozilla.dom.DOMImplementationImpl \
|
||||
org.mozilla.dom.ElementImpl \
|
||||
org.mozilla.dom.EntityImpl \
|
||||
org.mozilla.dom.NamedNodeMapImpl \
|
||||
org.mozilla.dom.NodeImpl \
|
||||
org.mozilla.dom.NodeListImpl \
|
||||
org.mozilla.dom.NotationImpl \
|
||||
org.mozilla.dom.ProcessingInstructionImpl \
|
||||
org.mozilla.dom.TextImpl \
|
||||
org.mozilla.dom.events.EventImpl \
|
||||
org.mozilla.dom.events.MouseEventImpl \
|
||||
org.mozilla.dom.events.UIEventImpl \
|
||||
$(NULL)
|
||||
|
||||
JAVAH_PROG=$(JDKHOME)/bin/javah
|
||||
JAVAH_FLAGS=-jni -classpath $(CLASSPATH):$(JAVA_DESTPATH)
|
||||
|
||||
export::
|
||||
$(JAVAH_PROG) $(JAVAH_FLAGS) $(JAVA_CLS)
|
||||
|
||||
clobber::
|
||||
rm -f org_*.h
|
||||
268
mozilla/java/dom/jni/javaDOMEventsGlobals.cpp
Normal file
268
mozilla/java/dom/jni/javaDOMEventsGlobals.cpp
Normal file
@@ -0,0 +1,268 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "prmon.h"
|
||||
#include "nsAutoLock.h"
|
||||
#include "javaDOMEventsGlobals.h"
|
||||
#include "nsIDOMEvent.h"
|
||||
#include "nsIDOMUIEvent.h"
|
||||
|
||||
jclass JavaDOMEventsGlobals::eventClass = NULL;
|
||||
jclass JavaDOMEventsGlobals::uiEventClass = NULL;
|
||||
jclass JavaDOMEventsGlobals::eventListenerClass = NULL;
|
||||
jclass JavaDOMEventsGlobals::eventTargetClass = NULL;
|
||||
jclass JavaDOMEventsGlobals::mouseEventClass = NULL;
|
||||
jclass JavaDOMEventsGlobals::mutationEventClass = NULL;
|
||||
|
||||
jfieldID JavaDOMEventsGlobals::eventPtrFID = NULL;
|
||||
jfieldID JavaDOMEventsGlobals::eventTargetPtrFID = NULL;
|
||||
|
||||
jfieldID JavaDOMEventsGlobals::eventPhaseBubblingFID = NULL;
|
||||
jfieldID JavaDOMEventsGlobals::eventPhaseCapturingFID = NULL;
|
||||
jfieldID JavaDOMEventsGlobals::eventPhaseAtTargetFID = NULL;
|
||||
|
||||
jmethodID JavaDOMEventsGlobals::eventListenerHandleEventMID = NULL;
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIDOMUIEventIID, NS_IDOMUIEVENT_IID);
|
||||
|
||||
void JavaDOMEventsGlobals::Initialize(JNIEnv *env)
|
||||
{
|
||||
eventClass = env->FindClass("org/mozilla/dom/events/EventImpl");
|
||||
if (!eventClass) {
|
||||
JavaDOMGlobals::ThrowException(env, "Class org.mozilla.dom.events.EventImpl not found");
|
||||
return;
|
||||
}
|
||||
eventClass = (jclass) env->NewGlobalRef(eventClass);
|
||||
if (!eventClass)
|
||||
return;
|
||||
eventPtrFID =
|
||||
env->GetFieldID(eventClass, "p_nsIDOMEvent", "J");
|
||||
if (!eventPtrFID) {
|
||||
JavaDOMGlobals::ThrowException(env, "There is no field p_nsIDOMEvent in org.mozilla.dom.events.EventImpl");
|
||||
return;
|
||||
}
|
||||
|
||||
eventListenerClass = env->FindClass("org/w3c/dom/events/EventListener");
|
||||
if (!eventListenerClass) {
|
||||
JavaDOMGlobals::ThrowException(env, "Class org.w3c.dom.events.EventListener not found");
|
||||
return;
|
||||
}
|
||||
eventListenerClass = (jclass) env->NewGlobalRef(eventListenerClass);
|
||||
if (!eventListenerClass)
|
||||
return;
|
||||
|
||||
eventListenerHandleEventMID = env->GetMethodID(
|
||||
eventListenerClass, "handleEvent", "(Lorg/w3c/dom/events/Event;)V");
|
||||
if (!eventListenerHandleEventMID) {
|
||||
JavaDOMGlobals::ThrowException(env, "There is no method handleEvent in org.w3c.dom.events.EventListener");
|
||||
return;
|
||||
}
|
||||
|
||||
uiEventClass = env->FindClass("org/mozilla/dom/events/UIEventImpl");
|
||||
if (!uiEventClass) {
|
||||
JavaDOMGlobals::ThrowException(env, "Class org.mozilla.dom.events.UIEventImpl not found");
|
||||
return;
|
||||
}
|
||||
uiEventClass = (jclass) env->NewGlobalRef(uiEventClass);
|
||||
if (!uiEventClass)
|
||||
return;
|
||||
|
||||
eventPhaseBubblingFID =
|
||||
env->GetStaticFieldID(eventClass, "BUBBLING_PHASE", "S");
|
||||
if (!eventPhaseBubblingFID) {
|
||||
JavaDOMGlobals::ThrowException(env, "There is no static field BUBBLING_PHASE in org.w3c.dom.events.Event");
|
||||
return;
|
||||
}
|
||||
|
||||
eventPhaseCapturingFID =
|
||||
env->GetStaticFieldID(eventClass, "CAPTURING_PHASE", "S");
|
||||
if (!eventPhaseCapturingFID) {
|
||||
JavaDOMGlobals::ThrowException(env, "There is no static field CAPTURING_PHASE in org.w3c.dom.events.Event");
|
||||
return;
|
||||
}
|
||||
|
||||
eventPhaseAtTargetFID =
|
||||
env->GetStaticFieldID(eventClass, "AT_TARGET", "S");
|
||||
if (!eventPhaseAtTargetFID) {
|
||||
JavaDOMGlobals::ThrowException(env, "There is no static field AT_TARGET in org.w3c.dom.events.Event");
|
||||
return;
|
||||
}
|
||||
|
||||
mouseEventClass = env->FindClass("org/mozilla/dom/events/MouseEventImpl");
|
||||
if (!mouseEventClass) {
|
||||
JavaDOMGlobals::ThrowException(env, "Class org.mozilla.dom.events.MouseEventImpl not found");
|
||||
return;
|
||||
}
|
||||
mouseEventClass = (jclass) env->NewGlobalRef(mouseEventClass);
|
||||
if (!mouseEventClass)
|
||||
return;
|
||||
}
|
||||
|
||||
void JavaDOMEventsGlobals::Destroy(JNIEnv *env)
|
||||
{
|
||||
env->DeleteGlobalRef(eventClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("JavaDOMEventsGlobals::Destroy: failed to delete Event global ref %x\n",
|
||||
eventClass));
|
||||
return;
|
||||
}
|
||||
eventClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(eventListenerClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("JavaDOMEventsGlobals::Destroy: failed to delete EventListener global ref %x\n",
|
||||
eventListenerClass));
|
||||
return;
|
||||
}
|
||||
eventListenerClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(uiEventClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("JavaDOMEventsGlobals::Destroy: failed to delete UIEvent global ref %x\n",
|
||||
uiEventClass));
|
||||
return;
|
||||
}
|
||||
uiEventClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(mouseEventClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("JavaDOMEventsGlobals::Destroy: failed to delete mouseEvent global ref %x\n",
|
||||
mouseEventClass));
|
||||
return;
|
||||
}
|
||||
mouseEventClass = NULL;
|
||||
|
||||
}
|
||||
|
||||
//returns true if specified event "type" exists in the given list of types
|
||||
// NOTE: it is assumed that "types" list is enden with NULL
|
||||
static jboolean isEventOfType(const char* const* types, const char* type)
|
||||
{
|
||||
int i=0;
|
||||
|
||||
while (type && types && types[i]) {
|
||||
if (!strcmp(type,types[i]))
|
||||
return JNI_TRUE;
|
||||
i++;
|
||||
}
|
||||
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
jobject JavaDOMEventsGlobals::CreateEventSubtype(JNIEnv *env,
|
||||
nsIDOMEvent *event)
|
||||
{
|
||||
jobject jevent;
|
||||
jclass clazz = eventClass;
|
||||
nsISupports *isupports;
|
||||
void *target;
|
||||
nsresult rv;
|
||||
|
||||
isupports = (nsISupports *) event;
|
||||
|
||||
//check whenever our Event is UIEvent
|
||||
rv = isupports->QueryInterface(kIDOMUIEventIID, (void **) &target);
|
||||
if (!NS_FAILED(rv) && target) {
|
||||
// At the moment DOM2 draft specifies set of UIEvent subclasses
|
||||
// However Mozilla still presents these events as nsUIEvent
|
||||
// So we need a cludge to determine proper java class to be created
|
||||
|
||||
static const char* const uiEventTypes[] = {
|
||||
"resize",
|
||||
"scroll",
|
||||
"focusin",
|
||||
"focusout",
|
||||
"gainselection",
|
||||
"loseselection",
|
||||
"activate",
|
||||
NULL
|
||||
};
|
||||
|
||||
static const char* const mouseEventTypes[] = {
|
||||
"click",
|
||||
"mousedown",
|
||||
"mouseup",
|
||||
"mouseover",
|
||||
"mousemove",
|
||||
"mouseout",
|
||||
NULL
|
||||
};
|
||||
|
||||
nsString eventType;
|
||||
rv = event->GetType(eventType);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getType at JavaDOMEventsGlobals: failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char* buffer = nsnull;
|
||||
if (eventType.IsUnicode()) {
|
||||
buffer = eventType.ToNewUTF8String();
|
||||
} else {
|
||||
buffer = eventType.ToNewCString();
|
||||
}
|
||||
|
||||
if (isEventOfType(mouseEventTypes, buffer) == JNI_TRUE) {
|
||||
clazz = mouseEventClass;
|
||||
} else if (isEventOfType(uiEventTypes, buffer) == JNI_TRUE) {
|
||||
clazz = uiEventClass;
|
||||
} else {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("Unknown type of UI event (%s)", buffer));
|
||||
|
||||
clazz = uiEventClass;
|
||||
}
|
||||
nsString::Recycle(&eventType);
|
||||
|
||||
event->Release();
|
||||
event = (nsIDOMEvent *) target;
|
||||
}
|
||||
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("JavaDOMEventsGlobals::CreateEventSubtype: allocating Node of clazz=%x\n",
|
||||
clazz));
|
||||
|
||||
jevent = env->AllocObject(clazz);
|
||||
if (!jevent) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"JavaDOMEventsGlobals::CreateEventSubtype: failed to allocate Event object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jevent, eventPtrFID, (jlong) event);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("JavaDOMEventGlobals::CreateEventSubtype: failed to set native ptr %x\n",
|
||||
(jlong) event));
|
||||
return NULL;
|
||||
}
|
||||
event->AddRef();
|
||||
|
||||
return jevent;
|
||||
}
|
||||
|
||||
56
mozilla/java/dom/jni/javaDOMEventsGlobals.h
Normal file
56
mozilla/java/dom/jni/javaDOMEventsGlobals.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#ifndef __JavaDOMEventsGlobals_h__
|
||||
#define __JavaDOMEventsGlobals_h__
|
||||
|
||||
#include"javaDOMGlobals.h"
|
||||
#include"nsIDOMEvent.h"
|
||||
|
||||
class JavaDOMEventsGlobals {
|
||||
|
||||
public:
|
||||
static jclass eventClass;
|
||||
static jclass eventListenerClass;
|
||||
static jclass eventTargetClass;
|
||||
static jclass uiEventClass;
|
||||
static jclass mutationEventClass;
|
||||
static jclass mouseEventClass;
|
||||
|
||||
static jfieldID eventPtrFID;
|
||||
static jfieldID eventTargetPtrFID;
|
||||
|
||||
static jfieldID eventPhaseBubblingFID;
|
||||
static jfieldID eventPhaseCapturingFID;
|
||||
static jfieldID eventPhaseAtTargetFID;
|
||||
|
||||
static jmethodID eventListenerHandleEventMID;
|
||||
|
||||
static void Initialize(JNIEnv *env);
|
||||
static void Destroy(JNIEnv *env);
|
||||
static jobject CreateEventSubtype(JNIEnv *env,
|
||||
nsIDOMEvent *event);
|
||||
|
||||
static jlong RegisterNativeEventListener();
|
||||
static jlong UnregisterNativeEventListener();
|
||||
};
|
||||
|
||||
#endif /* __JavaDOMEventsGlobals_h__ */
|
||||
626
mozilla/java/dom/jni/javaDOMGlobals.cpp
Normal file
626
mozilla/java/dom/jni/javaDOMGlobals.cpp
Normal file
@@ -0,0 +1,626 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "prmon.h"
|
||||
#include "nsAutoLock.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "javaDOMEventsGlobals.h"
|
||||
|
||||
jclass JavaDOMGlobals::attrClass = NULL;
|
||||
jclass JavaDOMGlobals::cDataSectionClass = NULL;
|
||||
jclass JavaDOMGlobals::commentClass = NULL;
|
||||
jclass JavaDOMGlobals::documentClass = NULL;
|
||||
jclass JavaDOMGlobals::documentFragmentClass = NULL;
|
||||
jclass JavaDOMGlobals::documentTypeClass = NULL;
|
||||
jclass JavaDOMGlobals::domImplementationClass = NULL;
|
||||
jclass JavaDOMGlobals::elementClass = NULL;
|
||||
jclass JavaDOMGlobals::entityClass = NULL;
|
||||
jclass JavaDOMGlobals::entityReferenceClass = NULL;
|
||||
jclass JavaDOMGlobals::namedNodeMapClass = NULL;
|
||||
jclass JavaDOMGlobals::nodeClass = NULL;
|
||||
jclass JavaDOMGlobals::nodeListClass = NULL;
|
||||
jclass JavaDOMGlobals::notationClass = NULL;
|
||||
jclass JavaDOMGlobals::processingInstructionClass = NULL;
|
||||
jclass JavaDOMGlobals::textClass = NULL;
|
||||
|
||||
jfieldID JavaDOMGlobals::nodePtrFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeListPtrFID = NULL;
|
||||
jfieldID JavaDOMGlobals::domImplementationPtrFID = NULL;
|
||||
jfieldID JavaDOMGlobals::namedNodeMapPtrFID = NULL;
|
||||
|
||||
jfieldID JavaDOMGlobals::nodeTypeAttributeFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeCDataSectionFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeCommentFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeDocumentFragmentFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeDocumentFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeDocumentTypeFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeElementFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeEntityFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeEntityReferenceFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeNotationFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeProcessingInstructionFID = NULL;
|
||||
jfieldID JavaDOMGlobals::nodeTypeTextFID = NULL;
|
||||
|
||||
jclass JavaDOMGlobals::domExceptionClass = NULL;
|
||||
jmethodID JavaDOMGlobals::domExceptionInitMID = NULL;
|
||||
jclass JavaDOMGlobals::runtimeExceptionClass = NULL;
|
||||
jmethodID JavaDOMGlobals::runtimeExceptionInitMID = NULL;
|
||||
|
||||
const char* const JavaDOMGlobals::DOM_EXCEPTION_MESSAGE[] =
|
||||
{"Invalid DOM error code",
|
||||
"Index is out of bounds",
|
||||
"Could not fit text",
|
||||
"Wrong hierarchy request",
|
||||
"Wrong document usage",
|
||||
"Invalid character",
|
||||
"Data is unsupported",
|
||||
"Modification disallowed",
|
||||
"Node not found",
|
||||
"Type is unsupported",
|
||||
"Attribute is alreay in use",
|
||||
"Invalid state",
|
||||
"Syntax error",
|
||||
"Invalid modification",
|
||||
"Namespace error",
|
||||
"Invalid access"};
|
||||
|
||||
PRLogModuleInfo* JavaDOMGlobals::log = NULL;
|
||||
|
||||
PRCList JavaDOMGlobals::garbage = PR_INIT_STATIC_CLIST(&garbage);
|
||||
PRLock* JavaDOMGlobals::garbageLock = NULL;
|
||||
|
||||
PRInt32 JavaDOMGlobals::javaMaxInt = 0;
|
||||
|
||||
class jniDOMGarbage : public PRCList {
|
||||
public:
|
||||
jniDOMGarbage(nsISupports* p) { domObject = p; }
|
||||
nsISupports* domObject;
|
||||
};
|
||||
|
||||
void JavaDOMGlobals::Initialize(JNIEnv *env)
|
||||
{
|
||||
garbageLock = PR_NewLock();
|
||||
log = PR_NewLogModule("javadom");
|
||||
PR_INIT_CLIST(&garbage);
|
||||
|
||||
/* Node is loaded first because it is the base class of a lot of the
|
||||
others */
|
||||
nodeClass = env->FindClass("org/mozilla/dom/NodeImpl");
|
||||
if (!nodeClass) return;
|
||||
nodeClass = (jclass) env->NewGlobalRef(nodeClass);
|
||||
if (!nodeClass) return;
|
||||
nodePtrFID =
|
||||
env->GetFieldID(nodeClass, "p_nsIDOMNode", "J");
|
||||
if (!nodePtrFID) return;
|
||||
|
||||
attrClass = env->FindClass("org/mozilla/dom/AttrImpl");
|
||||
if (!attrClass) return;
|
||||
attrClass = (jclass) env->NewGlobalRef(attrClass);
|
||||
if (!attrClass) return;
|
||||
|
||||
cDataSectionClass = env->FindClass("org/mozilla/dom/CDATASectionImpl");
|
||||
if (!cDataSectionClass) return;
|
||||
cDataSectionClass = (jclass) env->NewGlobalRef(cDataSectionClass);
|
||||
if (!cDataSectionClass) return;
|
||||
|
||||
commentClass = env->FindClass("org/mozilla/dom/CommentImpl");
|
||||
if (!commentClass) return;
|
||||
commentClass = (jclass) env->NewGlobalRef(commentClass);
|
||||
if (!commentClass) return;
|
||||
|
||||
documentClass = env->FindClass("org/mozilla/dom/DocumentImpl");
|
||||
if (!documentClass) return;
|
||||
documentClass = (jclass) env->NewGlobalRef(documentClass);
|
||||
if (!documentClass) return;
|
||||
|
||||
documentFragmentClass = env->FindClass("org/mozilla/dom/DocumentFragmentImpl");
|
||||
if (!documentFragmentClass) return;
|
||||
documentFragmentClass = (jclass) env->NewGlobalRef(documentFragmentClass);
|
||||
if (!documentFragmentClass) return;
|
||||
|
||||
documentTypeClass = env->FindClass("org/mozilla/dom/DocumentTypeImpl");
|
||||
if (!documentTypeClass) return;
|
||||
documentTypeClass = (jclass) env->NewGlobalRef(documentTypeClass);
|
||||
if (!documentTypeClass) return;
|
||||
|
||||
domImplementationClass = env->FindClass("org/mozilla/dom/DOMImplementationImpl");
|
||||
if (!domImplementationClass) return;
|
||||
domImplementationClass = (jclass) env->NewGlobalRef(domImplementationClass);
|
||||
if (!domImplementationClass) return;
|
||||
domImplementationPtrFID =
|
||||
env->GetFieldID(domImplementationClass, "p_nsIDOMDOMImplementation", "J");
|
||||
if (!domImplementationPtrFID) return;
|
||||
|
||||
elementClass = env->FindClass("org/mozilla/dom/ElementImpl");
|
||||
if (!elementClass) return;
|
||||
elementClass = (jclass) env->NewGlobalRef(elementClass);
|
||||
if (!elementClass) return;
|
||||
|
||||
entityClass = env->FindClass("org/mozilla/dom/EntityImpl");
|
||||
if (!entityClass) return;
|
||||
entityClass = (jclass) env->NewGlobalRef(entityClass);
|
||||
if (!entityClass) return;
|
||||
|
||||
entityReferenceClass = env->FindClass("org/mozilla/dom/EntityReferenceImpl");
|
||||
if (!entityReferenceClass) return;
|
||||
entityReferenceClass = (jclass) env->NewGlobalRef(entityReferenceClass);
|
||||
if (!entityReferenceClass) return;
|
||||
|
||||
namedNodeMapClass = env->FindClass("org/mozilla/dom/NamedNodeMapImpl");
|
||||
if (!namedNodeMapClass) return;
|
||||
namedNodeMapPtrFID =
|
||||
env->GetFieldID(namedNodeMapClass, "p_nsIDOMNamedNodeMap", "J");
|
||||
if (!namedNodeMapPtrFID) return;
|
||||
namedNodeMapClass = (jclass) env->NewGlobalRef(namedNodeMapClass);
|
||||
if (!namedNodeMapClass) return;
|
||||
|
||||
nodeListClass = env->FindClass("org/mozilla/dom/NodeListImpl");
|
||||
if (!nodeListClass) return;
|
||||
nodeListClass = (jclass) env->NewGlobalRef(nodeListClass);
|
||||
if (!nodeListClass) return;
|
||||
nodeListPtrFID =
|
||||
env->GetFieldID(nodeListClass, "p_nsIDOMNodeList", "J");
|
||||
if (!nodeListPtrFID) return;
|
||||
|
||||
nodeTypeAttributeFID =
|
||||
env->GetStaticFieldID(nodeClass, "ATTRIBUTE_NODE", "S");
|
||||
if (!nodeTypeAttributeFID) return;
|
||||
nodeTypeCDataSectionFID =
|
||||
env->GetStaticFieldID(nodeClass, "CDATA_SECTION_NODE", "S");
|
||||
if (!nodeTypeCDataSectionFID) return;
|
||||
nodeTypeCommentFID =
|
||||
env->GetStaticFieldID(nodeClass, "COMMENT_NODE", "S");
|
||||
if (!nodeTypeCommentFID) return;
|
||||
nodeTypeDocumentFragmentFID =
|
||||
env->GetStaticFieldID(nodeClass, "DOCUMENT_FRAGMENT_NODE", "S");
|
||||
if (!nodeTypeDocumentFragmentFID) return;
|
||||
nodeTypeDocumentFID =
|
||||
env->GetStaticFieldID(nodeClass, "DOCUMENT_NODE", "S");
|
||||
if (!nodeTypeDocumentFID) return;
|
||||
nodeTypeDocumentTypeFID =
|
||||
env->GetStaticFieldID(nodeClass, "DOCUMENT_TYPE_NODE", "S");
|
||||
if (!nodeTypeDocumentTypeFID) return;
|
||||
nodeTypeElementFID =
|
||||
env->GetStaticFieldID(nodeClass, "ELEMENT_NODE", "S");
|
||||
if (!nodeTypeElementFID) return;
|
||||
nodeTypeEntityFID =
|
||||
env->GetStaticFieldID(nodeClass, "ENTITY_NODE", "S");
|
||||
if (!nodeTypeEntityFID) return;
|
||||
nodeTypeEntityReferenceFID =
|
||||
env->GetStaticFieldID(nodeClass, "ENTITY_REFERENCE_NODE", "S");
|
||||
if (!nodeTypeEntityReferenceFID) return;
|
||||
nodeTypeNotationFID =
|
||||
env->GetStaticFieldID(nodeClass, "NOTATION_NODE", "S");
|
||||
if (!nodeTypeNotationFID) return;
|
||||
nodeTypeProcessingInstructionFID =
|
||||
env->GetStaticFieldID(nodeClass, "PROCESSING_INSTRUCTION_NODE", "S");
|
||||
if (!nodeTypeProcessingInstructionFID) return;
|
||||
nodeTypeTextFID =
|
||||
env->GetStaticFieldID(nodeClass, "TEXT_NODE", "S");
|
||||
if (!nodeTypeTextFID) return;
|
||||
|
||||
notationClass = env->FindClass("org/mozilla/dom/NotationImpl");
|
||||
if (!notationClass) return;
|
||||
notationClass = (jclass) env->NewGlobalRef(notationClass);
|
||||
if (!notationClass) return;
|
||||
|
||||
processingInstructionClass = env->FindClass("org/mozilla/dom/ProcessingInstructionImpl");
|
||||
if (!processingInstructionClass) return;
|
||||
processingInstructionClass = (jclass) env->NewGlobalRef(processingInstructionClass);
|
||||
if (!processingInstructionClass) return;
|
||||
|
||||
textClass = env->FindClass("org/mozilla/dom/TextImpl");
|
||||
if (!textClass) return;
|
||||
textClass = (jclass) env->NewGlobalRef(textClass);
|
||||
if (!textClass) return;
|
||||
|
||||
domExceptionClass = env->FindClass("org/mozilla/dom/DOMExceptionImpl");
|
||||
if (!domExceptionClass) return;
|
||||
domExceptionClass = (jclass) env->NewGlobalRef(domExceptionClass);
|
||||
if (!domExceptionClass) return;
|
||||
|
||||
domExceptionInitMID =
|
||||
env->GetMethodID(domExceptionClass, "<init>", "(SLjava/lang/String;)V");
|
||||
if (!domExceptionInitMID) return;
|
||||
|
||||
runtimeExceptionClass = env->FindClass("java/lang/RuntimeException");
|
||||
if (!runtimeExceptionClass) return;
|
||||
runtimeExceptionClass = (jclass) env->NewGlobalRef(runtimeExceptionClass);
|
||||
if (!runtimeExceptionClass) return;
|
||||
|
||||
runtimeExceptionInitMID =
|
||||
env->GetMethodID(runtimeExceptionClass, "<init>", "(Ljava/lang/String;)V");
|
||||
if (!runtimeExceptionInitMID) return;
|
||||
|
||||
|
||||
jclass integerClass = env->FindClass("java/lang/Integer");
|
||||
jfieldID javaMaxIntFID =
|
||||
env->GetStaticFieldID(integerClass, "MAX_VALUE", "I");
|
||||
javaMaxInt = env->GetStaticIntField(integerClass, javaMaxIntFID);
|
||||
|
||||
//init events globals
|
||||
JavaDOMEventsGlobals::Initialize(env);
|
||||
}
|
||||
|
||||
void JavaDOMGlobals::Destroy(JNIEnv *env)
|
||||
{
|
||||
//destroy events stuff
|
||||
JavaDOMEventsGlobals::Destroy(env);
|
||||
|
||||
env->DeleteGlobalRef(attrClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete Attr global ref %x\n",
|
||||
attrClass));
|
||||
return;
|
||||
}
|
||||
attrClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(cDataSectionClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete CDATASection global ref %x\n",
|
||||
cDataSectionClass));
|
||||
return;
|
||||
}
|
||||
cDataSectionClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(commentClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete Comment global ref %x\n",
|
||||
commentClass));
|
||||
return;
|
||||
}
|
||||
commentClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(documentClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete Document global ref %x\n",
|
||||
documentClass));
|
||||
return;
|
||||
}
|
||||
documentClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(documentFragmentClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete DocumentFragment global ref %x\n",
|
||||
documentFragmentClass));
|
||||
return;
|
||||
}
|
||||
documentFragmentClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(documentTypeClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete DocumentType global ref %x\n",
|
||||
documentTypeClass));
|
||||
return;
|
||||
}
|
||||
documentTypeClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(domImplementationClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete DOMImplementation global ref %x\n",
|
||||
domImplementationClass));
|
||||
return;
|
||||
}
|
||||
domImplementationClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(elementClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete Element global ref %x\n",
|
||||
elementClass));
|
||||
return;
|
||||
}
|
||||
elementClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(entityClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete Entity global ref %x\n",
|
||||
entityClass));
|
||||
return;
|
||||
}
|
||||
entityClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(entityReferenceClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete EntityReference global ref %x\n",
|
||||
entityReferenceClass));
|
||||
return;
|
||||
}
|
||||
entityReferenceClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(namedNodeMapClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete NamedNodeMap global ref %x\n",
|
||||
namedNodeMapClass));
|
||||
return;
|
||||
}
|
||||
namedNodeMapClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(nodeListClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete NodeList global ref %x\n",
|
||||
nodeListClass));
|
||||
return;
|
||||
}
|
||||
nodeListClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(nodeClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete Node global ref %x\n",
|
||||
nodeClass));
|
||||
return;
|
||||
}
|
||||
nodeClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(notationClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete Notation global ref %x\n",
|
||||
notationClass));
|
||||
return;
|
||||
}
|
||||
notationClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(processingInstructionClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete ProcessingInstruction global ref %x\n",
|
||||
processingInstructionClass));
|
||||
return;
|
||||
}
|
||||
processingInstructionClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(textClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete Text global ref %x\n",
|
||||
textClass));
|
||||
return;
|
||||
}
|
||||
textClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(domExceptionClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete DOM Exception global ref %x\n",
|
||||
domExceptionClass));
|
||||
return;
|
||||
}
|
||||
domExceptionClass = NULL;
|
||||
|
||||
env->DeleteGlobalRef(runtimeExceptionClass);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::Destroy: failed to delete DOM Exception global ref %x\n",
|
||||
runtimeExceptionClass));
|
||||
return;
|
||||
}
|
||||
runtimeExceptionClass = NULL;
|
||||
|
||||
TakeOutGarbage();
|
||||
PR_DestroyLock(garbageLock);
|
||||
}
|
||||
|
||||
jobject JavaDOMGlobals::CreateNodeSubtype(JNIEnv *env,
|
||||
nsIDOMNode *node)
|
||||
{
|
||||
if (!node)
|
||||
return NULL;
|
||||
|
||||
PRUint16 nodeType = 0;
|
||||
(void) node->GetNodeType(&nodeType);
|
||||
|
||||
jclass clazz = nodeClass;
|
||||
switch (nodeType) {
|
||||
case nsIDOMNode::ATTRIBUTE_NODE:
|
||||
clazz = attrClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::CDATA_SECTION_NODE:
|
||||
clazz = cDataSectionClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::COMMENT_NODE:
|
||||
clazz = commentClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::DOCUMENT_NODE:
|
||||
clazz = documentClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::DOCUMENT_FRAGMENT_NODE:
|
||||
clazz = documentFragmentClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::DOCUMENT_TYPE_NODE:
|
||||
clazz = documentTypeClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::ELEMENT_NODE:
|
||||
clazz = elementClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::ENTITY_NODE:
|
||||
clazz = entityClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::ENTITY_REFERENCE_NODE:
|
||||
clazz = entityReferenceClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::NOTATION_NODE:
|
||||
clazz = notationClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::PROCESSING_INSTRUCTION_NODE:
|
||||
clazz = processingInstructionClass;
|
||||
break;
|
||||
|
||||
case nsIDOMNode::TEXT_NODE:
|
||||
clazz = textClass;
|
||||
break;
|
||||
}
|
||||
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::CreateNodeSubtype: allocating Node of type %d, clazz=%x\n",
|
||||
nodeType, clazz));
|
||||
jobject jnode = env->AllocObject(clazz);
|
||||
if (!jnode) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::CreateNodeSubtype: failed to allocate Node of type %d\n",
|
||||
nodeType));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jnode, nodePtrFID, (jlong) node);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::CreateNodeSubtype: failed to set native ptr %x\n",
|
||||
(jlong) node));
|
||||
return NULL;
|
||||
}
|
||||
node->AddRef();
|
||||
|
||||
return jnode;
|
||||
}
|
||||
|
||||
void JavaDOMGlobals::AddToGarbage(nsISupports* domObject)
|
||||
{
|
||||
nsAutoLock lock(garbageLock);
|
||||
jniDOMGarbage* elem = new jniDOMGarbage(domObject);
|
||||
PR_INSERT_BEFORE(elem, &garbage);
|
||||
PR_LOG(log, PR_LOG_DEBUG,
|
||||
("JavaDOMGlobals::AddToGarbage: Scheduling %x\n", domObject));
|
||||
}
|
||||
|
||||
void JavaDOMGlobals::TakeOutGarbage()
|
||||
{
|
||||
nsAutoLock lock(garbageLock);
|
||||
|
||||
PRUint32 count = 0;
|
||||
nsISupports* domo = NULL;
|
||||
|
||||
PRCList* chain = NULL;
|
||||
PRCList* elem = NULL;
|
||||
for (chain = PR_LIST_HEAD(&garbage);
|
||||
chain != &garbage;
|
||||
chain = PR_NEXT_LINK(chain)) {
|
||||
|
||||
delete elem;
|
||||
elem = chain;
|
||||
domo = ((jniDOMGarbage*) elem)->domObject;
|
||||
PR_LOG(log, PR_LOG_DEBUG,
|
||||
("JavaDOMGlobals::TakeOutGarbage: Releasing %x\n", domo));
|
||||
domo->Release();
|
||||
domo = NULL;
|
||||
|
||||
count++;
|
||||
}
|
||||
delete elem;
|
||||
PR_INIT_CLIST(&garbage);
|
||||
|
||||
if (count)
|
||||
PR_LOG(log, PR_LOG_DEBUG,
|
||||
("JavaDOMGlobals::TakeOutGarbage: Released %d objects\n", count));
|
||||
}
|
||||
|
||||
// caller must return from JNI immediately after calling this function
|
||||
void JavaDOMGlobals::ThrowException(JNIEnv *env,
|
||||
const char * message,
|
||||
nsresult rv,
|
||||
ExceptionType exceptionType) {
|
||||
|
||||
jthrowable newException = NULL;
|
||||
|
||||
if (exceptionType == EXCEPTION_DOM) {
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::ThrowException: (%x) %s: %s\n",
|
||||
NS_ERROR_GET_CODE(rv),
|
||||
message ? message : "",
|
||||
DOM_EXCEPTION_MESSAGE[NS_ERROR_GET_CODE(rv)]));
|
||||
|
||||
jstring jmessage =
|
||||
env->NewStringUTF(DOM_EXCEPTION_MESSAGE[NS_ERROR_GET_CODE(rv)]);
|
||||
|
||||
newException =
|
||||
(jthrowable)env->NewObject(domExceptionClass,
|
||||
domExceptionInitMID,
|
||||
NS_ERROR_GET_CODE(rv),
|
||||
jmessage);
|
||||
} else {
|
||||
char buffer[256];
|
||||
const char* msg = message;
|
||||
if (rv != NS_OK) {
|
||||
sprintf(buffer,
|
||||
"(%x.%x) %s",
|
||||
NS_ERROR_GET_MODULE(rv),
|
||||
NS_ERROR_GET_CODE(rv),
|
||||
message ? message : "");
|
||||
msg = buffer;
|
||||
}
|
||||
|
||||
PR_LOG(log, PR_LOG_ERROR,
|
||||
("JavaDOMGlobals::ThrowException: %s\n", msg));
|
||||
|
||||
jstring jmessage = env->NewStringUTF(msg);
|
||||
|
||||
newException =
|
||||
(jthrowable)env->NewObject(runtimeExceptionClass,
|
||||
runtimeExceptionInitMID,
|
||||
jmessage);
|
||||
|
||||
}
|
||||
|
||||
if (newException != NULL) {
|
||||
env->Throw(newException);
|
||||
}
|
||||
|
||||
// an exception is thrown in any case
|
||||
}
|
||||
|
||||
nsString* JavaDOMGlobals::GetUnicode(JNIEnv *env,
|
||||
jstring jstr)
|
||||
{
|
||||
jboolean iscopy = JNI_FALSE;
|
||||
const jchar* name = env->GetStringChars(jstr, &iscopy);
|
||||
if (!name) {
|
||||
ThrowException(env, "GetStringChars failed");
|
||||
return NULL;
|
||||
}
|
||||
nsString* ustr = new nsString((PRUnichar*)name,
|
||||
env->GetStringLength(jstr));
|
||||
env->ReleaseStringChars(jstr, name);
|
||||
return ustr;
|
||||
}
|
||||
111
mozilla/java/dom/jni/javaDOMGlobals.h
Normal file
111
mozilla/java/dom/jni/javaDOMGlobals.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#ifndef __JavaDOMGlobals_h__
|
||||
#define __JavaDOMGlobals_h__
|
||||
|
||||
#include "jni.h"
|
||||
#include "prclist.h"
|
||||
#include "nsError.h"
|
||||
#include "nsString.h"
|
||||
|
||||
// workaround for bug 30927
|
||||
#ifdef ERROR
|
||||
#undef ERROR
|
||||
#endif
|
||||
|
||||
class nsISupports;
|
||||
class nsIDOMNode;
|
||||
struct PRLogModuleInfo;
|
||||
struct PRLock;
|
||||
|
||||
class JavaDOMGlobals {
|
||||
|
||||
public:
|
||||
static jclass attrClass;
|
||||
static jclass cDataSectionClass;
|
||||
static jclass commentClass;
|
||||
static jclass documentClass;
|
||||
static jclass documentFragmentClass;
|
||||
static jclass documentTypeClass;
|
||||
static jclass domImplementationClass;
|
||||
static jclass elementClass;
|
||||
static jclass entityClass;
|
||||
static jclass entityReferenceClass;
|
||||
static jclass namedNodeMapClass;
|
||||
static jclass nodeClass;
|
||||
static jclass nodeListClass;
|
||||
static jclass notationClass;
|
||||
static jclass processingInstructionClass;
|
||||
static jclass textClass;
|
||||
|
||||
static jfieldID nodePtrFID;
|
||||
static jfieldID nodeListPtrFID;
|
||||
static jfieldID domImplementationPtrFID;
|
||||
static jfieldID namedNodeMapPtrFID;
|
||||
|
||||
static jfieldID nodeTypeAttributeFID;
|
||||
static jfieldID nodeTypeCDataSectionFID;
|
||||
static jfieldID nodeTypeCommentFID;
|
||||
static jfieldID nodeTypeDocumentFragmentFID;
|
||||
static jfieldID nodeTypeDocumentFID;
|
||||
static jfieldID nodeTypeDocumentTypeFID;
|
||||
static jfieldID nodeTypeElementFID;
|
||||
static jfieldID nodeTypeEntityFID;
|
||||
static jfieldID nodeTypeEntityReferenceFID;
|
||||
static jfieldID nodeTypeNotationFID;
|
||||
static jfieldID nodeTypeProcessingInstructionFID;
|
||||
static jfieldID nodeTypeTextFID;
|
||||
|
||||
static jclass domExceptionClass;
|
||||
static jmethodID domExceptionInitMID;
|
||||
static jclass runtimeExceptionClass;
|
||||
static jmethodID runtimeExceptionInitMID;
|
||||
|
||||
static const char* const DOM_EXCEPTION_MESSAGE[];
|
||||
|
||||
typedef enum ExceptionType { EXCEPTION_RUNTIME,
|
||||
EXCEPTION_DOM } ExceptionType;
|
||||
|
||||
static PRLogModuleInfo* log;
|
||||
static PRCList garbage;
|
||||
static PRLock* garbageLock;
|
||||
|
||||
static PRInt32 javaMaxInt;
|
||||
|
||||
static void Initialize(JNIEnv *env);
|
||||
static void Destroy(JNIEnv *env);
|
||||
static jobject CreateNodeSubtype(JNIEnv *env,
|
||||
nsIDOMNode *node);
|
||||
|
||||
static void AddToGarbage(nsISupports* domObject);
|
||||
static void TakeOutGarbage();
|
||||
|
||||
static void ThrowException(JNIEnv *env,
|
||||
const char * message = NULL,
|
||||
nsresult rv = NS_OK,
|
||||
ExceptionType exceptionType = EXCEPTION_RUNTIME);
|
||||
|
||||
static nsString* GetUnicode(JNIEnv *env,
|
||||
jstring str);
|
||||
};
|
||||
|
||||
#endif /* __JavaDOMGlobals_h__ */
|
||||
128
mozilla/java/dom/jni/makefile.win
Executable file
128
mozilla/java/dom/jni/makefile.win
Executable file
@@ -0,0 +1,128 @@
|
||||
#!nmake
|
||||
#
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH=..\..\..
|
||||
IGNORE_MANIFEST=1
|
||||
|
||||
DEFINES=-D_IMPL_NS_WEB -DWIN32_LEAN_AND_MEAN
|
||||
MODULE=javadomjni
|
||||
|
||||
CPPSRCS= \
|
||||
javaDOMGlobals.cpp \
|
||||
javaDOMEventsGlobals.cpp \
|
||||
nativeDOMProxyListener.cpp \
|
||||
org_mozilla_dom_DOMAccessor.cpp \
|
||||
org_mozilla_dom_AttrImpl.cpp \
|
||||
org_mozilla_dom_CharacterDataImpl.cpp \
|
||||
org_mozilla_dom_DocumentImpl.cpp \
|
||||
org_mozilla_dom_DocumentTypeImpl.cpp \
|
||||
org_mozilla_dom_DOMImplementationImpl.cpp \
|
||||
org_mozilla_dom_ElementImpl.cpp \
|
||||
org_mozilla_dom_EntityImpl.cpp \
|
||||
org_mozilla_dom_NamedNodeMapImpl.cpp \
|
||||
org_mozilla_dom_NodeImpl.cpp \
|
||||
org_mozilla_dom_NodeListImpl.cpp \
|
||||
org_mozilla_dom_NotationImpl.cpp \
|
||||
org_mozilla_dom_ProcessingInstructionImpl.cpp \
|
||||
org_mozilla_dom_TextImpl.cpp \
|
||||
org_mozilla_dom_events_EventImpl.cpp \
|
||||
org_mozilla_dom_events_MouseEventImpl.cpp \
|
||||
org_mozilla_dom_events_UIEventImpl.cpp \
|
||||
$(NULL)
|
||||
|
||||
CPP_OBJS= \
|
||||
.\$(OBJDIR)\javaDOMGlobals.obj \
|
||||
.\$(OBJDIR)\javaDOMEventsGlobals.obj \
|
||||
.\$(OBJDIR)\nativeDOMProxyListener.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_DOMAccessor.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_AttrImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_CharacterDataImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_DocumentImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_DocumentTypeImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_DOMImplementationImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_ElementImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_EntityImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_NamedNodeMapImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_NodeImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_NodeListImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_NotationImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_ProcessingInstructionImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_TextImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_events_EventImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_events_UIEventImpl.obj \
|
||||
.\$(OBJDIR)\org_mozilla_dom_events_MouseEventImpl.obj \
|
||||
$(NULL)
|
||||
|
||||
JAVA_CLS= \
|
||||
org.mozilla.dom.DOMAccessor \
|
||||
org.mozilla.dom.AttrImpl \
|
||||
org.mozilla.dom.CharacterDataImpl \
|
||||
org.mozilla.dom.DocumentImpl \
|
||||
org.mozilla.dom.DocumentTypeImpl \
|
||||
org.mozilla.dom.DOMImplementationImpl \
|
||||
org.mozilla.dom.ElementImpl \
|
||||
org.mozilla.dom.EntityImpl \
|
||||
org.mozilla.dom.NamedNodeMapImpl \
|
||||
org.mozilla.dom.NodeImpl \
|
||||
org.mozilla.dom.NodeListImpl \
|
||||
org.mozilla.dom.NotationImpl \
|
||||
org.mozilla.dom.ProcessingInstructionImpl \
|
||||
org.mozilla.dom.TextImpl \
|
||||
org.mozilla.dom.events.EventImpl \
|
||||
org.mozilla.dom.events.MouseEventImpl \
|
||||
org.mozilla.dom.events.UIEventImpl \
|
||||
$(NULL)
|
||||
|
||||
|
||||
LINCS=
|
||||
|
||||
MAKE_OBJ_TYPE = DLL
|
||||
DLLNAME = javadomjni
|
||||
DLL=.\$(OBJDIR)\$(DLLNAME).dll
|
||||
LIBRARY_NAME=javadomimpl
|
||||
|
||||
LCFLAGS = \
|
||||
$(LCFLAGS) \
|
||||
$(DEFINES) \
|
||||
$(NULL)
|
||||
|
||||
# These are the libraries we need to link with to create the dll
|
||||
LLIBS= \
|
||||
$(DIST)\lib\xpcom.lib \
|
||||
$(LIBNSPR)
|
||||
|
||||
include <$(DEPTH)\config\config.mak>
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
JAVAH_PROG=$(JDKHOME)\bin\javah
|
||||
JAVAH_FLAGS=-jni -classpath $(CLASSPATH);$(JAVA_DESTPATH)
|
||||
|
||||
export::
|
||||
$(JAVAH_PROG) $(JAVAH_FLAGS) $(JAVA_CLS)
|
||||
|
||||
install:: $(DLL)
|
||||
$(MAKE_INSTALL) .\$(OBJDIR)\$(DLLNAME).dll $(DIST)\bin
|
||||
$(MAKE_INSTALL) .\$(OBJDIR)\$(DLLNAME).lib $(DIST)\lib
|
||||
|
||||
clobber::
|
||||
rm -f $(DIST)\bin\$(DLLNAME).dll
|
||||
rm -f $(DIST)\lib\$(DLLNAME).lib
|
||||
rm -f org_*.h
|
||||
130
mozilla/java/dom/jni/nativeDOMProxyListener.cpp
Normal file
130
mozilla/java/dom/jni/nativeDOMProxyListener.cpp
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include<stdio.h>
|
||||
#include"prlog.h"
|
||||
#include"nativeDOMProxyListener.h"
|
||||
#include"nsIDOMNode.h"
|
||||
#include"nsIDOMEventTarget.h"
|
||||
#include"nsIDOMEventListener.h"
|
||||
#include"javaDOMEventsGlobals.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIDOMEventListener, NS_IDOMEVENTLISTENER_IID);
|
||||
|
||||
NativeDOMProxyListener::NativeDOMProxyListener(JNIEnv *env, jobject jlistener)
|
||||
{
|
||||
mRefCnt = 0;
|
||||
listener = env->NewGlobalRef(jlistener);
|
||||
|
||||
if (env->GetJavaVM(&vm) != 0)
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NativeDOMProxyListener: Can't objant jvm\n"));
|
||||
}
|
||||
|
||||
|
||||
//should be called oly from NativeDOMProxyListener::Release
|
||||
NativeDOMProxyListener::~NativeDOMProxyListener()
|
||||
{
|
||||
JNIEnv *env;
|
||||
|
||||
if (vm->AttachCurrentThread( &env, NULL) != 0)
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NativeDOMProxyListener: Can't attach current thread to JVM\n"));
|
||||
|
||||
env->DeleteGlobalRef(listener);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NativeDOMProxyListener::Destroy: failed to delete EventListener global ref %x\n",
|
||||
listener));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
nsresult NativeDOMProxyListener::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
jobject jevent;
|
||||
JNIEnv *env;
|
||||
|
||||
if (vm->AttachCurrentThread( &env, NULL) != 0) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NativeDOMProxyListener:HandleEvent Can't attach current thread to JVM\n"));
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
jevent = JavaDOMEventsGlobals::CreateEventSubtype(env, aEvent);
|
||||
|
||||
if (!jevent) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NativeDOMProxyListener::HandleEvent Can't create java event object"));
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
env->CallVoidMethod(listener,
|
||||
JavaDOMEventsGlobals::eventListenerHandleEventMID,
|
||||
jevent);
|
||||
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NativeDOMProxyListener::HandleEvent: failed to call EventListener %x\n",
|
||||
listener));
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult NativeDOMProxyListener::QueryInterface(const nsIID &aIID, void **aResult)
|
||||
{
|
||||
if (aResult == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aResult = NULL;
|
||||
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aResult = (void *) this;
|
||||
} else if (aIID.Equals(kIDOMEventListener)) {
|
||||
*aResult = (void *) this;
|
||||
}
|
||||
|
||||
if (aResult != NULL) {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsrefcnt NativeDOMProxyListener::AddRef()
|
||||
{
|
||||
return mRefCnt++;
|
||||
}
|
||||
|
||||
nsrefcnt NativeDOMProxyListener::Release()
|
||||
{
|
||||
if (--mRefCnt == 0) {
|
||||
delete this;
|
||||
return 0; // Don't access mRefCnt after deleting!
|
||||
}
|
||||
return mRefCnt;
|
||||
}
|
||||
29
mozilla/java/dom/jni/nativeDOMProxyListener.h
Normal file
29
mozilla/java/dom/jni/nativeDOMProxyListener.h
Normal file
@@ -0,0 +1,29 @@
|
||||
#ifndef __JAVA_DOM_NATIVE_PROXY_LISTENER__
|
||||
#define __JAVA_DOM_NATIVE_PROXY_LISTENER__
|
||||
|
||||
#include"nsIDOMEventListener.h"
|
||||
#include"jni.h"
|
||||
|
||||
class NativeDOMProxyListener: public nsIDOMEventListener{
|
||||
|
||||
private:
|
||||
JavaVM *vm;
|
||||
jobject listener;
|
||||
nsrefcnt mRefCnt;
|
||||
|
||||
//to be used only by Release()
|
||||
virtual ~NativeDOMProxyListener();
|
||||
public:
|
||||
|
||||
NativeDOMProxyListener(JNIEnv *env, jobject jlistener);
|
||||
|
||||
virtual nsresult HandleEvent(nsIDOMEvent* aEvent);
|
||||
|
||||
NS_IMETHOD QueryInterface(const nsIID &aIID, void **aResult);
|
||||
NS_IMETHOD_(nsrefcnt) AddRef(void);
|
||||
NS_IMETHOD_(nsrefcnt) Release(void);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
177
mozilla/java/dom/jni/org_mozilla_dom_AttrImpl.cpp
Normal file
177
mozilla/java/dom/jni/org_mozilla_dom_AttrImpl.cpp
Normal file
@@ -0,0 +1,177 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMAttr.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_AttrImpl.h"
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_AttrImpl
|
||||
* Method: getName
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_AttrImpl_getName
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMAttr* attr = (nsIDOMAttr*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!attr) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getName: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString name;
|
||||
nsresult rv = attr->GetName(name);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getName: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jname = env->NewString(name.GetUnicode(), name.Length());
|
||||
if (!jname) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getName: NewString failed\n"));
|
||||
}
|
||||
|
||||
return jname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_AttrImpl
|
||||
* Method: getSpecified
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_AttrImpl_getSpecified
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMAttr* attr = (nsIDOMAttr*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!attr) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getSpecified: NULL pointer\n"));
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
PRBool specified = PR_FALSE;
|
||||
nsresult rv = attr->GetSpecified(&specified);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getSpecified: failed (%x)\n", rv));
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (specified == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_AttrImpl
|
||||
* Method: getValue
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_AttrImpl_getValue
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMAttr* attr = (nsIDOMAttr*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!attr) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getValue: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString value;
|
||||
nsresult rv = attr->GetValue(value);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getValue: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jval = env->NewString(value.GetUnicode(), value.Length());
|
||||
if (!jval) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getValue: NewString failed\n"));
|
||||
}
|
||||
|
||||
return jval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_AttrImpl
|
||||
* Method: setValue
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_AttrImpl_setValue
|
||||
(JNIEnv *env, jobject jthis, jstring jval)
|
||||
{
|
||||
nsIDOMAttr* attr = (nsIDOMAttr*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!attr || !jval) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Attr.setValue: NULL pointer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
nsString* cstr = JavaDOMGlobals::GetUnicode(env, jval);
|
||||
if (!cstr)
|
||||
return;
|
||||
|
||||
nsresult rv = attr->SetValue(*cstr);
|
||||
nsString::Recycle(cstr);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.setValue: failed (%x)\n", rv));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_AttrImpl
|
||||
* Method: getOwnerElement
|
||||
* Signature: ()Lorg/w3c/dom/Element;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_AttrImpl_getOwnerElement
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMAttr* attr = (nsIDOMAttr*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!attr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Attr.setValue: NULL pointer\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMElement* aOwnerElement = nsnull;
|
||||
nsresult rv = attr->GetOwnerElement(&aOwnerElement);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Attr.getOwnerElement: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, (nsIDOMNode*)aOwnerElement);
|
||||
}
|
||||
|
||||
323
mozilla/java/dom/jni/org_mozilla_dom_CharacterDataImpl.cpp
Normal file
323
mozilla/java/dom/jni/org_mozilla_dom_CharacterDataImpl.cpp
Normal file
@@ -0,0 +1,323 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMCharacterData.h"
|
||||
#include "nsDOMError.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_CharacterDataImpl.h"
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_CharacterDataImpl
|
||||
* Method: appendData
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_CharacterDataImpl_appendData
|
||||
(JNIEnv *env, jobject jthis, jstring jvalue)
|
||||
{
|
||||
nsIDOMCharacterData* data = (nsIDOMCharacterData*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!data || !jvalue) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.appendData: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* value = JavaDOMGlobals::GetUnicode(env, jvalue);
|
||||
if (!value)
|
||||
return;
|
||||
|
||||
nsresult rv = data->AppendData(*value);
|
||||
nsString::Recycle(value);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.appendData: failed", rv, exceptionType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_CharacterDataImpl
|
||||
* Method: deleteData
|
||||
* Signature: (II)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_CharacterDataImpl_deleteData
|
||||
(JNIEnv *env, jobject jthis, jint offset, jint count)
|
||||
{
|
||||
if (offset < 0 || offset > JavaDOMGlobals::javaMaxInt ||
|
||||
count < 0 || count > JavaDOMGlobals::javaMaxInt) {
|
||||
JavaDOMGlobals::ThrowException(env, "CharacterData.deleteData: failed",
|
||||
NS_ERROR_DOM_INDEX_SIZE_ERR,
|
||||
JavaDOMGlobals::EXCEPTION_DOM);
|
||||
return;
|
||||
}
|
||||
|
||||
nsIDOMCharacterData* data = (nsIDOMCharacterData*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!data) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.deleteData: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = data->DeleteData((PRUint32) offset, (PRUint32) count);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INDEX_SIZE_ERR ||
|
||||
rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.deleteData: failed", rv, exceptionType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_CharacterDataImpl
|
||||
* Method: getData
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_CharacterDataImpl_getData
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMCharacterData* data = (nsIDOMCharacterData*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!data) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.getData: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = data->GetData(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_DOMSTRING_SIZE_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.getData: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.getData: NewString failed");
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_CharacterDataImpl
|
||||
* Method: getLength
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_CharacterDataImpl_getLength
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMCharacterData* data = (nsIDOMCharacterData*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!data) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.getLength: NULL pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRUint32 len = 0;
|
||||
nsresult rv = data->GetLength(&len);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.getLength: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jint) len;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_CharacterDataImpl
|
||||
* Method: insertData
|
||||
* Signature: (ILjava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_CharacterDataImpl_insertData
|
||||
(JNIEnv *env, jobject jthis, jint offset, jstring jvalue)
|
||||
{
|
||||
nsIDOMCharacterData* data = (nsIDOMCharacterData*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!data || !jvalue) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.insertData: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* value = JavaDOMGlobals::GetUnicode(env, jvalue);
|
||||
if (!value)
|
||||
return;
|
||||
|
||||
nsresult rv = data->InsertData((PRUint32) offset, *value);
|
||||
nsString::Recycle(value);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INDEX_SIZE_ERR ||
|
||||
rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.insertData: failed", rv, exceptionType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_CharacterDataImpl
|
||||
* Method: replaceData
|
||||
* Signature: (IILjava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_CharacterDataImpl_replaceData
|
||||
(JNIEnv *env, jobject jthis, jint offset, jint count, jstring jvalue)
|
||||
{
|
||||
if (offset < 0 || offset > JavaDOMGlobals::javaMaxInt ||
|
||||
count < 0 || count > JavaDOMGlobals::javaMaxInt) {
|
||||
JavaDOMGlobals::ThrowException(env, "CharacterData.replaceData: failed",
|
||||
NS_ERROR_DOM_INDEX_SIZE_ERR,
|
||||
JavaDOMGlobals::EXCEPTION_DOM);
|
||||
return;
|
||||
}
|
||||
|
||||
nsIDOMCharacterData* data = (nsIDOMCharacterData*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!data || !jvalue) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.replaceData: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* value = JavaDOMGlobals::GetUnicode(env, jvalue);
|
||||
if (!value)
|
||||
return;
|
||||
|
||||
nsresult rv = data->ReplaceData((PRUint32) offset, (PRUint32) count, *value);
|
||||
nsString::Recycle(value);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INDEX_SIZE_ERR ||
|
||||
rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.replaceData: failed", rv, exceptionType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_CharacterDataImpl
|
||||
* Method: setData
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_CharacterDataImpl_setData
|
||||
(JNIEnv *env, jobject jthis, jstring jvalue)
|
||||
{
|
||||
nsIDOMCharacterData* data = (nsIDOMCharacterData*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!data || !jvalue) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.setData: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* value = JavaDOMGlobals::GetUnicode(env, jvalue);
|
||||
if (!value)
|
||||
return;
|
||||
|
||||
nsresult rv = data->SetData(*value);
|
||||
nsString::Recycle(value);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.setData: failed", rv, exceptionType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_CharacterDataImpl
|
||||
* Method: substringData
|
||||
* Signature: (II)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_CharacterDataImpl_substringData
|
||||
(JNIEnv *env, jobject jthis, jint offset, jint count)
|
||||
{
|
||||
if (offset < 0 || offset > JavaDOMGlobals::javaMaxInt ||
|
||||
count < 0 || count > JavaDOMGlobals::javaMaxInt) {
|
||||
JavaDOMGlobals::ThrowException(env, "CharacterData.substringData: failed",
|
||||
NS_ERROR_DOM_INDEX_SIZE_ERR,
|
||||
JavaDOMGlobals::EXCEPTION_DOM);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMCharacterData* data = (nsIDOMCharacterData*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!data) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.substringData: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = data->SubstringData((PRUint32) offset, (PRUint32) count, ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INDEX_SIZE_ERR ||
|
||||
rv == NS_ERROR_DOM_DOMSTRING_SIZE_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.substringData: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"CharacterData.substringData: NewString failed");
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
118
mozilla/java/dom/jni/org_mozilla_dom_DOMAccessor.cpp
Normal file
118
mozilla/java/dom/jni/org_mozilla_dom_DOMAccessor.cpp
Normal file
@@ -0,0 +1,118 @@
|
||||
|
||||
#include "prlog.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "nsIDocumentLoader.h"
|
||||
#include "nsIDocumentLoaderObserver.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsCURILoader.h"
|
||||
|
||||
#include "nsIJavaDOM.h"
|
||||
#include "org_mozilla_dom_DOMAccessor.h"
|
||||
|
||||
static NS_DEFINE_IID(kDocLoaderServiceCID, NS_DOCUMENTLOADER_SERVICE_CID);
|
||||
static NS_DEFINE_IID(kJavaDOMCID, NS_JAVADOM_CID);
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMAccessor
|
||||
* Method: register
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_DOMAccessor_register
|
||||
(JNIEnv *env, jclass jthis)
|
||||
{
|
||||
if (!JavaDOMGlobals::log) {
|
||||
JavaDOMGlobals::Initialize(env);
|
||||
}
|
||||
nsresult rv = NS_OK;
|
||||
NS_WITH_SERVICE(nsIDocumentLoader, docLoaderService, kDocLoaderServiceCID, &rv);
|
||||
if (NS_FAILED(rv) || !docLoaderService) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMAccessor::register: GetService(JavaDOM) failed: %x\n",
|
||||
rv));
|
||||
} else {
|
||||
NS_WITH_SERVICE(nsIDocumentLoaderObserver, javaDOM, kJavaDOMCID, &rv);
|
||||
if (NS_FAILED(rv) || !javaDOM) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMAccessor::register: GetService(JavaDOM) failed: %x\n",
|
||||
rv));
|
||||
} else {
|
||||
rv = docLoaderService->AddObserver((nsIDocumentLoaderObserver*)javaDOM);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMAccessor::register: AddObserver(JavaDOM) failed x\n",
|
||||
rv));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMAccessor
|
||||
* Method: unregister
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_DOMAccessor_unregister
|
||||
(JNIEnv *, jclass jthis)
|
||||
{
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_DEBUG,
|
||||
("DOMAccessor::unregister: unregistering %x\n", jthis));
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
NS_WITH_SERVICE(nsIDocumentLoader, docLoaderService, kDocLoaderServiceCID, &rv);
|
||||
if (NS_FAILED(rv) || !docLoaderService) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMAccessor::unregister: GetService(DocLoaderService) failed %x\n",
|
||||
rv));
|
||||
} else {
|
||||
NS_WITH_SERVICE(nsIDocumentLoaderObserver, javaDOM, kJavaDOMCID, &rv);
|
||||
if (NS_FAILED(rv) || !javaDOM) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMAccessor::unregister: GetService(JavaDOM) failed %x\n",
|
||||
rv));
|
||||
} else {
|
||||
rv = docLoaderService->RemoveObserver((nsIDocumentLoaderObserver*)javaDOM);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMAccessor::unregister: RemoveObserver(JavaDOM) failed x\n",
|
||||
rv));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMAccessor
|
||||
* Method: createElement
|
||||
* Signature: (J)Lorg/w3c/dom/Element;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DOMAccessor_getNodeByHandle
|
||||
(JNIEnv *env, jclass jthis, jlong p)
|
||||
{
|
||||
if (!JavaDOMGlobals::log) {
|
||||
JavaDOMGlobals::Initialize(env);
|
||||
}
|
||||
nsIDOMNode *node = (nsIDOMNode*)p;
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMAccessor
|
||||
* Method: doGC
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_DOMAccessor_doGC
|
||||
(JNIEnv *, jclass)
|
||||
{
|
||||
JavaDOMGlobals::TakeOutGarbage();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_DOMAccessor_initialize
|
||||
(JNIEnv *env, jclass)
|
||||
{
|
||||
if (!JavaDOMGlobals::log) {
|
||||
JavaDOMGlobals::Initialize(env);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
290
mozilla/java/dom/jni/org_mozilla_dom_DOMImplementationImpl.cpp
Normal file
290
mozilla/java/dom/jni/org_mozilla_dom_DOMImplementationImpl.cpp
Normal file
@@ -0,0 +1,290 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMDOMImplementation.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_DOMImplementationImpl.h"
|
||||
#include "nsDOMError.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMImplementationImpl
|
||||
* Method: XPCOM_equals
|
||||
* Signature: (Ljava/lang/Object;)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_DOMImplementationImpl_XPCOM_1equals
|
||||
(JNIEnv *env, jobject jthis, jobject jarg)
|
||||
{
|
||||
jboolean b_retFlag = JNI_FALSE;
|
||||
|
||||
nsIDOMDOMImplementation* p_this = (nsIDOMDOMImplementation*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::domImplementationPtrFID);
|
||||
if (!p_this) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DOMImplementation.equals: NULL pointer\n"));
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
nsIDOMDOMImplementation* p_arg = (nsIDOMDOMImplementation*)
|
||||
env->GetLongField(jarg, JavaDOMGlobals::domImplementationPtrFID);
|
||||
if (!p_arg) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DOMImplementation.equals: NULL arg pointer\n"));
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
nsISupports* thisSupports = nsnull;
|
||||
nsISupports* argSupports = nsnull;
|
||||
|
||||
nsresult rvThis =
|
||||
p_this->QueryInterface(kISupportsIID, (void**)(&thisSupports));
|
||||
if (NS_FAILED(rvThis) || !thisSupports) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMImplementation.equals: this->QueryInterface failed (%x)\n",
|
||||
rvThis));
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
nsresult rvArg =
|
||||
p_arg->QueryInterface(kISupportsIID, (void**)(&argSupports));
|
||||
if (NS_FAILED(rvArg) || !argSupports) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMImplementation.equals: arg->QueryInterface failed (%x)\n",
|
||||
rvArg));
|
||||
thisSupports->Release();
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
if (thisSupports == argSupports)
|
||||
b_retFlag = JNI_TRUE;
|
||||
|
||||
thisSupports->Release();
|
||||
argSupports->Release();
|
||||
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMImplementationImpl
|
||||
* Method: XPCOM_hashCode
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_DOMImplementationImpl_XPCOM_1hashCode
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDOMImplementation* p_this = (nsIDOMDOMImplementation*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::domImplementationPtrFID);
|
||||
if (!p_this) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DOMImplementation.hashCode: NULL pointer\n"));
|
||||
return (jint) 0;
|
||||
}
|
||||
|
||||
nsISupports* thisSupports = nsnull;
|
||||
nsresult rvThis =
|
||||
p_this->QueryInterface(kISupportsIID, (void**)(&thisSupports));
|
||||
if (NS_FAILED(rvThis) || !thisSupports) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMImplementation.hashCode: QueryInterface failed (%x)\n",
|
||||
rvThis));
|
||||
return (jint) 0;
|
||||
}
|
||||
|
||||
thisSupports->Release();
|
||||
return (jint) thisSupports;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMImplementationImpl
|
||||
* Method: finalize
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_DOMImplementationImpl_finalize
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDOMImplementation* dom = (nsIDOMDOMImplementation*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::domImplementationPtrFID);
|
||||
if (!dom) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DOMImplementation.finalize: NULL pointer\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
JavaDOMGlobals::AddToGarbage(dom);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMImplementationImpl
|
||||
* Method: hasFeature
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_DOMImplementationImpl_hasFeature
|
||||
(JNIEnv *env, jobject jthis, jstring jfeature, jstring jversion)
|
||||
{
|
||||
nsIDOMDOMImplementation* dom = (nsIDOMDOMImplementation*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::domImplementationPtrFID);
|
||||
if (!dom || !jfeature) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DOMImplementation.hasFeature: NULL pointer\n"));
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
nsString* feature = JavaDOMGlobals::GetUnicode(env, jfeature);
|
||||
if (!feature)
|
||||
return JNI_FALSE;
|
||||
|
||||
nsString* version;
|
||||
if (jversion) {
|
||||
version = JavaDOMGlobals::GetUnicode(env, jversion);
|
||||
if (!version) {
|
||||
nsString::Recycle(feature);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
} else {
|
||||
version = new nsString();
|
||||
}
|
||||
|
||||
PRBool ret = PR_FALSE;
|
||||
nsresult rv = dom->HasFeature(*feature, *version, &ret);
|
||||
nsString::Recycle(feature);
|
||||
nsString::Recycle(version);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DOMImplementation.hasFeature: failed (%x)\n", rv));
|
||||
}
|
||||
|
||||
return ret == PR_TRUE ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMImplementationImpl
|
||||
* Method: createDocumentType
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/DocumentType;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DOMImplementationImpl_createDocumentType
|
||||
(JNIEnv *env, jobject jthis, jstring jqualifiedName, jstring jpublicID, jstring jsystemID)
|
||||
{
|
||||
nsIDOMDOMImplementation* dom = (nsIDOMDOMImplementation*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::domImplementationPtrFID);
|
||||
if (!dom || !jqualifiedName || !jpublicID || !jsystemID) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"DOMImplementation.createDocumentType: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* qualifiedName = JavaDOMGlobals::GetUnicode(env, jqualifiedName);
|
||||
if (!qualifiedName)
|
||||
return NULL;
|
||||
|
||||
nsString* publicID = JavaDOMGlobals::GetUnicode(env, jpublicID);
|
||||
if (!publicID) {
|
||||
nsString::Recycle(qualifiedName);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* systemID = JavaDOMGlobals::GetUnicode(env, jsystemID);
|
||||
if (!systemID) {
|
||||
nsString::Recycle(qualifiedName);
|
||||
nsString::Recycle(publicID);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMDocumentType* docType = nsnull;
|
||||
nsresult rv = dom->CreateDocumentType(*qualifiedName, *publicID, *systemID, &docType);
|
||||
nsString::Recycle(qualifiedName);
|
||||
nsString::Recycle(publicID);
|
||||
nsString::Recycle(systemID);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INVALID_CHARACTER_ERR ||
|
||||
rv == NS_ERROR_DOM_NAMESPACE_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"DOMImplementation.createDocumentType: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, (nsIDOMNode*)docType);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DOMImplementationImpl
|
||||
* Method: createDocument
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/w3c/dom/DocumentType;)Lorg/w3c/dom/Document;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DOMImplementationImpl_createDocument
|
||||
(JNIEnv *env, jobject jthis, jstring jnamespaceURI, jstring jqualifiedName, jobject jdoctype)
|
||||
{
|
||||
nsIDOMDOMImplementation* dom = (nsIDOMDOMImplementation*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::domImplementationPtrFID);
|
||||
if (!dom || !jnamespaceURI || !jqualifiedName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"DOMImplementation.createDocument: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* namespaceURI = JavaDOMGlobals::GetUnicode(env, jnamespaceURI);
|
||||
if (!namespaceURI)
|
||||
return NULL;
|
||||
|
||||
nsString* qualifiedName = JavaDOMGlobals::GetUnicode(env, jqualifiedName);
|
||||
if (!qualifiedName) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMDocumentType* docType = nsnull;
|
||||
if (jdoctype) {
|
||||
docType = (nsIDOMDocumentType*)
|
||||
env->GetLongField(jdoctype, JavaDOMGlobals::nodeListPtrFID);
|
||||
if (!docType) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"DOMImplementation.createDocument: NULL arg pointer");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
nsIDOMDocument* doc = nsnull;
|
||||
nsresult rv = dom->CreateDocument(*namespaceURI, *qualifiedName, docType, &doc);
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(qualifiedName);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INVALID_CHARACTER_ERR ||
|
||||
rv == NS_ERROR_DOM_NAMESPACE_ERR ||
|
||||
rv == NS_ERROR_DOM_WRONG_DOCUMENT_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"DOMImplementation.createDocument: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, (nsIDOMNode*)doc);
|
||||
}
|
||||
759
mozilla/java/dom/jni/org_mozilla_dom_DocumentImpl.cpp
Normal file
759
mozilla/java/dom/jni/org_mozilla_dom_DocumentImpl.cpp
Normal file
@@ -0,0 +1,759 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDOMAttr.h"
|
||||
#include "nsIDOMComment.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIDOMDocumentType.h"
|
||||
#include "nsIDOMDocumentFragment.h"
|
||||
#include "nsIDOMNodeList.h"
|
||||
#include "nsIDOMCDATASection.h"
|
||||
#include "nsIDOMEntityReference.h"
|
||||
#include "nsIDOMDOMImplementation.h"
|
||||
#include "nsIDOMProcessingInstruction.h"
|
||||
#include "nsIDOMDocumentEvent.h"
|
||||
#include "nsDOMError.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "javaDOMEventsGlobals.h"
|
||||
#include "org_mozilla_dom_DocumentImpl.h"
|
||||
|
||||
static NS_DEFINE_IID(kIDOMDocumentEventIID, NS_IDOMDOCUMENTEVENT_IID);
|
||||
|
||||
// undefine macros from WINBASE.H
|
||||
#ifdef CreateEvent
|
||||
#undef CreateEvent
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createAttribute
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/Attr;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createAttribute
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createAttribute: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAttr* ret = nsnull;
|
||||
nsString* name = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!name)
|
||||
return NULL;
|
||||
|
||||
nsresult rv = doc->CreateAttribute(*name, &ret);
|
||||
nsString::Recycle(name);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_INVALID_CHARACTER_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createAttribute: failed", rv, exceptionType);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::attrClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createAttribute: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createAttribute: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createCDATASection
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/CDATASection;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createCDATASection
|
||||
(JNIEnv *env, jobject jthis, jstring jdata)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jdata) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createCDATASection: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMCDATASection* ret = nsnull;
|
||||
nsString* data = JavaDOMGlobals::GetUnicode(env, jdata);
|
||||
if (!data)
|
||||
return NULL;
|
||||
|
||||
nsresult rv = doc->CreateCDATASection(*data, &ret);
|
||||
nsString::Recycle(data);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_NOT_SUPPORTED_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createCDATASection: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::cDataSectionClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createCDATASection: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createCDATASection: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createComment
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/Comment;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createComment
|
||||
(JNIEnv *env, jobject jthis, jstring jdata)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jdata) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createComment: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMComment* ret = nsnull;
|
||||
nsString* data = JavaDOMGlobals::GetUnicode(env, jdata);
|
||||
if (!data)
|
||||
return NULL;
|
||||
|
||||
nsresult rv = doc->CreateComment(*data, &ret);
|
||||
nsString::Recycle(data);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createComment: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::commentClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createComment: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createComment: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createDocumentFragment
|
||||
* Signature: ()Lorg/w3c/dom/DocumentFragment;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createDocumentFragment
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createDocumentFragment: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMDocumentFragment* ret = nsnull;
|
||||
nsresult rv = doc->CreateDocumentFragment(&ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createDocumentFragment: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::documentFragmentClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createDocumentFragment: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createDocumentFragment: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createElement
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/Element;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createElement
|
||||
(JNIEnv *env, jobject jthis, jstring jtagName)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jtagName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createElement: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMElement* ret = nsnull;
|
||||
nsString* tagName = JavaDOMGlobals::GetUnicode(env, jtagName);
|
||||
if (!tagName)
|
||||
return NULL;
|
||||
nsresult rv = doc->CreateElement(*tagName, &ret);
|
||||
nsString::Recycle(tagName);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_INVALID_CHARACTER_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createElement: failed", rv, exceptionType);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::elementClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createElement: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createElement: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createEntityReference
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/EntityReference;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createEntityReference
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createEntityReference: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMEntityReference* ret = nsnull;
|
||||
nsString* name = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!name)
|
||||
return NULL;
|
||||
|
||||
nsresult rv = doc->CreateEntityReference(*name, &ret);
|
||||
nsString::Recycle(name);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INVALID_CHARACTER_ERR ||
|
||||
rv == NS_ERROR_DOM_NOT_SUPPORTED_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createEntityReference: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::entityReferenceClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createEntityReference: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createEntityReference: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createProcessingInstruction
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/ProcessingInstruction;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createProcessingInstruction
|
||||
(JNIEnv *env, jobject jthis, jstring jtarget, jstring jdata)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jtarget || !jdata) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createProcessingInstruction: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMProcessingInstruction* ret = nsnull;
|
||||
|
||||
nsString* target = JavaDOMGlobals::GetUnicode(env, jtarget);
|
||||
if (!target)
|
||||
return NULL;
|
||||
|
||||
nsString* data = JavaDOMGlobals::GetUnicode(env, jdata);
|
||||
if (!data) {
|
||||
nsString::Recycle(target);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsresult rv = doc->CreateProcessingInstruction(*target, *data, &ret);
|
||||
nsString::Recycle(target);
|
||||
nsString::Recycle(data);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_NOT_SUPPORTED_ERR ||
|
||||
rv == NS_ERROR_DOM_INVALID_CHARACTER_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createProcessingInstruction failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::processingInstructionClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createProcessingInstruction: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createProcessingInstruction: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createTextNode
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/Text;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createTextNode
|
||||
(JNIEnv *env, jobject jthis, jstring jdata)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jdata) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createTextNode: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMText* ret = nsnull;
|
||||
nsString* data = JavaDOMGlobals::GetUnicode(env, jdata);
|
||||
if (!data)
|
||||
return NULL;
|
||||
|
||||
nsresult rv = doc->CreateTextNode(*data, &ret);
|
||||
nsString::Recycle(data);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createTextNode failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::textClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createTextNode: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createTextNode: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: getDoctype
|
||||
* Signature: ()Lorg/w3c/dom/DocumentType;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_getDoctype
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc)
|
||||
return NULL;
|
||||
|
||||
nsIDOMDocumentType* docType = nsnull;
|
||||
nsresult rv = doc->GetDoctype(&docType);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getDoctype: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
if (!docType)
|
||||
return NULL;
|
||||
|
||||
jobject jDocType = env->AllocObject(JavaDOMGlobals::documentTypeClass);
|
||||
if (!jDocType) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getDoctype: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jDocType, JavaDOMGlobals::nodePtrFID, (jlong) docType);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getDoctype: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
docType->AddRef();
|
||||
return jDocType;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: getDocumentElement
|
||||
* Signature: ()Lorg/w3c/dom/Element;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_getDocumentElement
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getDocumentElement: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMElement* element = nsnull;
|
||||
nsresult rv = doc->GetDocumentElement(&element);
|
||||
if (NS_FAILED(rv) || !element) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getDocumentElement: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::elementClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getDocumentElement: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) element);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getDocumentElement: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
element->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: getElementsByTagName
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/NodeList;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_getElementsByTagName
|
||||
(JNIEnv *env, jobject jthis, jstring jtagName)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jtagName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementsByTagName: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNodeList* elements = nsnull;
|
||||
nsString* tagName = JavaDOMGlobals::GetUnicode(env, jtagName);
|
||||
if (!tagName)
|
||||
return NULL;
|
||||
|
||||
nsresult rv = doc->GetElementsByTagName(*tagName, &elements);
|
||||
nsString::Recycle(tagName);
|
||||
|
||||
if (NS_FAILED(rv) || !elements) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementsByTagName: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::nodeListClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementsByTagName: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) elements);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementsByTagName: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
elements->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: getImplementation
|
||||
* Signature: ()Lorg/w3c/dom/DOMImplementation;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_getImplementation
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getImplementation: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMDOMImplementation* impl = nsnull;
|
||||
nsresult rv = doc->GetImplementation(&impl);
|
||||
if (NS_FAILED(rv) || !impl) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getImplementation: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::domImplementationClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getImplementation: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) impl);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getImplementation: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
impl->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: createEvent
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/events/Event;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_createEvent
|
||||
(JNIEnv *env, jobject jthis, jstring jtype)
|
||||
{
|
||||
nsISupports *doc = (nsISupports*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jtype) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createEvent: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* type = JavaDOMGlobals::GetUnicode(env, jtype);
|
||||
if (!type)
|
||||
return NULL;
|
||||
|
||||
nsIDOMDocumentEvent* docEvent = nsnull;
|
||||
doc->QueryInterface(kIDOMDocumentEventIID, (void **) &docEvent);
|
||||
if(!docEvent) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createEvent: NULL DOMDocumentEvent pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMEvent* event = nsnull;
|
||||
nsresult rv = docEvent->CreateEvent(*type, &event);
|
||||
nsString::Recycle(type);
|
||||
|
||||
if (NS_FAILED(rv) || !event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.createEvent: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return JavaDOMEventsGlobals::CreateEventSubtype(env, event);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: getElementsByTagNameNS
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_getElementsByTagNameNS
|
||||
(JNIEnv *env, jobject jthis, jstring jnamespaceURI, jstring jlocalName)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jnamespaceURI || !jlocalName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementsByTagNameNS: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* namespaceURI = JavaDOMGlobals::GetUnicode(env, jnamespaceURI);
|
||||
if (!namespaceURI)
|
||||
return NULL;
|
||||
|
||||
nsString* localName = JavaDOMGlobals::GetUnicode(env, jlocalName);
|
||||
if (!localName) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNodeList* elements = nsnull;
|
||||
|
||||
nsresult rv = doc->GetElementsByTagNameNS(*namespaceURI, *localName, &elements);
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(localName);
|
||||
|
||||
if (NS_FAILED(rv) || !elements) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementsByTagNameNS: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::nodeListClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementsByTagNameNS: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) elements);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementsByTagNameNS: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
elements->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentImpl
|
||||
* Method: getElementById
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/Element;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentImpl_getElementById
|
||||
(JNIEnv *env, jobject jthis, jstring jelementId)
|
||||
{
|
||||
nsIDOMDocument* doc = (nsIDOMDocument*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!doc || !jelementId) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementById: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* elementId = JavaDOMGlobals::GetUnicode(env, jelementId);
|
||||
if (!elementId)
|
||||
return NULL;
|
||||
|
||||
nsIDOMElement* element = nsnull;
|
||||
nsresult rv = doc->GetElementById(*elementId, &element);
|
||||
nsString::Recycle(elementId);
|
||||
|
||||
if (NS_FAILED(rv) || !element) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Document.getElementById: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, (nsIDOMNode*)element);
|
||||
}
|
||||
243
mozilla/java/dom/jni/org_mozilla_dom_DocumentTypeImpl.cpp
Normal file
243
mozilla/java/dom/jni/org_mozilla_dom_DocumentTypeImpl.cpp
Normal file
@@ -0,0 +1,243 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMDocumentType.h"
|
||||
#include "nsIDOMNamedNodeMap.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_DocumentTypeImpl.h"
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentTypeImpl
|
||||
* Method: getEntities
|
||||
* Signature: ()Lorg/w3c/dom/NamedNodeMap;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentTypeImpl_getEntities
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocumentType* docType = (nsIDOMDocumentType*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!docType) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DocumentType.getEntities: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNamedNodeMap* nodeMap = nsnull;
|
||||
nsresult rv = docType->GetEntities(&nodeMap);
|
||||
if (NS_FAILED(rv) || !nodeMap) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getEntities: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::namedNodeMapClass);
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getEntities: failed to allocate object\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::namedNodeMapPtrFID, (jlong) nodeMap);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getEntities: failed to set node ptr: %x\n", nodeMap));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nodeMap->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentTypeImpl
|
||||
* Method: getName
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_DocumentTypeImpl_getName
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocumentType* docType = (nsIDOMDocumentType*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!docType) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DocumentType.getName: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = docType->GetName(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getName: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getName: NewString failed\n"));
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentTypeImpl
|
||||
* Method: getNotations
|
||||
* Signature: ()Lorg/w3c/dom/NamedNodeMap;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_DocumentTypeImpl_getNotations
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocumentType* docType = (nsIDOMDocumentType*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!docType) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DocumentType.getNotations: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNamedNodeMap* nodeMap = nsnull;
|
||||
nsresult rv = docType->GetNotations(&nodeMap);
|
||||
if (NS_FAILED(rv) || !nodeMap) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getNotations: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::namedNodeMapClass);
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getNotations: failed to allocate object\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::namedNodeMapPtrFID, (jlong) nodeMap);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getNotations: failed to set node ptr: %x\n", nodeMap));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nodeMap->AddRef();
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentTypeImpl
|
||||
* Method: getPublicId
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_DocumentTypeImpl_getPublicId
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocumentType* docType = (nsIDOMDocumentType*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!docType) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DocumentType.getPublicId: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = docType->GetPublicId(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getPublicId: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getPublicId: NewString failed\n"));
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentTypeImpl
|
||||
* Method: getSystemId
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_DocumentTypeImpl_getSystemId
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocumentType* docType = (nsIDOMDocumentType*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!docType) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DocumentType.getSystemId: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = docType->GetSystemId(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getSystemId: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getSystemId: NewString failed\n"));
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_DocumentTypeImpl
|
||||
* Method: getInternalSubset
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_DocumentTypeImpl_getInternalSubset
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMDocumentType* docType = (nsIDOMDocumentType*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!docType) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("DocumentType.getInternalSubset: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = docType->GetInternalSubset(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getInternalSubset: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("DocumentType.getInternalSubset: NewString failed\n"));
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
770
mozilla/java/dom/jni/org_mozilla_dom_ElementImpl.cpp
Normal file
770
mozilla/java/dom/jni/org_mozilla_dom_ElementImpl.cpp
Normal file
@@ -0,0 +1,770 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIDOMAttr.h"
|
||||
#include "nsIDOMNodeList.h"
|
||||
#include "nsDOMError.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_ElementImpl.h"
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: getAttribute
|
||||
* Signature: (Ljava/lang/String;)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_ElementImpl_getAttribute
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttribute: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* cname = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!cname)
|
||||
return NULL;
|
||||
|
||||
nsString attr;
|
||||
nsresult rv = element->GetAttribute(*cname, attr);
|
||||
nsString::Recycle(cname);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttribute: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jattr = env->NewString(attr.GetUnicode(), attr.Length());
|
||||
if (!jattr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttribute: NewString failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jattr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: getAttributeNode
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/Attr;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_ElementImpl_getAttributeNode
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttributeNode: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* cname = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!cname)
|
||||
return NULL;
|
||||
|
||||
nsIDOMAttr* attr = nsnull;
|
||||
nsresult rv = element->GetAttributeNode(*cname, &attr);
|
||||
nsString::Recycle(cname);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttributeNode: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
if (!attr)
|
||||
return NULL;
|
||||
|
||||
jobject jattr = env->AllocObject(JavaDOMGlobals::attrClass);
|
||||
if (!jattr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttributeNode: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jattr, JavaDOMGlobals::nodePtrFID, (jlong) attr);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttributeNode: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
attr->AddRef();
|
||||
return jattr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: getElementsByTagName
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/NodeList;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_ElementImpl_getElementsByTagName
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getElementsByTagName: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* cname = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!cname)
|
||||
return NULL;
|
||||
|
||||
nsIDOMNodeList* nodes = nsnull;
|
||||
nsresult rv = element->GetElementsByTagName(*cname, &nodes);
|
||||
nsString::Recycle(cname);
|
||||
|
||||
if (NS_FAILED(rv) || !nodes) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getElementsByTagName: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jnodes = env->AllocObject(JavaDOMGlobals::nodeListClass);
|
||||
if (!jnodes) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getElementsByTagName: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jnodes, JavaDOMGlobals::nodeListPtrFID, (jlong) nodes);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getElementsByTagName: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nodes->AddRef();
|
||||
return jnodes;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: getTagName
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_ElementImpl_getTagName
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getTagName: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString tagName;
|
||||
nsresult rv = element->GetTagName(tagName);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getTagName: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jTagName = env->NewString(tagName.GetUnicode(), tagName.Length());
|
||||
if (!jTagName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getTagName: NewString failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jTagName;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: normalize
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_ElementImpl_normalize
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.normalize: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = element->Normalize();
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.normalize: failed", rv);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: removeAttribute
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_ElementImpl_removeAttribute
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttribute: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* name = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!name)
|
||||
return;
|
||||
|
||||
nsresult rv = element->RemoveAttribute(*name);
|
||||
nsString::Recycle(name);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttribute: failed", rv, exceptionType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: removeAttributeNode
|
||||
* Signature: (Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_ElementImpl_removeAttributeNode
|
||||
(JNIEnv *env, jobject jthis, jobject joldAttr)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !joldAttr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttributeNode: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAttr* oldAttr = (nsIDOMAttr*)
|
||||
env->GetLongField(joldAttr, JavaDOMGlobals::nodePtrFID);
|
||||
if (!oldAttr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttributeNode: NULL arg pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAttr* ret = nsnull;
|
||||
nsresult rv = element->RemoveAttributeNode(oldAttr, &ret);
|
||||
if (NS_FAILED(rv) || !ret) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR ||
|
||||
rv == NS_ERROR_DOM_NOT_FOUND_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttributeNode: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jattr = env->AllocObject(JavaDOMGlobals::attrClass);
|
||||
if (!jattr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttributeNode: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jattr, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttributeNode: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jattr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: setAttribute
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_ElementImpl_setAttribute
|
||||
(JNIEnv *env, jobject jthis, jstring jname, jstring jvalue)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jname || !jvalue) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttribute: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* name = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!name)
|
||||
return;
|
||||
|
||||
nsString* value = JavaDOMGlobals::GetUnicode(env, jvalue);
|
||||
if (!value) {
|
||||
nsString::Recycle(name);
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = element->SetAttribute(*name, *value);
|
||||
nsString::Recycle(value);
|
||||
nsString::Recycle(name);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INVALID_CHARACTER_ERR ||
|
||||
rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttribute: failed", rv, exceptionType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: setAttributeNode
|
||||
* Signature: (Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_ElementImpl_setAttributeNode
|
||||
(JNIEnv *env, jobject jthis, jobject jnewAttr)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jnewAttr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNode: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAttr* newAttr = (nsIDOMAttr*)
|
||||
env->GetLongField(jnewAttr, JavaDOMGlobals::nodePtrFID);
|
||||
if (!newAttr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNode: NULL arg pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAttr* ret = nsnull;
|
||||
nsresult rv = element->SetAttributeNode(newAttr, &ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR ||
|
||||
rv == NS_ERROR_DOM_WRONG_DOCUMENT_ERR ||
|
||||
rv == NS_ERROR_DOM_INUSE_ATTRIBUTE_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNode: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
if (!ret)
|
||||
return NULL;
|
||||
|
||||
jobject jattr = env->AllocObject(JavaDOMGlobals::attrClass);
|
||||
if (!jattr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNode: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jattr, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNode: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jattr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: getAttributeNS
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_ElementImpl_getAttributeNS
|
||||
(JNIEnv *env, jobject jthis, jstring jnamespaceURI, jstring jlocalName)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jnamespaceURI || !jlocalName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttributeNS: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* namespaceURI = JavaDOMGlobals::GetUnicode(env, jnamespaceURI);
|
||||
if (!namespaceURI)
|
||||
return NULL;
|
||||
|
||||
nsString* localName = JavaDOMGlobals::GetUnicode(env, jlocalName);
|
||||
if (!localName) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = element->GetAttributeNS(*namespaceURI, *localName, ret);
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(localName);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttributeNS: failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Element.getAttributeNS: NewString failed\n"));
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: setAttributeNS
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_ElementImpl_setAttributeNS
|
||||
(JNIEnv *env, jobject jthis, jstring jnamespaceURI, jstring jqualifiedName, jstring jvalue)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jnamespaceURI || !jqualifiedName || !jvalue) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNS: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* namespaceURI = JavaDOMGlobals::GetUnicode(env, jnamespaceURI);
|
||||
if (!namespaceURI)
|
||||
return;
|
||||
|
||||
nsString* qualifiedName = JavaDOMGlobals::GetUnicode(env, jqualifiedName);
|
||||
if (!qualifiedName) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* value = JavaDOMGlobals::GetUnicode(env, jvalue);
|
||||
if (!value) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(qualifiedName);
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = element->SetAttributeNS(*namespaceURI, *qualifiedName, *value);
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(qualifiedName);
|
||||
nsString::Recycle(value);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_INVALID_CHARACTER_ERR ||
|
||||
rv == NS_ERROR_DOM_NAMESPACE_ERR ||
|
||||
rv == NS_ERROR_DOM_WRONG_DOCUMENT_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ElementImpl.setAttributeNS: failed", rv, exceptionType);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: removeAttributeNS
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_ElementImpl_removeAttributeNS
|
||||
(JNIEnv *env, jobject jthis, jstring jnamespaceURI, jstring jlocalName)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jnamespaceURI || !jlocalName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttributeNS: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* namespaceURI = JavaDOMGlobals::GetUnicode(env, jnamespaceURI);
|
||||
if (!namespaceURI)
|
||||
return;
|
||||
|
||||
nsString* localName = JavaDOMGlobals::GetUnicode(env, jlocalName);
|
||||
if (!localName) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = element->RemoveAttributeNS(*namespaceURI, *localName);
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(localName);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.removeAttributeNS: failed", rv, exceptionType);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: getAttributeNodeNS
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Attr;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_ElementImpl_getAttributeNodeNS
|
||||
(JNIEnv *env, jobject jthis, jstring jnamespaceURI, jstring jlocalName)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jnamespaceURI || !jlocalName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttributeNodeNS: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* namespaceURI = JavaDOMGlobals::GetUnicode(env, jnamespaceURI);
|
||||
if (!namespaceURI)
|
||||
return NULL;
|
||||
|
||||
nsString* localName = JavaDOMGlobals::GetUnicode(env, jlocalName);
|
||||
if (!localName) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAttr* attr = nsnull;
|
||||
nsresult rv = element->GetAttributeNodeNS(*namespaceURI, *localName, &attr);
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(localName);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getAttributeNodeNS: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
if (!attr)
|
||||
return NULL;
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, (nsIDOMNode*)attr);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: setAttributeNodeNS
|
||||
* Signature: (Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_ElementImpl_setAttributeNodeNS
|
||||
(JNIEnv *env, jobject jthis, jobject jnewAttr)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jnewAttr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNodeNS: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAttr* newAttr = (nsIDOMAttr*)
|
||||
env->GetLongField(jnewAttr, JavaDOMGlobals::nodePtrFID);
|
||||
if (!newAttr) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNodeNS: NULL arg pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAttr* ret = nsnull;
|
||||
nsresult rv = element->SetAttributeNodeNS(newAttr, &ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR ||
|
||||
rv == NS_ERROR_DOM_WRONG_DOCUMENT_ERR ||
|
||||
rv == NS_ERROR_DOM_INUSE_ATTRIBUTE_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.setAttributeNodeNS: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
if (!ret)
|
||||
return NULL;
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, (nsIDOMNode*)ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: getElementsByTagNameNS
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_ElementImpl_getElementsByTagNameNS
|
||||
(JNIEnv *env, jobject jthis, jstring jnamespaceURI, jstring jlocalName)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jnamespaceURI || !jlocalName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getElementsByTagNameNS: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString* namespaceURI = JavaDOMGlobals::GetUnicode(env, jnamespaceURI);
|
||||
if (!namespaceURI)
|
||||
return NULL;
|
||||
|
||||
nsString* localName = JavaDOMGlobals::GetUnicode(env, jlocalName);
|
||||
if (!localName) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNodeList* nodes = nsnull;
|
||||
nsresult rv = element->GetElementsByTagNameNS(*namespaceURI, *localName, &nodes);
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(localName);
|
||||
|
||||
if (NS_FAILED(rv) || !nodes) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getElementsByTagNameNS: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jnodes = env->AllocObject(JavaDOMGlobals::nodeListClass);
|
||||
if (!jnodes) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getElementsByTagNameNS: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jnodes, JavaDOMGlobals::nodeListPtrFID, (jlong) nodes);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.getElementsByTagNameNS: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nodes->AddRef();
|
||||
return jnodes;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: hasAttribute
|
||||
* Signature: (Ljava/lang/String;)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_ElementImpl_hasAttribute
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.hasAttribute: NULL pointer");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
nsString* name = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!name)
|
||||
return JNI_FALSE;
|
||||
|
||||
PRBool hasAttr = PR_FALSE;
|
||||
nsresult rv = element->HasAttribute(*name, &hasAttr);
|
||||
nsString::Recycle(name);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.hasAttribute: failed", rv);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (hasAttr == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ElementImpl
|
||||
* Method: hasAttributeNS
|
||||
* Signature: (Ljava/lang/String;Ljava/lang/String;)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_ElementImpl_hasAttributeNS
|
||||
(JNIEnv *env, jobject jthis, jstring jnamespaceURI, jstring jlocalName)
|
||||
{
|
||||
nsIDOMElement* element = (nsIDOMElement*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!element || !jnamespaceURI || !jlocalName) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.hasAttributeNS: NULL pointer");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
nsString* namespaceURI = JavaDOMGlobals::GetUnicode(env, jnamespaceURI);
|
||||
if (!namespaceURI)
|
||||
return JNI_FALSE;
|
||||
|
||||
nsString* localName = JavaDOMGlobals::GetUnicode(env, jlocalName);
|
||||
if (!localName) {
|
||||
nsString::Recycle(namespaceURI);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
PRBool hasAttr = PR_FALSE;
|
||||
nsresult rv = element->HasAttributeNS(*namespaceURI, *localName, &hasAttr);
|
||||
nsString::Recycle(namespaceURI);
|
||||
nsString::Recycle(localName);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Element.hasAttributeNS: failed", rv);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (hasAttr == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
128
mozilla/java/dom/jni/org_mozilla_dom_EntityImpl.cpp
Normal file
128
mozilla/java/dom/jni/org_mozilla_dom_EntityImpl.cpp
Normal file
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMEntity.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_EntityImpl.h"
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_EntityImpl
|
||||
* Method: getNotationName
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_EntityImpl_getNotationName
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEntity* entity = (nsIDOMEntity*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!entity) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("Entity.getNotationName: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = entity->GetNotationName(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Entity.getNotationName: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Entity.getNotationName: NewString failed\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_EntityImpl
|
||||
* Method: getPublicId
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_EntityImpl_getPublicId
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEntity* entity = (nsIDOMEntity*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!entity) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("Entity.getPublicId: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = entity->GetPublicId(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Entity.getPublicId: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Entity.getPublicId: NewString failed\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_EntityImpl
|
||||
* Method: getSystemId
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_EntityImpl_getSystemId
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEntity* entity = (nsIDOMEntity*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!entity) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("Entity.getSystemId: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = entity->GetSystemId(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Entity.getSystemId: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Entity.getSystemId: NewString failed\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
207
mozilla/java/dom/jni/org_mozilla_dom_NamedNodeMapImpl.cpp
Normal file
207
mozilla/java/dom/jni/org_mozilla_dom_NamedNodeMapImpl.cpp
Normal file
@@ -0,0 +1,207 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMNamedNodeMap.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "nsDOMError.h"
|
||||
#include "org_mozilla_dom_NamedNodeMapImpl.h"
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NamedNodeMapImpl
|
||||
* Method: getLength
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_NamedNodeMapImpl_getLength
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMNamedNodeMap* map = (nsIDOMNamedNodeMap*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::namedNodeMapPtrFID);
|
||||
if (!map) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.getLength: NULL pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRUint32 length = 0;
|
||||
nsresult rv = map->GetLength(&length);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.getLength: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jint) length;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NamedNodeMapImpl
|
||||
* Method: getNamedItem
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/Node;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_NamedNodeMapImpl_getNamedItem
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMNamedNodeMap* map = (nsIDOMNamedNodeMap*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::namedNodeMapPtrFID);
|
||||
if (!map || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.getNamedItem: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNode* node = nsnull;
|
||||
nsString* name = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!name)
|
||||
return NULL;
|
||||
|
||||
nsresult rv = map->GetNamedItem(*name, &node);
|
||||
nsString::Recycle(name);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.getNamedItem: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
if (!node)
|
||||
return NULL;
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NamedNodeMapImpl
|
||||
* Method: item
|
||||
* Signature: (I)Lorg/w3c/dom/Node;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_NamedNodeMapImpl_item
|
||||
(JNIEnv *env, jobject jthis, jint jindex)
|
||||
{
|
||||
if (jindex < 0 || jindex > JavaDOMGlobals::javaMaxInt) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NamedNodeMap.item: invalid index value (%d)\n", jindex));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNamedNodeMap* map = (nsIDOMNamedNodeMap*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::namedNodeMapPtrFID);
|
||||
if (!map) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.item: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNode* node = nsnull;
|
||||
nsresult rv = map->Item((PRUint32) jindex, &node);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.item: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
if (!node)
|
||||
return NULL;
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NamedNodeMapImpl
|
||||
* Method: removeNamedItem
|
||||
* Signature: (Ljava/lang/String;)Lorg/w3c/dom/Node;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_NamedNodeMapImpl_removeNamedItem
|
||||
(JNIEnv *env, jobject jthis, jstring jname)
|
||||
{
|
||||
nsIDOMNamedNodeMap* map = (nsIDOMNamedNodeMap*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::namedNodeMapPtrFID);
|
||||
if (!map || !jname) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.removeNamedItem: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNode* node = nsnull;
|
||||
nsString* name = JavaDOMGlobals::GetUnicode(env, jname);
|
||||
if (!name)
|
||||
return NULL;
|
||||
|
||||
nsresult rv = map->RemoveNamedItem(*name, &node);
|
||||
nsString::Recycle(name);
|
||||
|
||||
if (NS_FAILED(rv) || !node) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_NOT_FOUND_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.removeNamedItem: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NamedNodeMapImpl
|
||||
* Method: setNamedItem
|
||||
* Signature: (Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_NamedNodeMapImpl_setNamedItem
|
||||
(JNIEnv *env, jobject jthis, jobject jarg)
|
||||
{
|
||||
nsIDOMNamedNodeMap* map = (nsIDOMNamedNodeMap*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::namedNodeMapPtrFID);
|
||||
if (!map || !jarg) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.setNamedItem: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNode* arg = (nsIDOMNode*)
|
||||
env->GetLongField(jarg, JavaDOMGlobals::namedNodeMapPtrFID);
|
||||
if (!arg) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.setNamedItem: NULL item pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNode* node = nsnull;
|
||||
nsresult rv = map->SetNamedItem(arg, &node);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR ||
|
||||
rv == NS_ERROR_DOM_WRONG_DOCUMENT_ERR ||
|
||||
rv == NS_ERROR_DOM_INUSE_ATTRIBUTE_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"NodeMap.setNamedItem: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
if (!node)
|
||||
return NULL;
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
1115
mozilla/java/dom/jni/org_mozilla_dom_NodeImpl.cpp
Normal file
1115
mozilla/java/dom/jni/org_mozilla_dom_NodeImpl.cpp
Normal file
File diff suppressed because it is too large
Load Diff
192
mozilla/java/dom/jni/org_mozilla_dom_NodeListImpl.cpp
Normal file
192
mozilla/java/dom/jni/org_mozilla_dom_NodeListImpl.cpp
Normal file
@@ -0,0 +1,192 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMNodeList.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_NodeListImpl.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NodeListImpl
|
||||
* Method: XPCOM_equals
|
||||
* Signature: (Ljava/lang/Object;)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_NodeListImpl_XPCOM_1equals
|
||||
(JNIEnv *env, jobject jthis, jobject jarg)
|
||||
{
|
||||
jboolean b_retFlag = JNI_FALSE;
|
||||
|
||||
nsIDOMNodeList* p_this =
|
||||
(nsIDOMNodeList*) env->GetLongField(jthis, JavaDOMGlobals::nodeListPtrFID);
|
||||
if (!p_this) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NodeList.equals: NULL pointer\n"));
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
nsIDOMNodeList* p_arg =
|
||||
(nsIDOMNodeList*) env->GetLongField(jarg, JavaDOMGlobals::nodeListPtrFID);
|
||||
if (!p_arg) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NodeList.equals: NULL arg pointer\n"));
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
nsISupports* thisSupports = nsnull;
|
||||
nsISupports* argSupports = nsnull;
|
||||
|
||||
nsresult rvThis =
|
||||
p_this->QueryInterface(kISupportsIID, (void**)(&thisSupports));
|
||||
if (NS_FAILED(rvThis) || !thisSupports) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NodeList.equals: this->QueryInterface failed (%x)\n", rvThis));
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
nsresult rvArg =
|
||||
p_arg->QueryInterface(kISupportsIID, (void**)(&argSupports));
|
||||
if (NS_FAILED(rvArg) || !argSupports) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NodeList.equals: arg->QueryInterface failed (%x)\n", rvArg));
|
||||
thisSupports->Release();
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
if (thisSupports == argSupports)
|
||||
b_retFlag = JNI_TRUE;
|
||||
|
||||
thisSupports->Release();
|
||||
argSupports->Release();
|
||||
|
||||
return b_retFlag;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NodeListImpl
|
||||
* Method: XPCOM_hashCode
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_NodeListImpl_XPCOM_1hashCode
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMNodeList* p_this =
|
||||
(nsIDOMNodeList*) env->GetLongField(jthis, JavaDOMGlobals::nodeListPtrFID);
|
||||
if (!p_this) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NodeList.hashCode: NULL pointer\n"));
|
||||
return (jint) 0;
|
||||
}
|
||||
|
||||
nsISupports* thisSupports = nsnull;
|
||||
nsresult rvThis =
|
||||
p_this->QueryInterface(kISupportsIID, (void**)(&thisSupports));
|
||||
if (NS_FAILED(rvThis) || !thisSupports) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NodeList.hashCode: QueryInterface failed (%x)\n", rvThis));
|
||||
return (jint) 0;
|
||||
}
|
||||
|
||||
thisSupports->Release();
|
||||
return (jint) thisSupports;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NodeListImpl
|
||||
* Method: finalize
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_NodeListImpl_finalize
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMNodeList* nodes = (nsIDOMNodeList*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodeListPtrFID);
|
||||
if (!nodes) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NodeList.finalize: NULL pointer\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
JavaDOMGlobals::AddToGarbage(nodes);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NodeListImpl
|
||||
* Method: getLength
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_NodeListImpl_getLength
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMNodeList* nodes = (nsIDOMNodeList*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodeListPtrFID);
|
||||
if (!nodes) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NodeList.getLength: NULL pointer\n"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRUint32 length = 0;
|
||||
nsresult rv = nodes->GetLength(&length);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NodeList.getLength: failed (%x)\n", rv));
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jint) length;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NodeListImpl
|
||||
* Method: item
|
||||
* Signature: (I)Lorg/w3c/dom/Node;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_NodeListImpl_item
|
||||
(JNIEnv *env, jobject jthis, jint jindex)
|
||||
{
|
||||
if (jindex < 0 || jindex > JavaDOMGlobals::javaMaxInt) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NodeList.item: invalid index value (%d)\n", jindex));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNodeList* nodes = (nsIDOMNodeList*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodeListPtrFID);
|
||||
if (!nodes) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("NodeList.item: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNode* node = NULL;
|
||||
nsresult rv = nodes->Item((PRUint32) jindex, &node);
|
||||
if (NS_FAILED(rv) || !node) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("NodeList.item: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
94
mozilla/java/dom/jni/org_mozilla_dom_NotationImpl.cpp
Normal file
94
mozilla/java/dom/jni/org_mozilla_dom_NotationImpl.cpp
Normal file
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMNotation.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_NotationImpl.h"
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NotationImpl
|
||||
* Method: getPublicId
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_NotationImpl_getPublicId
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMNotation* notation = (nsIDOMNotation*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!notation) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("Notation.getPublicId: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = notation->GetPublicId(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Notation.getPublicId: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Notation.getPublicId: NewString failed\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_NotationImpl
|
||||
* Method: getSystemId
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_NotationImpl_getSystemId
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMNotation* notation = (nsIDOMNotation*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!notation) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_WARNING,
|
||||
("Notation.getSystemId: NULL pointer\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = notation->GetSystemId(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Notation.getSystemId: failed (%x)\n", rv));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Notation.getSystemId: NewString failed\n"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMProcessingInstruction.h"
|
||||
#include "nsDOMError.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_ProcessingInstructionImpl.h"
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ProcessingInstructionImpl
|
||||
* Method: getData
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_ProcessingInstructionImpl_getData
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMProcessingInstruction* pi = (nsIDOMProcessingInstruction*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!pi) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ProcessingInstruction.getData: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = pi->GetData(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ProcessingInstruction.getData: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ProcessingInstruction.getData: NewString failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ProcessingInstructionImpl
|
||||
* Method: getTarget
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_ProcessingInstructionImpl_getTarget
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMProcessingInstruction* pi = (nsIDOMProcessingInstruction*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!pi) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ProcessingInstruction.getTarget: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = pi->GetTarget(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ProcessingInstruction.getTarget: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ProcessingInstruction.getTarget: NewString failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_ProcessingInstructionImpl
|
||||
* Method: setData
|
||||
* Signature: (Ljava/lang/String;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_ProcessingInstructionImpl_setData
|
||||
(JNIEnv *env, jobject jthis, jstring jdata)
|
||||
{
|
||||
nsIDOMProcessingInstruction* pi = (nsIDOMProcessingInstruction*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!pi || !jdata) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ProcessingInstruction.setData: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* data = JavaDOMGlobals::GetUnicode(env, jdata);
|
||||
if (!data)
|
||||
return;
|
||||
|
||||
nsresult rv = pi->SetData(*data);
|
||||
nsString::Recycle(data);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"ProcessingInstruction.setData: failed", rv, exceptionType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
82
mozilla/java/dom/jni/org_mozilla_dom_TextImpl.cpp
Normal file
82
mozilla/java/dom/jni/org_mozilla_dom_TextImpl.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMText.h"
|
||||
#include "nsDOMError.h"
|
||||
#include "javaDOMGlobals.h"
|
||||
#include "org_mozilla_dom_TextImpl.h"
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_TextImpl
|
||||
* Method: splitText
|
||||
* Signature: (I)Lorg/w3c/dom/Text;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_TextImpl_splitText
|
||||
(JNIEnv *env, jobject jthis, jint joffset)
|
||||
{
|
||||
if (joffset < 0 || joffset > JavaDOMGlobals::javaMaxInt) {
|
||||
JavaDOMGlobals::ThrowException(env, "Text.splitText: failed",
|
||||
NS_ERROR_DOM_INDEX_SIZE_ERR,
|
||||
JavaDOMGlobals::EXCEPTION_DOM);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMText* text = (nsIDOMText*)
|
||||
env->GetLongField(jthis, JavaDOMGlobals::nodePtrFID);
|
||||
if (!text) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Text.splitText: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMText* ret = nsnull;
|
||||
nsresult rv = text->SplitText((PRUint32) joffset, &ret);
|
||||
if (NS_FAILED(rv) || !ret) {
|
||||
JavaDOMGlobals::ExceptionType exceptionType = JavaDOMGlobals::EXCEPTION_RUNTIME;
|
||||
if (NS_ERROR_GET_MODULE(rv) == NS_ERROR_MODULE_DOM &&
|
||||
(rv == NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR ||
|
||||
rv == NS_ERROR_DOM_INDEX_SIZE_ERR)) {
|
||||
exceptionType = JavaDOMGlobals::EXCEPTION_DOM;
|
||||
}
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Text.splitText: failed", rv, exceptionType);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jobject jret = env->AllocObject(JavaDOMGlobals::textClass);
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Text.splitText: failed to allocate object");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
env->SetLongField(jret, JavaDOMGlobals::nodePtrFID, (jlong) ret);
|
||||
if (env->ExceptionOccurred()) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Text.splitText: failed to set node ptr");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->AddRef();
|
||||
return jret;
|
||||
}
|
||||
383
mozilla/java/dom/jni/org_mozilla_dom_events_EventImpl.cpp
Normal file
383
mozilla/java/dom/jni/org_mozilla_dom_events_EventImpl.cpp
Normal file
@@ -0,0 +1,383 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include"nsIDOMEvent.h"
|
||||
#include"nsIDOMEventTarget.h"
|
||||
#include"javaDOMEventsGlobals.h"
|
||||
#include "org_mozilla_dom_events_EventImpl.h"
|
||||
|
||||
// static NS_DEFINE_IID(kIDOMNodeIID, NS_IDOMNODE_IID);
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: getCurrentTarget
|
||||
* Signature: ()Lorg/w3c/dom/events/EventTarget;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_events_EventImpl_getCurrentTarget
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getCurrentNode: NULL pointer\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMEventTarget* ret = nsnull;
|
||||
nsresult rv = event->GetCurrentTarget(&ret);
|
||||
if (NS_FAILED(rv) || !ret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getCurrentNode: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMNode* node = nsnull;
|
||||
rv = ret->QueryInterface(NS_GET_IID(nsIDOMNode), (void**)&node);
|
||||
printf("========== rv:%x node:%x", rv, node);
|
||||
// return JavaDOMGlobals::CreateNodeSubtype(env, ret);
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: getEventPhase
|
||||
* Signature: ()S
|
||||
*/
|
||||
JNIEXPORT jshort JNICALL Java_org_mozilla_dom_events_EventImpl_getEventPhase
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getEventPhase: NULL native pointer\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRUint16 eventPhase = 0;
|
||||
nsresult rv = event->GetEventPhase(&eventPhase);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getEventPhase: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
jfieldID phaseFID = NULL;
|
||||
switch(eventPhase) {
|
||||
case nsIDOMEvent::BUBBLING_PHASE:
|
||||
phaseFID = JavaDOMEventsGlobals::eventPhaseBubblingFID;
|
||||
break;
|
||||
case nsIDOMEvent::CAPTURING_PHASE:
|
||||
phaseFID = JavaDOMEventsGlobals::eventPhaseCapturingFID;
|
||||
break;
|
||||
case nsIDOMEvent::AT_TARGET:
|
||||
phaseFID = JavaDOMEventsGlobals::eventPhaseAtTargetFID;
|
||||
break;
|
||||
}
|
||||
|
||||
jshort ret = 0;
|
||||
if (phaseFID) {
|
||||
ret = env->GetStaticShortField(JavaDOMEventsGlobals::eventClass, phaseFID);
|
||||
if (env->ExceptionOccurred()) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Event.getEventPhase: slection of phaseFID failed\n"));
|
||||
return ret;
|
||||
}
|
||||
|
||||
} else {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getEventPhase: illegal phase");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: getBubbles
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_events_EventImpl_getBubbles
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getBubbles: NULL pointer");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
PRBool canBubble = PR_FALSE;
|
||||
nsresult rv = event->GetBubbles(&canBubble);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getBubbles: failed", rv);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (canBubble == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: getCancelable
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_events_EventImpl_getCancelable
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getCancelable: NULL pointer");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
PRBool cancelable = PR_FALSE;
|
||||
nsresult rv = event->GetCancelable(&cancelable);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getCancelable: failed", rv);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (cancelable == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: getTarget
|
||||
* Signature: ()Lorg/w3c/dom/events/EventTarget;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_events_EventImpl_getTarget
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getTarget: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMEventTarget* ret = nsnull;
|
||||
nsresult rv = event->GetTarget(&ret);
|
||||
if (NS_FAILED(rv) || !ret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getTarget: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
nsIDOMNode* node = nsnull;
|
||||
rv = ret->QueryInterface(NS_GET_IID(nsIDOMNode), (void**)&node);
|
||||
printf("========== rv:%x node:%x", rv, node);
|
||||
// return JavaDOMGlobals::CreateNodeSubtype(env, ret);
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: getType
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_org_mozilla_dom_events_EventImpl_getType
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getType: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsString ret;
|
||||
nsresult rv = event->GetType(ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getType: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jstring jret = env->NewString(ret.GetUnicode(), ret.Length());
|
||||
if (!jret) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getType: NewString failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: preventBubble
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_events_EventImpl_preventBubble
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.preventBubble: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = event->PreventBubble();
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.preventBubble: failed", rv);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: preventCapture
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_events_EventImpl_preventCapture
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.preventCapture: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = event->PreventCapture();
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.preventCapture: failed", rv);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: preventDefault
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_events_EventImpl_preventDefault
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.preventDefault: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = event->PreventDefault();
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.preventDefault: failed", rv);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: initEvent
|
||||
* Signature: (Ljava/lang/String;ZZ)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_events_EventImpl_initEvent
|
||||
(JNIEnv *env, jobject jthis, jstring jeventTypeArg, jboolean jcanBubbleArg, jboolean jcancelableArg)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event || !jeventTypeArg) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.initEvent: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* cvalue = JavaDOMGlobals::GetUnicode(env, jeventTypeArg);
|
||||
if (!cvalue)
|
||||
return;
|
||||
|
||||
PRBool canBubble = jcanBubbleArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
PRBool cancelable = jcancelableArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
|
||||
nsresult rv = event->InitEvent(*cvalue, canBubble, cancelable);
|
||||
nsString::Recycle(cvalue);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
PR_LOG(JavaDOMGlobals::log, PR_LOG_ERROR,
|
||||
("Event.initEvent: failed (%x)\n", rv));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: stopPropagation
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_events_EventImpl_stopPropagation
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.stopPropagation: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsresult rv = event->StopPropagation();
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.stopPropagation: failed", rv);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_EventImpl
|
||||
* Method: getTimeStamp
|
||||
* Signature: ()J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_org_mozilla_dom_events_EventImpl_getTimeStamp
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMEvent* event = (nsIDOMEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getTimeStamp: NULL pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRUint64 aTimeStamp;
|
||||
nsresult rv = event->GetTimeStamp(&aTimeStamp);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getTimeStamp: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jlong)aTimeStamp;
|
||||
}
|
||||
374
mozilla/java/dom/jni/org_mozilla_dom_events_MouseEventImpl.cpp
Normal file
374
mozilla/java/dom/jni/org_mozilla_dom_events_MouseEventImpl.cpp
Normal file
@@ -0,0 +1,374 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMMouseEvent.h"
|
||||
#include "nsIDOMEventTarget.h"
|
||||
#include "javaDOMEventsGlobals.h"
|
||||
#include "org_mozilla_dom_events_MouseEventImpl.h"
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getAltKey
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getAltKey
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getAltKey: NULL pointer");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
PRBool altKey = PR_FALSE;
|
||||
nsresult rv = event->GetAltKey(&altKey);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getAltKey: failed", rv);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (altKey == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getButton
|
||||
* Signature: ()S
|
||||
*/
|
||||
JNIEXPORT jshort JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getButton
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getButton: NULL pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRUint16 code = 0;
|
||||
nsresult rv = event->GetButton(&code);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getButton: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jshort) code;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getClientX
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getClientX
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getClientX: NULL pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32 clientX = 0;
|
||||
nsresult rv = event->GetClientX(&clientX);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getClientX: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jint) clientX;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getClientY
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getClientY
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getClientY: NULL pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32 clientY = 0;
|
||||
nsresult rv = event->GetClientY(&clientY);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getClientY: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jint) clientY;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getCtrlKey
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getCtrlKey
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getCtrlKey: NULL pointer");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
PRBool ctrlKey = PR_FALSE;
|
||||
nsresult rv = event->GetCtrlKey(&ctrlKey);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getCtrlKey: failed", rv);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (ctrlKey == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getMetaKey
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getMetaKey
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getMetaKey: NULL pointer");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
PRBool metaKey = PR_FALSE;
|
||||
nsresult rv = event->GetMetaKey(&metaKey);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getMetaKey: failed", rv);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (metaKey == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getScreenX
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getScreenX
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getScreenX: NULL pointer\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32 screenX = 0;
|
||||
nsresult rv = event->GetScreenX(&screenX);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getScreenX: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jint) screenX;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getScreenY
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getScreenY
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getScreenY: NULL pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32 screenY = 0;
|
||||
nsresult rv = event->GetScreenY(&screenY);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getScreenY: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jint) screenY;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getShiftKey
|
||||
* Signature: ()Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getShiftKey
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getShiftKey: NULL pointer");
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
PRBool shiftKey = PR_FALSE;
|
||||
nsresult rv = event->GetShiftKey(&shiftKey);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getShiftKey: failed", rv);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return (shiftKey == PR_TRUE) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: getRelatedTarget
|
||||
* Signature: ()Lorg/w3c/dom/events/EventTarget;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_events_MouseEventImpl_getRelatedTarget
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getRelatedNode: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMEventTarget* ret = nsnull;
|
||||
nsresult rv = event->GetRelatedTarget(&ret);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.getRelatedNode: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
if (!ret)
|
||||
return NULL;
|
||||
|
||||
nsIDOMNode* node = nsnull;
|
||||
rv = ret->QueryInterface(NS_GET_IID(nsIDOMNode), (void**)&node);
|
||||
printf("========== rv:%x node:%x", rv, node);
|
||||
// return JavaDOMGlobals::CreateNodeSubtype(env, ret);
|
||||
return JavaDOMGlobals::CreateNodeSubtype(env, node);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_MouseEventImpl
|
||||
* Method: initMouseEvent
|
||||
* Signature: (Ljava/lang/String;ZZLorg/w3c/dom/views/AbstractView;IIIIIZZZZSLorg/w3c/dom/Node;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_events_MouseEventImpl_initMouseEvent
|
||||
(JNIEnv *env, jobject jthis,
|
||||
jstring jtypeArg,
|
||||
jboolean jcanBubbleArg,
|
||||
jboolean jcancelableArg,
|
||||
jobject jviewArg,
|
||||
jint jdetailArg,
|
||||
jint jscreenXArg,
|
||||
jint jscreenYArg,
|
||||
jint jclientXArg,
|
||||
jint jclientYArg,
|
||||
jboolean jctrlKeyArg,
|
||||
jboolean jaltKeyArg,
|
||||
jboolean jshiftKeyArg,
|
||||
jboolean jmetaKeyArg,
|
||||
jshort jbuttonArg,
|
||||
jobject jrelatedNodeArg)
|
||||
{
|
||||
nsIDOMMouseEvent* event = (nsIDOMMouseEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"MouseEvent.initMouseEvent: NULL pointer");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* cvalue = JavaDOMGlobals::GetUnicode(env, jtypeArg);
|
||||
if (!cvalue)
|
||||
return;
|
||||
|
||||
PRBool canBubble = jcanBubbleArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
PRBool cancelable = jcancelableArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
PRBool ctrlKeyArg = jctrlKeyArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
PRBool altKeyArg = jaltKeyArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
PRBool shiftKeyArg = jshiftKeyArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
PRBool metaKeyArg = jmetaKeyArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
|
||||
nsresult rv = event->InitMouseEvent(*cvalue,
|
||||
ctrlKeyArg,
|
||||
altKeyArg,
|
||||
shiftKeyArg,
|
||||
metaKeyArg,
|
||||
(PRInt32)jscreenXArg,
|
||||
(PRInt32)jscreenYArg,
|
||||
(PRInt32)jclientXArg,
|
||||
(PRInt32)jclientYArg,
|
||||
(PRUint16)jbuttonArg,
|
||||
(PRUint16)jdetailArg);
|
||||
|
||||
nsString::Recycle(cvalue);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"UIEvent.initUIEvent: failed", rv);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
122
mozilla/java/dom/jni/org_mozilla_dom_events_UIEventImpl.cpp
Normal file
122
mozilla/java/dom/jni/org_mozilla_dom_events_UIEventImpl.cpp
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prlog.h"
|
||||
#include"javaDOMEventsGlobals.h"
|
||||
#include "org_mozilla_dom_events_UIEventImpl.h"
|
||||
#include "nsIDOMUIEvent.h"
|
||||
#include "nsIDOMAbstractView.h"
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_UIEventImpl
|
||||
* Method: getView
|
||||
* Signature: ()Lorg/w3c/dom/views/AbstractView;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_org_mozilla_dom_events_UIEventImpl_getView
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMUIEvent* event = (nsIDOMUIEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.getCurrentNode: NULL pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nsIDOMAbstractView* aView = nsnull;
|
||||
nsresult rv = event->GetView(&aView);
|
||||
if (NS_FAILED(rv) || !aView) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"UIEvent.getView: failed", rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// REMIND: Abstract View
|
||||
return NULL; //JavaDOMEventGlobals::CreateEventSubtype(env, ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_UIEventImpl
|
||||
* Method: getDetail
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jint JNICALL Java_org_mozilla_dom_events_UIEventImpl_getDetail
|
||||
(JNIEnv *env, jobject jthis)
|
||||
{
|
||||
nsIDOMUIEvent* event = (nsIDOMUIEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"UIEvent.getDetail: NULL pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32 aDetail = 0;
|
||||
nsresult rv = event->GetDetail(&aDetail);
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"UIEvent.getDetail: failed", rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (jint)aDetail;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_mozilla_dom_events_UIEventImpl
|
||||
* Method: initUIEvent
|
||||
* Signature: (Ljava/lang/String;ZZLorg/w3c/dom/views/AbstractView;I)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_mozilla_dom_events_UIEventImpl_initUIEvent
|
||||
(JNIEnv *env, jobject jthis,
|
||||
jstring jtypeArg,
|
||||
jboolean jcanBubbleArg,
|
||||
jboolean jcancelableArg,
|
||||
jobject jviewArg,
|
||||
jint jdetailArg)
|
||||
{
|
||||
nsIDOMUIEvent* event = (nsIDOMUIEvent*)
|
||||
env->GetLongField(jthis, JavaDOMEventsGlobals::eventPtrFID);
|
||||
if (!event || !jtypeArg || !jviewArg) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"Event.initUIEvent: NULL pointer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
nsString* cvalue = JavaDOMGlobals::GetUnicode(env, jtypeArg);
|
||||
if (!cvalue)
|
||||
return;
|
||||
|
||||
PRBool canBubble = jcanBubbleArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
PRBool cancelable = jcancelableArg == JNI_TRUE ? PR_TRUE : PR_FALSE;
|
||||
|
||||
|
||||
// REMIND: need to deal with AbstractView
|
||||
// NS_IMETHOD InitUIEvent(const nsString& aTypeArg, PRBool aCanBubbleArg, PRBool aCancelableArg, nsIDOMAbstractView* aViewArg, PRInt32 aDetailArg)=0;
|
||||
nsresult rv = event->InitUIEvent(*cvalue, canBubble, cancelable, NULL, (PRUint32)jdetailArg);
|
||||
nsString::Recycle(cvalue);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
JavaDOMGlobals::ThrowException(env,
|
||||
"UIEvent.initUIEvent: failed", rv);
|
||||
}
|
||||
}
|
||||
|
||||
32
mozilla/java/dom/makefile.win
Executable file
32
mozilla/java/dom/makefile.win
Executable file
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
IGNORE_MANIFEST=1
|
||||
#//------------------------------------------------------------------------
|
||||
#//
|
||||
#// Specify the depth of the current directory relative to the
|
||||
#// root of NS
|
||||
#//
|
||||
#//------------------------------------------------------------------------
|
||||
DEPTH = ..\..
|
||||
|
||||
DIRS = classes src jni
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
25
mozilla/java/dom/nsWebShell.cpp.patch
Normal file
25
mozilla/java/dom/nsWebShell.cpp.patch
Normal file
@@ -0,0 +1,25 @@
|
||||
Index: nsWebShell.cpp
|
||||
===================================================================
|
||||
RCS file: /cvsroot/mozilla/webshell/src/nsWebShell.cpp,v
|
||||
retrieving revision 1.467
|
||||
diff -r1.467 nsWebShell.cpp
|
||||
119a120,125
|
||||
> #ifdef JAVA_DOM
|
||||
> #include "nsIJavaDOM.h"
|
||||
> static NS_DEFINE_IID(kJavaDOMCID, NS_JAVADOM_CID);
|
||||
> static NS_DEFINE_IID(kIJavaDOMIID, NS_IJAVADOM_IID);
|
||||
> #endif // JAVA_DOM
|
||||
>
|
||||
1579a1586,1597
|
||||
> #ifdef JAVA_DOM
|
||||
> nsresult jrv = NS_OK;
|
||||
> NS_WITH_SERVICE(nsIDocumentLoaderObserver, javaDOM, kJavaDOMCID, &jrv);
|
||||
> if (NS_FAILED(jrv) || !javaDOM) {
|
||||
> fprintf(stderr,
|
||||
> "nsWebShell::Init: GetService of JavaDOM failed (error %x)\n",
|
||||
> jrv);
|
||||
> } else {
|
||||
> printf("\n webshell: added JAVADOM as observer...\n");
|
||||
> mDocLoader->AddObserver(javaDOM);
|
||||
> }
|
||||
> #endif // JAVA_DOM
|
||||
42
mozilla/java/dom/src/JavaDOMSecurityContext.cpp
Normal file
42
mozilla/java/dom/src/JavaDOMSecurityContext.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
*/
|
||||
#include "JavaDOMSecurityContext.h"
|
||||
|
||||
static NS_DEFINE_IID(kISecurityContextIID, NS_ISECURITYCONTEXT_IID);
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
|
||||
NS_IMPL_ADDREF(JavaDOMSecurityContext);
|
||||
NS_IMPL_RELEASE(JavaDOMSecurityContext);
|
||||
|
||||
JavaDOMSecurityContext::JavaDOMSecurityContext() {
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
JavaDOMSecurityContext::~JavaDOMSecurityContext() {
|
||||
}
|
||||
NS_METHOD
|
||||
JavaDOMSecurityContext::QueryInterface(const nsIID& aIID, void** aInstancePtr)
|
||||
{
|
||||
if (NULL == aInstancePtr) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
*aInstancePtr = NULL;
|
||||
if (aIID.Equals(kISecurityContextIID) ||
|
||||
aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = (nsISecurityContext*) this;
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
||||
NS_METHOD
|
||||
JavaDOMSecurityContext::Implies(const char* target, const char* action, PRBool *bAllowedAccess)
|
||||
{
|
||||
*bAllowedAccess = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
29
mozilla/java/dom/src/JavaDOMSecurityContext.h
Normal file
29
mozilla/java/dom/src/JavaDOMSecurityContext.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
*/
|
||||
#include "nsISecurityContext.h"
|
||||
|
||||
class JavaDOMSecurityContext : public nsISecurityContext {
|
||||
public:
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// from nsISupports
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// from nsISecurityContext:
|
||||
|
||||
/**
|
||||
* Get the security context to be used in LiveConnect.
|
||||
* This is used for JavaScript <--> Java.
|
||||
*
|
||||
* @param target -- Possible target.
|
||||
* @param action -- Possible action on the target.
|
||||
* @return -- NS_OK if the target and action is permitted on the security context.
|
||||
* -- NS_FALSE otherwise.
|
||||
*/
|
||||
NS_IMETHOD Implies(const char* target, const char* action, PRBool *bAllowedAccess);
|
||||
JavaDOMSecurityContext();
|
||||
virtual ~JavaDOMSecurityContext();
|
||||
};
|
||||
|
||||
64
mozilla/java/dom/src/Makefile
Normal file
64
mozilla/java/dom/src/Makefile
Normal file
@@ -0,0 +1,64 @@
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ../../..
|
||||
topsrcdir = $(DEPTH)
|
||||
srcdir = .
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
JAVAHOME = $(JDKHOME)
|
||||
MODULE = javadom
|
||||
LIBRARY_NAME = javadom
|
||||
IS_COMPONENT = 1
|
||||
|
||||
CPPSRCS = \
|
||||
nsJavaDOMImpl.cpp
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
ifeq ($(OS_ARCH),Linux)
|
||||
INCLUDES += -I$(JAVAHOME)/include -I$(JAVAHOME)/include/linux
|
||||
DSO_LDOPTS += \
|
||||
-L$(JAVAHOME)/jre/lib/i386 \
|
||||
-L$(JAVAHOME)/jre/lib/i386/classic \
|
||||
-L$(JAVAHOME)/jre/lib/i386/native_threads \
|
||||
-Xlinker -rpath $(JAVAHOME)/jre/lib/i386 \
|
||||
-Xlinker -rpath $(JAVAHOME)/jre/lib/i386/classic \
|
||||
-Xlinker -rpath $(JAVAHOME)/jre/lib/i386/native_threads \
|
||||
-ljvm -lhpi
|
||||
DEFINES += -DDISABLE_JIT
|
||||
else
|
||||
INCLUDES += -I$(JAVAHOME)/include -I$(JAVAHOME)/include/solaris
|
||||
DSO_LDOPTS += \
|
||||
-L$(JAVAHOME)/jre/lib/sparc \
|
||||
-L$(JAVAHOME)/jre/lib/sparc/classic \
|
||||
-L$(JAVAHOME)/jre/lib/sparc/native_threads \
|
||||
-R$(JAVAHOME)/jre/lib/sparc \
|
||||
-R$(JAVAHOME)/jre/lib/sparc/classic \
|
||||
-R$(JAVAHOME)/jre/lib/sparc/native_threads \
|
||||
-ljvm -lhpi
|
||||
endif
|
||||
|
||||
EXPORTS = \
|
||||
nsIJavaDOM.h
|
||||
|
||||
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
64
mozilla/java/dom/src/Makefile.in
Normal file
64
mozilla/java/dom/src/Makefile.in
Normal file
@@ -0,0 +1,64 @@
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH = ../../..
|
||||
topsrcdir = $(DEPTH)
|
||||
srcdir = .
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
JAVAHOME = $(JDKHOME)
|
||||
MODULE = javadom
|
||||
LIBRARY_NAME = javadom
|
||||
IS_COMPONENT = 1
|
||||
|
||||
CPPSRCS = \
|
||||
nsJavaDOMImpl.cpp
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
ifeq ($(OS_ARCH),Linux)
|
||||
INCLUDES += -I$(JAVAHOME)/include -I$(JAVAHOME)/include/linux
|
||||
DSO_LDOPTS += \
|
||||
-L$(JAVAHOME)/jre/lib/i386 \
|
||||
-L$(JAVAHOME)/jre/lib/i386/classic \
|
||||
-L$(JAVAHOME)/jre/lib/i386/native_threads \
|
||||
-Xlinker -rpath $(JAVAHOME)/jre/lib/i386 \
|
||||
-Xlinker -rpath $(JAVAHOME)/jre/lib/i386/classic \
|
||||
-Xlinker -rpath $(JAVAHOME)/jre/lib/i386/native_threads \
|
||||
-ljvm -lhpi
|
||||
DEFINES += -DDISABLE_JIT
|
||||
else
|
||||
INCLUDES += -I$(JAVAHOME)/include -I$(JAVAHOME)/include/solaris
|
||||
DSO_LDOPTS += \
|
||||
-L$(JAVAHOME)/jre/lib/sparc \
|
||||
-L$(JAVAHOME)/jre/lib/sparc/classic \
|
||||
-L$(JAVAHOME)/jre/lib/sparc/native_threads \
|
||||
-R$(JAVAHOME)/jre/lib/sparc \
|
||||
-R$(JAVAHOME)/jre/lib/sparc/classic \
|
||||
-R$(JAVAHOME)/jre/lib/sparc/native_threads \
|
||||
-ljvm -lhpi
|
||||
endif
|
||||
|
||||
EXPORTS = \
|
||||
nsIJavaDOM.h
|
||||
|
||||
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
84
mozilla/java/dom/src/makefile.win
Normal file
84
mozilla/java/dom/src/makefile.win
Normal file
@@ -0,0 +1,84 @@
|
||||
#!nmake
|
||||
#
|
||||
# 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. 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.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Sun Microsystems,
|
||||
# Inc. Portions created by Sun are
|
||||
# Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH=..\..\..
|
||||
IGNORE_MANIFEST=1
|
||||
|
||||
DEFINES=-D_IMPL_NS_WEB -DWIN32_LEAN_AND_MEAN
|
||||
!ifdef JAVA_DOM_OJI_ENABLE
|
||||
DEFINES=$(DEFINES) -DJAVA_DOM_OJI_ENABLE
|
||||
!endif
|
||||
MODULE=javadom
|
||||
IS_COMPONENT=1
|
||||
LIBRARY_NAME=libjavadom
|
||||
|
||||
CPPSRCS= \
|
||||
!ifdef JAVA_DOM_OJI_ENABLE
|
||||
JavaDOMSecurityContext.cpp \
|
||||
!endif
|
||||
nsJavaDOMImpl.cpp \
|
||||
$(NULL)
|
||||
|
||||
CPP_OBJS= \
|
||||
!ifdef JAVA_DOM_OJI_ENABLE
|
||||
.\$(OBJDIR)\JavaDOMSecurityContext.obj \
|
||||
!endif
|
||||
.\$(OBJDIR)\nsJavaDOMImpl.obj \
|
||||
$(NULL)
|
||||
|
||||
EXPORTS = \
|
||||
nsIJavaDOM.h
|
||||
|
||||
!ifndef JAVA_DOM_OJI_ENABLE
|
||||
LINCS= \
|
||||
-I$(JDKHOME)\include \
|
||||
-I$(JDKHOME)\include\win32
|
||||
!endif
|
||||
|
||||
MAKE_OBJ_TYPE = DLL
|
||||
DLLNAME = javadom
|
||||
DLL=.\$(OBJDIR)\$(DLLNAME).dll
|
||||
|
||||
LCFLAGS = \
|
||||
$(LCFLAGS) \
|
||||
$(DEFINES) \
|
||||
$(NULL)
|
||||
|
||||
LLIBS= \
|
||||
!ifdef JAVA_DOM_OJI_ENABLE
|
||||
$(DIST)\lib\oji.lib \
|
||||
!else
|
||||
$(JDKHOME)\lib\jvm.lib \
|
||||
!endif
|
||||
$(DIST)\lib\xpcom.lib \
|
||||
$(LIBNSPR)
|
||||
|
||||
include <$(DEPTH)\config\config.mak>
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
install:: $(DLL)
|
||||
$(MAKE_INSTALL) .\$(OBJDIR)\$(DLLNAME).dll $(DIST)\bin\components
|
||||
$(MAKE_INSTALL) .\$(OBJDIR)\$(DLLNAME).lib $(DIST)\lib
|
||||
|
||||
clobber::
|
||||
rm -f $(DIST)\bin\components\$(DLLNAME).dll
|
||||
rm -f $(DIST)\lib\$(DLLNAME).lib
|
||||
75
mozilla/java/dom/src/nsIJavaDOM.h
Normal file
75
mozilla/java/dom/src/nsIJavaDOM.h
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#ifndef __nsIJavaDOM_h__
|
||||
#define __nsIJavaDOM_h__
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIDocumentLoaderObserver.h"
|
||||
#include "jni.h"
|
||||
|
||||
class nsIURI;
|
||||
|
||||
/* {9cc0ca50-0e31-11d3-8a61-0004ac56c4a5} */
|
||||
#define NS_IJAVADOM_IID_STR "9cc0ca50-0e31-11d3-8a61-0004ac56c4a5"
|
||||
#define NS_IJAVADOM_IID \
|
||||
{0x9cc0ca50, 0x0e31, 0x11d3, \
|
||||
{ 0x8a, 0x61, 0x00, 0x04, 0xac, 0x56, 0xc4, 0xa5 }}
|
||||
#define NS_JAVADOM_CID \
|
||||
{0xd6b2e820, 0x9113, 0x11d3, \
|
||||
{ 0x9c, 0x11, 0x0, 0x10, 0x5a , 0xe3, 0x80 , 0x1e }}
|
||||
|
||||
class nsIJavaDOM : public nsIDocumentLoaderObserver {
|
||||
public:
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IJAVADOM_IID)
|
||||
|
||||
/* nsIDocumentLoaderObserver methods */
|
||||
NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader,
|
||||
nsIURI* aURL,
|
||||
const char* aCommand) = 0;
|
||||
|
||||
NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsresult aStatus) = 0;
|
||||
|
||||
NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel) = 0;
|
||||
|
||||
NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
PRUint32 aProgress,
|
||||
PRUint32 aProgressMax) = 0;
|
||||
|
||||
NS_IMETHOD OnStatusURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsString& aMsg) = 0;
|
||||
|
||||
NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsresult aStatus) = 0;
|
||||
|
||||
NS_IMETHOD HandleUnknownContentType(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
const char *aContentType,
|
||||
const char *aCommand) = 0;
|
||||
};
|
||||
#endif /* __nsIJavaDOM_h__ */
|
||||
653
mozilla/java/dom/src/nsJavaDOMImpl.cpp
Normal file
653
mozilla/java/dom/src/nsJavaDOMImpl.cpp
Normal file
@@ -0,0 +1,653 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
#include "prenv.h"
|
||||
#include "nsISupportsUtils.h"
|
||||
#include "nsIURL.h"
|
||||
#include "nsIChannel.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDocumentLoader.h"
|
||||
#include "nsIDocumentLoaderObserver.h"
|
||||
#include "nsIDocumentViewer.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDocShell.h"
|
||||
#include "nsJavaDOMImpl.h"
|
||||
|
||||
#include "nsIModule.h"
|
||||
#include "nsIGenericFactory.h"
|
||||
|
||||
#if defined(DEBUG)
|
||||
#include <stdio.h>
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIDOMNodeList.h"
|
||||
#include "nsIDOMNamedNodeMap.h"
|
||||
static void dump_document(nsIDOMDocument* dom, const char* urlSpec);
|
||||
static void dump_node(FILE* of, nsIDOMNode* node, int indent,
|
||||
PRBool isMapNode);
|
||||
static void dump_map(FILE* of, nsIDOMNamedNodeMap* map, int indent);
|
||||
static char* strip_whitespace(const PRUnichar* input, int length);
|
||||
static const char* describe_type(int type);
|
||||
#endif
|
||||
|
||||
#ifdef JAVA_DOM_OJI_ENABLE
|
||||
#include "ProxyJNI.h"
|
||||
#include "nsIServiceManager.h"
|
||||
nsJVMManager* nsJavaDOMImpl::jvmManager = NULL;
|
||||
JavaDOMSecurityContext* nsJavaDOMImpl::securityContext = NULL;
|
||||
static NS_DEFINE_CID(kJVMManagerCID,NS_JVMMANAGER_CID);
|
||||
#else
|
||||
JavaVM* nsJavaDOMImpl::jvm = NULL;
|
||||
#endif
|
||||
|
||||
static NS_DEFINE_IID(kIDocShellIID, NS_IDOCSHELL_IID);
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIJavaDOMIID, NS_IJAVADOM_IID);
|
||||
static NS_DEFINE_IID(kIDocumentViewerIID, NS_IDOCUMENT_VIEWER_IID);
|
||||
static NS_DEFINE_IID(kIDOMDocumentIID, NS_IDOMDOCUMENT_IID);
|
||||
static NS_DEFINE_IID(kIDocumentLoaderObserverIID, NS_IDOCUMENT_LOADER_OBSERVER_IID);
|
||||
|
||||
NS_IMPL_ADDREF(nsJavaDOMImpl);
|
||||
NS_IMPL_RELEASE(nsJavaDOMImpl);
|
||||
|
||||
jclass nsJavaDOMImpl::domAccessorClass = NULL;
|
||||
|
||||
jmethodID nsJavaDOMImpl::startURLLoadMID = NULL;
|
||||
jmethodID nsJavaDOMImpl::endURLLoadMID = NULL;
|
||||
jmethodID nsJavaDOMImpl::progressURLLoadMID = NULL;
|
||||
jmethodID nsJavaDOMImpl::statusURLLoadMID = NULL;
|
||||
jmethodID nsJavaDOMImpl::startDocumentLoadMID = NULL;
|
||||
jmethodID nsJavaDOMImpl::endDocumentLoadMID = NULL;
|
||||
|
||||
#define NS_JAVADOM_PROGID \
|
||||
"component://netscape/blackwood/java-dom"
|
||||
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsJavaDOMImpl)
|
||||
|
||||
static nsModuleComponentInfo components[] =
|
||||
{
|
||||
{
|
||||
"Java DOM",
|
||||
NS_JAVADOM_CID,
|
||||
NS_JAVADOM_PROGID,
|
||||
nsJavaDOMImplConstructor
|
||||
}
|
||||
};
|
||||
|
||||
NS_IMPL_NSGETMODULE("JavaDOMModule",components);
|
||||
|
||||
NS_IMETHODIMP nsJavaDOMImpl::QueryInterface(REFNSIID aIID, void** aInstance)
|
||||
{
|
||||
if (NULL == aInstance)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aInstance = NULL;
|
||||
|
||||
if (aIID.Equals(kIJavaDOMIID)) {
|
||||
*aInstance = (void*) ((nsIJavaDOM*)this);
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(kIDocumentLoaderObserverIID)) {
|
||||
*aInstance = (void*) ((nsIDocumentLoaderObserver*)this);
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aInstance = (void*) ((nsISupports*)this);
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
|
||||
nsJavaDOMImpl::nsJavaDOMImpl()
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
}
|
||||
|
||||
PRBool nsJavaDOMImpl::Init(JNIEnv** jniEnv) {
|
||||
JNIEnv* env = GetJNIEnv();
|
||||
if (!env) return PR_FALSE;
|
||||
*jniEnv = env;
|
||||
|
||||
if (!domAccessorClass) {
|
||||
domAccessorClass = env->FindClass("org/mozilla/dom/DOMAccessor");
|
||||
if (!domAccessorClass) return PR_FALSE;
|
||||
domAccessorClass = (jclass) env->NewGlobalRef(domAccessorClass);
|
||||
if (!domAccessorClass) return PR_FALSE;
|
||||
|
||||
startURLLoadMID =
|
||||
env->GetStaticMethodID(domAccessorClass,
|
||||
"startURLLoad",
|
||||
"(Ljava/lang/String;Ljava/lang/String;J)V");
|
||||
if (Cleanup(env) == PR_TRUE) {
|
||||
domAccessorClass = NULL;
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
endURLLoadMID =
|
||||
env->GetStaticMethodID(domAccessorClass,
|
||||
"endURLLoad",
|
||||
"(Ljava/lang/String;IJ)V");
|
||||
if (Cleanup(env) == PR_TRUE) {
|
||||
domAccessorClass = NULL;
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
progressURLLoadMID =
|
||||
env->GetStaticMethodID(domAccessorClass,
|
||||
"progressURLLoad",
|
||||
"(Ljava/lang/String;IIJ)V");
|
||||
if (Cleanup(env) == PR_TRUE) {
|
||||
domAccessorClass = NULL;
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
statusURLLoadMID =
|
||||
env->GetStaticMethodID(domAccessorClass,
|
||||
"statusURLLoad",
|
||||
"(Ljava/lang/String;Ljava/lang/String;J)V");
|
||||
if (Cleanup(env) == PR_TRUE) {
|
||||
domAccessorClass = NULL;
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
startDocumentLoadMID =
|
||||
env->GetStaticMethodID(domAccessorClass,
|
||||
"startDocumentLoad",
|
||||
"(Ljava/lang/String;)V");
|
||||
if (Cleanup(env) == PR_TRUE) {
|
||||
domAccessorClass = NULL;
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
endDocumentLoadMID =
|
||||
env->GetStaticMethodID(domAccessorClass,
|
||||
"endDocumentLoad",
|
||||
"(Ljava/lang/String;IJ)V");
|
||||
if (Cleanup(env) == PR_TRUE) {
|
||||
domAccessorClass = NULL;
|
||||
return PR_FALSE;
|
||||
}
|
||||
}
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
nsJavaDOMImpl::~nsJavaDOMImpl()
|
||||
{
|
||||
}
|
||||
|
||||
PRBool nsJavaDOMImpl::Cleanup(JNIEnv* env)
|
||||
{
|
||||
if (env->ExceptionOccurred()) {
|
||||
env->ExceptionDescribe();
|
||||
return PR_TRUE;
|
||||
}
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
nsIDOMDocument* nsJavaDOMImpl::GetDocument(nsIDocumentLoader* loader)
|
||||
{
|
||||
nsIDocShell* docshell = nsnull;
|
||||
nsISupports* container = nsnull;
|
||||
nsIContentViewer* contentv = nsnull;
|
||||
nsIDocumentViewer* docv = nsnull;
|
||||
nsIDocument* document = nsnull;
|
||||
nsIDOMDocument* domDoc = nsnull;
|
||||
|
||||
nsresult rv = loader->GetContainer(&container);
|
||||
if (NS_SUCCEEDED(rv) && container) {
|
||||
rv = container->QueryInterface(kIDocShellIID, (void**) &docshell);
|
||||
container->Release();
|
||||
if (NS_SUCCEEDED(rv) && docshell) {
|
||||
rv = docshell->GetContentViewer(&contentv);
|
||||
docshell->Release();
|
||||
if (NS_SUCCEEDED(rv) && contentv) {
|
||||
rv = contentv->QueryInterface(kIDocumentViewerIID, (void**) &docv);
|
||||
contentv->Release();
|
||||
if (NS_SUCCEEDED(rv) && docv) {
|
||||
rv = docv->GetDocument(document);
|
||||
docv->Release();
|
||||
if (NS_SUCCEEDED(rv) && document) {
|
||||
rv = document->QueryInterface(kIDOMDocumentIID, (void**) &domDoc);
|
||||
if (NS_SUCCEEDED(rv) && docv) {
|
||||
return domDoc;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr,
|
||||
"nsJavaDOMImpl::GetDocument: failed: "
|
||||
"container=%x, webshell=%x, contentViewer=%x, "
|
||||
"documentViewer=%x, document=%x, "
|
||||
"domDocument=%x, error=%x\n",
|
||||
(unsigned) (void*) container,
|
||||
(unsigned) (void*) docshell,
|
||||
(unsigned) (void*) contentv,
|
||||
(unsigned) (void*) docv,
|
||||
(unsigned) (void*) document,
|
||||
(unsigned) (void*) domDoc,
|
||||
rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsJavaDOMImpl::OnStartDocumentLoad(nsIDocumentLoader* loader,
|
||||
nsIURI* aURL,
|
||||
const char* aCommand)
|
||||
{
|
||||
JNIEnv* env = NULL;
|
||||
if (Init(&env) == PR_FALSE) return NS_ERROR_FAILURE;
|
||||
|
||||
char* urlSpec = (char*) "";
|
||||
if (aURL)
|
||||
aURL->GetSpec(&urlSpec);
|
||||
jstring jURL = env->NewStringUTF(urlSpec);
|
||||
if (!jURL) return NS_ERROR_FAILURE;
|
||||
|
||||
env->CallStaticVoidMethod(domAccessorClass,
|
||||
startDocumentLoadMID,
|
||||
jURL);
|
||||
if (Cleanup(env) == PR_TRUE) return NS_ERROR_FAILURE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsJavaDOMImpl::OnEndDocumentLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsresult aStatus)
|
||||
{
|
||||
JNIEnv* env = NULL;
|
||||
if (Init(&env) == PR_FALSE) return NS_ERROR_FAILURE;
|
||||
|
||||
char* urlSpec = (char*) "";
|
||||
nsIURI* url = nsnull;
|
||||
if (channel && NS_SUCCEEDED(channel->GetURI(&url)))
|
||||
url->GetSpec(&urlSpec);
|
||||
jstring jURL = env->NewStringUTF(urlSpec);
|
||||
if (!jURL) return NS_ERROR_FAILURE;
|
||||
|
||||
nsIDOMDocument* domDoc = GetDocument(loader);
|
||||
env->CallStaticVoidMethod(domAccessorClass,
|
||||
endDocumentLoadMID,
|
||||
jURL,
|
||||
(jint) aStatus,
|
||||
(jlong)domDoc);
|
||||
if (Cleanup(env) == PR_TRUE) return NS_ERROR_FAILURE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsJavaDOMImpl::OnStartURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel)
|
||||
{
|
||||
JNIEnv* env = NULL;
|
||||
if (Init(&env) == PR_FALSE) return NS_ERROR_FAILURE;
|
||||
|
||||
char* urlSpec = (char*) "";
|
||||
nsIURI* url = nsnull;
|
||||
if (channel && NS_SUCCEEDED(channel->GetURI(&url)))
|
||||
url->GetSpec(&urlSpec);
|
||||
jstring jURL = env->NewStringUTF(urlSpec);
|
||||
if (!jURL) return NS_ERROR_FAILURE;
|
||||
|
||||
char* contentType = (char*) "";
|
||||
if (channel)
|
||||
channel->GetContentType(&contentType);
|
||||
if (!contentType)
|
||||
contentType = (char*) "";
|
||||
jstring jContentType = env->NewStringUTF(contentType);
|
||||
if (!jContentType) return NS_ERROR_FAILURE;
|
||||
|
||||
nsIDOMDocument* domDoc = GetDocument(loader);
|
||||
env->CallStaticVoidMethod(domAccessorClass,
|
||||
startURLLoadMID,
|
||||
jURL,
|
||||
jContentType,
|
||||
(jlong)domDoc);
|
||||
if (Cleanup(env) == PR_TRUE) return NS_ERROR_FAILURE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsJavaDOMImpl::OnProgressURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
PRUint32 aProgress,
|
||||
PRUint32 aProgressMax)
|
||||
{
|
||||
JNIEnv* env = NULL;
|
||||
if (Init(&env) == PR_FALSE) return NS_ERROR_FAILURE;
|
||||
|
||||
char* urlSpec = (char*) "";
|
||||
nsIURI* url = nsnull;
|
||||
if (channel && NS_SUCCEEDED(channel->GetURI(&url)))
|
||||
url->GetSpec(&urlSpec);
|
||||
jstring jURL = env->NewStringUTF(urlSpec);
|
||||
if (!jURL) return NS_ERROR_FAILURE;
|
||||
|
||||
nsIDOMDocument* domDoc = GetDocument(loader);
|
||||
env->CallStaticVoidMethod(domAccessorClass,
|
||||
progressURLLoadMID,
|
||||
jURL,
|
||||
(jint) aProgress,
|
||||
(jint) aProgressMax,
|
||||
(jlong)domDoc);
|
||||
if (Cleanup(env) == PR_TRUE) return NS_ERROR_FAILURE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsJavaDOMImpl::OnStatusURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsString& aMsg)
|
||||
{
|
||||
JNIEnv* env = NULL;
|
||||
if (Init(&env) == PR_FALSE) return NS_ERROR_FAILURE;
|
||||
|
||||
char* urlSpec = (char*) "";
|
||||
nsIURI* url = nsnull;
|
||||
if (channel && NS_SUCCEEDED(channel->GetURI(&url)))
|
||||
url->GetSpec(&urlSpec);
|
||||
jstring jURL = env->NewStringUTF(urlSpec);
|
||||
if (!jURL) return NS_ERROR_FAILURE;
|
||||
|
||||
const PRUnichar* cMsg = aMsg.GetUnicode();
|
||||
jstring jMessage = env->NewString(cMsg, aMsg.Length());
|
||||
if (!jMessage) return NS_ERROR_FAILURE;
|
||||
|
||||
nsIDOMDocument* domDoc = GetDocument(loader);
|
||||
env->CallStaticVoidMethod(domAccessorClass,
|
||||
statusURLLoadMID,
|
||||
jURL,
|
||||
jMessage,
|
||||
(jlong)domDoc);
|
||||
if (Cleanup(env) == PR_TRUE) return NS_ERROR_FAILURE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsJavaDOMImpl::OnEndURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsresult aStatus)
|
||||
{
|
||||
JNIEnv* env = NULL;
|
||||
if (Init(&env) == PR_FALSE) return NS_ERROR_FAILURE;
|
||||
|
||||
char* urlSpec = (char*) "";
|
||||
nsIURI* url = nsnull;
|
||||
if (channel && NS_SUCCEEDED(channel->GetURI(&url)))
|
||||
url->GetSpec(&urlSpec);
|
||||
jstring jURL = env->NewStringUTF(urlSpec);
|
||||
if (!jURL) return NS_ERROR_FAILURE;
|
||||
|
||||
nsIDOMDocument* domDoc = GetDocument(loader);
|
||||
#if defined(DEBUG)
|
||||
dump_document(domDoc, urlSpec);
|
||||
#endif
|
||||
env->CallStaticVoidMethod(domAccessorClass,
|
||||
endURLLoadMID,
|
||||
jURL,
|
||||
(jint) aStatus,
|
||||
(jlong)domDoc);
|
||||
if (Cleanup(env) == PR_TRUE) return NS_ERROR_FAILURE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsJavaDOMImpl::HandleUnknownContentType(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
const char *aContentType,
|
||||
const char *aCommand)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
JNIEnv* nsJavaDOMImpl::GetJNIEnv() {
|
||||
JNIEnv* env;
|
||||
#ifdef JAVA_DOM_OJI_ENABLE
|
||||
nsresult result;
|
||||
if (!jvmManager) {
|
||||
NS_WITH_SERVICE(nsIJVMManager, _jvmManager, kJVMManagerCID, &result);
|
||||
if (NS_SUCCEEDED(result)) {
|
||||
jvmManager = (nsJVMManager*)((nsIJVMManager*)_jvmManager);
|
||||
}
|
||||
}
|
||||
if (!jvmManager) {
|
||||
return NULL;
|
||||
}
|
||||
jvmManager->CreateProxyJNI(NULL,&env);
|
||||
// if (!securityContext) {
|
||||
// securityContext = new JavaDOMSecurityContext();
|
||||
// }
|
||||
// SetSecurityContext(env, securityContext);
|
||||
SetSecurityContext(env, new JavaDOMSecurityContext());
|
||||
#else /* JAVA_DOM_OJI_ENABLE */
|
||||
if (!jvm) {
|
||||
StartJVM();
|
||||
}
|
||||
#ifdef XP_PC
|
||||
jvm->AttachCurrentThread((void**)&env,NULL);
|
||||
#else
|
||||
jvm->AttachCurrentThread(&env,NULL);
|
||||
#endif
|
||||
#endif /* JAVA_DOM_OJI_ENABLE */
|
||||
return env;
|
||||
}
|
||||
|
||||
#ifndef JAVA_DOM_OJI_ENABLE
|
||||
void nsJavaDOMImpl::StartJVM(void) {
|
||||
jsize jvmCount;
|
||||
JNI_GetCreatedJavaVMs(&jvm, 1, &jvmCount);
|
||||
if (jvmCount) {
|
||||
return;
|
||||
}
|
||||
|
||||
JNIEnv *env = NULL;
|
||||
JDK1_1InitArgs vm_args;
|
||||
JNI_GetDefaultJavaVMInitArgs(&vm_args);
|
||||
vm_args.version = 0x00010001;
|
||||
vm_args.verifyMode = JNI_TRUE;
|
||||
#ifdef DEBUG
|
||||
vm_args.verbose = JNI_TRUE;
|
||||
vm_args.enableVerboseGC = JNI_TRUE;
|
||||
#endif // DEBUG
|
||||
char* cp = PR_GetEnv("CLASSPATH");
|
||||
char* p = new char[strlen(cp) + strlen(vm_args.classpath) + 2];
|
||||
strcpy(p, vm_args.classpath);
|
||||
if (cp) {
|
||||
#ifdef XP_PC
|
||||
strcat(p, ";");
|
||||
#else
|
||||
strcat(p, ":");
|
||||
#endif
|
||||
strcat(p, cp);
|
||||
vm_args.classpath = p;
|
||||
}
|
||||
|
||||
#ifdef DISABLE_JIT
|
||||
/* workaround to get java dom to work on Linux */
|
||||
char **props = new char*[2];
|
||||
props[0]="java.compiler=";
|
||||
props[1]=0;
|
||||
vm_args.properties = props;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("classpath is \"%s\"\n", vm_args.classpath);
|
||||
#endif // DEBUG
|
||||
#ifdef XP_PC
|
||||
jint rv = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
|
||||
#else
|
||||
jint rv = JNI_CreateJavaVM(&jvm, &env, &vm_args);
|
||||
#endif
|
||||
if (rv < 0) {
|
||||
printf("\n JAVA DOM: could not start jvm\n");
|
||||
} else {
|
||||
printf("\n JAVA DOM: successfully started jvm\n");
|
||||
}
|
||||
delete[] p;
|
||||
}
|
||||
#endif /* JAVA_DOM_OJI_ENABLE */
|
||||
|
||||
|
||||
#if defined(DEBUG)
|
||||
static void dump_document(nsIDOMDocument* domDoc, const char* urlSpec)
|
||||
{
|
||||
if (!domDoc) return;
|
||||
|
||||
if (strstr(urlSpec, ".xul") ||
|
||||
strstr(urlSpec, ".js") ||
|
||||
strstr(urlSpec, ".css") ||
|
||||
strstr(urlSpec, "file:")) return;
|
||||
|
||||
FILE* of = fopen("dom-cpp.txt", "a");
|
||||
if (!of) {
|
||||
perror("nsJavaDOMImpl::dump_document: failed to open output file\n");
|
||||
return;
|
||||
}
|
||||
|
||||
nsIDOMElement* element = nsnull;
|
||||
nsresult rv = domDoc->GetDocumentElement(&element);
|
||||
if (NS_FAILED(rv) || !element)
|
||||
return;
|
||||
|
||||
(void) element->Normalize();
|
||||
|
||||
fprintf(of, "\n+++ %s +++\n", urlSpec);
|
||||
dump_node(of, (nsIDOMNode*) element, 0, PR_FALSE);
|
||||
fprintf(of, "\n");
|
||||
fflush(of);
|
||||
fclose(of);
|
||||
}
|
||||
|
||||
static void dump_node(FILE* of, nsIDOMNode* node, int indent,
|
||||
PRBool isMapNode)
|
||||
{
|
||||
if (!node) return;
|
||||
|
||||
fprintf(of, "\n");
|
||||
for (int i=0; i < indent; i++)
|
||||
fprintf(of, " ");
|
||||
|
||||
nsString name;
|
||||
nsString value;
|
||||
PRUint16 type;
|
||||
|
||||
node->GetNodeName(name);
|
||||
node->GetNodeValue(value);
|
||||
node->GetNodeType(&type);
|
||||
|
||||
const PRUnichar* cname = name.GetUnicode();
|
||||
const PRUnichar* cvalue = value.GetUnicode();
|
||||
char* cnorm = strip_whitespace(cvalue, value.Length());
|
||||
fprintf(of, "name=\"%s\" type=%s value=\"%s\"",
|
||||
cname, describe_type(type), cnorm);
|
||||
delete[] cnorm;
|
||||
|
||||
if (isMapNode) return;
|
||||
|
||||
nsIDOMNamedNodeMap* map = nsnull;
|
||||
node->GetAttributes(&map);
|
||||
dump_map(of, map, indent);
|
||||
|
||||
nsIDOMNodeList* children = nsnull;
|
||||
node->GetChildNodes(&children);
|
||||
if (!children) return;
|
||||
|
||||
PRUint32 length=0;
|
||||
children->GetLength(&length);
|
||||
for (PRUint32 j=0; j < length; j++) {
|
||||
nsIDOMNode* child = nsnull;
|
||||
children->Item(j, &child);
|
||||
dump_node(of, child, indent+2, PR_FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
static void dump_map(FILE* of, nsIDOMNamedNodeMap* map, int indent)
|
||||
{
|
||||
if (!map) return;
|
||||
|
||||
fprintf(of, "\n");
|
||||
PRUint32 length=0;
|
||||
map->GetLength(&length);
|
||||
if (length > 0) {
|
||||
for (int i=0; i < indent; i++)
|
||||
fprintf(of, " ");
|
||||
fprintf(of, "------- start attributes -------");
|
||||
}
|
||||
|
||||
for (PRUint32 j=0; j < length; j++) {
|
||||
nsIDOMNode* node = nsnull;
|
||||
map->Item(j, &node);
|
||||
dump_node(of, node, indent, PR_TRUE);
|
||||
}
|
||||
|
||||
if (length > 0) {
|
||||
fprintf(of, "\n");
|
||||
for (int k=0; k < indent; k++)
|
||||
fprintf(of, " ");
|
||||
fprintf(of, "------- end attributes -------");
|
||||
}
|
||||
}
|
||||
|
||||
static char* strip_whitespace(const PRUnichar* input, int length)
|
||||
{
|
||||
if (!input || length < 1) {
|
||||
char* out = new char[1];
|
||||
out[0] = 0;
|
||||
return out;
|
||||
}
|
||||
|
||||
char* out = new char[length+1];
|
||||
char* op = out;
|
||||
const PRUnichar* ip = input;
|
||||
PRUnichar c = ' ';
|
||||
PRUnichar pc = ' ';
|
||||
int i = 0;
|
||||
|
||||
for (c = *ip++; i++<length; c = *ip++) {
|
||||
if ((pc == ' ' || pc == '\n' || pc == '\t') &&
|
||||
(c == ' ' || c == '\n' || c == '\t'))
|
||||
continue;
|
||||
*op++ = (char)c;
|
||||
pc = c;
|
||||
}
|
||||
*op++ = 0;
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
static const char* describe_type(int type)
|
||||
{
|
||||
switch (type) {
|
||||
case nsIDOMNode::ELEMENT_NODE: return "ELEMENT";
|
||||
case nsIDOMNode::ATTRIBUTE_NODE: return "ATTRIBUTE";
|
||||
case nsIDOMNode::TEXT_NODE: return "TEXT";
|
||||
case nsIDOMNode::CDATA_SECTION_NODE: return "CDATA_SECTION";
|
||||
case nsIDOMNode::ENTITY_REFERENCE_NODE: return "ENTITY_REFERENCE";
|
||||
case nsIDOMNode::ENTITY_NODE: return "ENTITY";
|
||||
case nsIDOMNode::PROCESSING_INSTRUCTION_NODE: return "PROCESSING_INSTRUCTION";
|
||||
case nsIDOMNode::COMMENT_NODE: return "COMMENT";
|
||||
case nsIDOMNode::DOCUMENT_NODE: return "DOCUMENT";
|
||||
case nsIDOMNode::DOCUMENT_TYPE_NODE: return "DOCUMENT_TYPE";
|
||||
case nsIDOMNode::DOCUMENT_FRAGMENT_NODE: return "DOCUMENT_FRAGMENT";
|
||||
case nsIDOMNode::NOTATION_NODE: return "NOTATION";
|
||||
}
|
||||
return "ERROR";
|
||||
}
|
||||
#endif
|
||||
77
mozilla/java/dom/src/nsJavaDOMImpl.h
Normal file
77
mozilla/java/dom/src/nsJavaDOMImpl.h
Normal file
@@ -0,0 +1,77 @@
|
||||
#ifndef __nsJavaDOMImpl_h__
|
||||
#define __nsJavaDOMImpl_h__
|
||||
|
||||
#include "jni.h"
|
||||
#include "nsIJavaDOM.h"
|
||||
#ifdef JAVA_DOM_OJI_ENABLE
|
||||
#include "nsJVMManager.h"
|
||||
#include "JavaDOMSecurityContext.h"
|
||||
#endif
|
||||
|
||||
class nsIURI;
|
||||
class nsIDOMDocument;
|
||||
class nsIDocumentLoader;
|
||||
|
||||
class nsJavaDOMImpl : public nsIJavaDOM {
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
public:
|
||||
nsJavaDOMImpl();
|
||||
virtual ~nsJavaDOMImpl();
|
||||
|
||||
/* nsIDocumentLoaderObserver methods */
|
||||
NS_IMETHOD OnStartDocumentLoad(nsIDocumentLoader* loader,
|
||||
nsIURI* aURL,
|
||||
const char* aCommand);
|
||||
|
||||
NS_IMETHOD OnEndDocumentLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsresult aStatus);
|
||||
|
||||
NS_IMETHOD OnStartURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel);
|
||||
|
||||
NS_IMETHOD OnProgressURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
PRUint32 aProgress,
|
||||
PRUint32 aProgressMax);
|
||||
|
||||
NS_IMETHOD OnStatusURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsString& aMsg);
|
||||
|
||||
NS_IMETHOD OnEndURLLoad(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
nsresult aStatus);
|
||||
|
||||
NS_IMETHOD HandleUnknownContentType(nsIDocumentLoader* loader,
|
||||
nsIChannel* channel,
|
||||
const char *aContentType,
|
||||
const char *aCommand);
|
||||
|
||||
private:
|
||||
#ifdef JAVA_DOM_OJI_ENABLE
|
||||
static nsJVMManager* jvmManager;
|
||||
static JavaDOMSecurityContext* securityContext;
|
||||
#else
|
||||
static JavaVM* jvm;
|
||||
#endif
|
||||
|
||||
static jclass domAccessorClass;
|
||||
|
||||
static jmethodID startURLLoadMID;
|
||||
static jmethodID endURLLoadMID;
|
||||
static jmethodID progressURLLoadMID;
|
||||
static jmethodID statusURLLoadMID;
|
||||
static jmethodID startDocumentLoadMID;
|
||||
static jmethodID endDocumentLoadMID;
|
||||
|
||||
static JNIEnv* GetJNIEnv(void);
|
||||
static void StartJVM(void);
|
||||
static PRBool Init(JNIEnv**);
|
||||
// cleanup after a JNI method invocation
|
||||
static PRBool Cleanup(JNIEnv* env);
|
||||
nsIDOMDocument* GetDocument(nsIDocumentLoader* loader);
|
||||
};
|
||||
|
||||
#endif /* __nsJavaDOMImpl_h__ */
|
||||
81
mozilla/java/dom/tests/src/BWBaseTest.java
Executable file
81
mozilla/java/dom/tests/src/BWBaseTest.java
Executable file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
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. 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.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Sun Microsystems,
|
||||
Inc. Portions created by Sun are
|
||||
Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
*/
|
||||
|
||||
package org.mozilla.dom.test;
|
||||
|
||||
public class BWBaseTest implements Execution
|
||||
{
|
||||
|
||||
/**
|
||||
* This is a dummy implementation of interface method
|
||||
*
|
||||
* @param obj Object instance (Node/Document/....)
|
||||
*
|
||||
* @return if test has passed then return true else false
|
||||
*
|
||||
*
|
||||
*/
|
||||
public boolean execute(Object obj)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a null Object. Classes extending this class will override this
|
||||
* method
|
||||
*
|
||||
*
|
||||
* @return Null object reference
|
||||
*
|
||||
*/
|
||||
public Object returnObject()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method indicates whether a particular method is UNSUPPORTED or
|
||||
* not.
|
||||
*
|
||||
*/
|
||||
public void setUnsupported()
|
||||
{
|
||||
UNSUPPORTED = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method indicates whether a particular method is UNSUPPORTED or
|
||||
* not.
|
||||
*
|
||||
*
|
||||
* @return Value of boolean varibale UNSUPPORTED.
|
||||
*
|
||||
*/
|
||||
public boolean isUnsupported()
|
||||
{
|
||||
return UNSUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
public static boolean FAILED=false;
|
||||
public static boolean PASSED=true;
|
||||
public boolean UNSUPPORTED=false;
|
||||
}
|
||||
102
mozilla/java/dom/tests/src/BWJavaTemplate.README
Executable file
102
mozilla/java/dom/tests/src/BWJavaTemplate.README
Executable file
@@ -0,0 +1,102 @@
|
||||
|
||||
JavaTest Template:
|
||||
|
||||
Woking on similar lines as JavaSpec, this template generator parses an
|
||||
input Class file and creates unique Test Template Files for
|
||||
each public method complying with all combinations of its parameter list.
|
||||
It is mainly used for doing a white box testing for all API's (methods).
|
||||
|
||||
This will ensure that all Java Testcase Files follow a given template.
|
||||
|
||||
It uses reflection to figure out all constructors and public methods
|
||||
for a given class.
|
||||
|
||||
The file-naming convention for output files is a straight forward one.
|
||||
<class Name>_<method name>_<param combinations>.java
|
||||
|
||||
|
||||
param combinations is based on all permutations depending on the values
|
||||
of different data types (as listed below)
|
||||
|
||||
Listed below is all possible values for types of parameter.
|
||||
String = (null, "DUMMY_STRING")
|
||||
int = (0, Integer.MIN_VALUE, Integer.MAX_VALUE)
|
||||
float = (0, Float.MIN_VALUE, Float.MAX_VALUE)
|
||||
double = (0, Double.MIN_VALUE, Double.MAX_VALUE)
|
||||
long = (0, Long.MIN_VALUE, Long.MAX_VALUE)
|
||||
short = (0, Short.MIN_VALUE, Short.MAX_VALUE)
|
||||
char = (Character.MAX_VALUE)
|
||||
boolean = (true, false)
|
||||
byte = (Byte.MIN_VALUE, Byte.MAX_VALUE)
|
||||
Integer = (null, 0, Integer.MIN_VALUE, Integer.MAX_VALUE)
|
||||
Float = (null, 0, Float.MIN_VALUE, Float.MAX_VALUE)
|
||||
Double = (null, 0, Double.MIN_VALUE, Double.MAX_VALUE)
|
||||
Long = (null, 0, Long.MIN_VALUE, Long.MAX_VALUE)
|
||||
Short = (null, 0, Short.MIN_VALUE, Short.MAX_VALUE)
|
||||
Character = (null, Character.MAX_VALUE)
|
||||
Byte = (null, Byte.MIN_VALUE, Byte.MAX_VALUE)
|
||||
Object = (null, "NOTNULL")
|
||||
|
||||
So for a method 'm' for class 'c' with two String parameters
|
||||
the output files generated will be
|
||||
|
||||
c_m_String_String_0.java --> (null, null)
|
||||
c_m_String_String_1.java --> ("DUMMY_STRING", null)
|
||||
c_m_String_String_2.java --> (null, "DUMMY_STRING")
|
||||
C_m_String_String_3.java --> ("DUMMY_STRING", "DUMMY_STRING")
|
||||
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
How to run
|
||||
==========
|
||||
java BWJavaTestTemplate [ -d <output directory> ] classname
|
||||
|
||||
<output directory> is the location where u want to generate these
|
||||
TestCase files
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
For Example
|
||||
===========
|
||||
Class: x.java
|
||||
|
||||
public class x
|
||||
{
|
||||
|
||||
public x(String arg)
|
||||
{
|
||||
}
|
||||
|
||||
private void modifyVal(String instr)
|
||||
{
|
||||
}
|
||||
|
||||
public void setVal (String ival)
|
||||
{
|
||||
}
|
||||
|
||||
public void setIndexVal (String ival, int index)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Generated Files are
|
||||
|
||||
x_setVal_String_0.java
|
||||
x_setVal_String_1.java
|
||||
x_setIndexVal_String_int_0.java
|
||||
x_setIndexVal_String_int_1.java
|
||||
x_setIndexVal_String_int_2.java
|
||||
x_setIndexVal_String_int_3.java
|
||||
x_setIndexVal_String_int_4.java
|
||||
x_setIndexVal_String_int_5.java
|
||||
x_x_String_0.java
|
||||
x_x_String_1.java
|
||||
x.txt
|
||||
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
NOTE: Right now the author name in each of those generated files is left
|
||||
empty. Future version will reflect the same from configuration files
|
||||
192
mozilla/java/dom/tests/src/BWJavaTemplate.html
Executable file
192
mozilla/java/dom/tests/src/BWJavaTemplate.html
Executable file
@@ -0,0 +1,192 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="GENERATOR" content="Mozilla/4.51 [en] (X11; U; SunOS 5.6 sun4u) [Netscape]">
|
||||
</head>
|
||||
<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B" alink="#FF0000">
|
||||
<b><u><font color="#993399"><font size=+1>JavaTest Template</font></font></u></b>
|
||||
<br>
|
||||
<p>Woking on similar lines as JavaSpec, this template generator parses
|
||||
an
|
||||
<br>input Class file and creates unique Test Template Files for
|
||||
<br>each public method complying with all combinations of its parameter
|
||||
list.
|
||||
<br>It is mainly used for doing a white box testing for all API's (methods).
|
||||
<p>This will ensure that all Java Testcase Files follow a given template.
|
||||
<p>It uses reflection to figure out all constructors and public methods
|
||||
<br>for a given class.
|
||||
<br>The file-naming convention for output files is a straight forward one.
|
||||
<br>[class Name]_[method name]_[param combinations].java
|
||||
<p>param combinations is based on all permutations depending on the values
|
||||
<br>of different data types (as listed below)
|
||||
<br>
|
||||
<p>Listed below is all possible values for types of parameter.
|
||||
<br>
|
||||
<table BORDER COLS=2 WIDTH="100%" BGCOLOR="#99FFCC" NOSAVE >
|
||||
<tr NOSAVE>
|
||||
<td WIDTH="100" NOSAVE>String</td>
|
||||
|
||||
<td>(null, "DUMMY_STRING")</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>int</td>
|
||||
|
||||
<td>(0, Integer.MIN_VALUE, Integer.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>float</td>
|
||||
|
||||
<td>(0, Float.MIN_VALUE, Float.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>double</td>
|
||||
|
||||
<td>(0, Double.MIN_VALUE, Double.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>long</td>
|
||||
|
||||
<td>(0, Long.MIN_VALUE, Long.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>short</td>
|
||||
|
||||
<td>(0, Short.MIN_VALUE, Short.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>char</td>
|
||||
|
||||
<td>(Character.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>boolean</td>
|
||||
|
||||
<td>(true, false)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>byte</td>
|
||||
|
||||
<td>(Byte.MIN_VALUE, Byte.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Integer</td>
|
||||
|
||||
<td>(null, 0, Integer.MIN_VALUE, Integer.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Float</td>
|
||||
|
||||
<td> (null, 0, Float.MIN_VALUE, Float.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Double</td>
|
||||
|
||||
<td>(null, 0, Double.MIN_VALUE, Double.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Long</td>
|
||||
|
||||
<td>(null, 0, Long.MIN_VALUE, Long.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Short</td>
|
||||
|
||||
<td>(null, 0, Short.MIN_VALUE, Short.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Character</td>
|
||||
|
||||
<td>(null, Character.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Byte</td>
|
||||
|
||||
<td>(null, Byte.MIN_VALUE, Byte.MAX_VALUE)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Object</td>
|
||||
|
||||
<td>(null, "NOTNULL")</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td></td>
|
||||
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p>So for a method 'm' for class 'c' with two String parameters the output
|
||||
files generated will be
|
||||
<br>c_m_String_String_0.java --> (null, null)
|
||||
<br>c_m_String_String_1.java --> ("DUMMY_STRING", null)
|
||||
<br>c_m_String_String_2.java --> (null, "DUMMY_STRING")
|
||||
<br>C_m_String_String_3.java --> ("DUMMY_STRING", "DUMMY_STRING")
|
||||
<p>
|
||||
<hr NOSHADE WIDTH="100%">
|
||||
<h2>
|
||||
<b><u><font color="#993399"><font size=+1>How to run</font></font></u></b></h2>
|
||||
|
||||
<p><br>java BWJavaTestTemplate [ -d <output directory>] classname
|
||||
<br><output directory>is the location where u want to generate these
|
||||
<br>TestCase files
|
||||
<br>
|
||||
<hr NOSHADE WIDTH="100%">
|
||||
<h2>
|
||||
<u><font color="#993399">Example</font></u></h2>
|
||||
<font color="#FF6666">Class: x.java</font><font color="#FF6666"></font>
|
||||
<p><font color="#FF6666"> public class x</font>
|
||||
<br><font color="#FF6666"> {</font>
|
||||
<br><font color="#FF6666"> public x(String
|
||||
arg)</font>
|
||||
<br><font color="#FF6666"> {</font>
|
||||
<br><font color="#FF6666"> }</font><font color="#FF6666"></font>
|
||||
<p><font color="#FF6666"> private void modifyVal(String
|
||||
instr)</font>
|
||||
<br><font color="#FF6666"> {</font>
|
||||
<br><font color="#FF6666"> }</font><font color="#FF6666"></font>
|
||||
<p><font color="#FF6666"> public void setVal (String
|
||||
ival)</font>
|
||||
<br><font color="#FF6666"> {</font>
|
||||
<br><font color="#FF6666"> }</font><font color="#FF6666"></font>
|
||||
<p><font color="#FF6666"> public void setIndexVal
|
||||
(String ival, int index)</font>
|
||||
<br><font color="#FF6666"> {</font>
|
||||
<br><font color="#FF6666"> }</font>
|
||||
<br><font color="#FF6666"> }</font>
|
||||
<br><font color="#FF6666"></font> <font color="#FF6666"></font>
|
||||
<p>Generated Files are
|
||||
<br><font color="#FF6666"> x_setVal_String_0.java</font>
|
||||
<br><font color="#FF6666"> x_setIndexVal_String_int_0.java</font>
|
||||
<br><font color="#FF6666"> x_setIndexVal_String_int_1.java</font>
|
||||
<br><font color="#FF6666"> x_setIndexVal_String_int_2.java</font>
|
||||
<br><font color="#FF6666"> x_setIndexVal_String_int_3.java</font>
|
||||
<br><font color="#FF6666"> x_setIndexVal_String_int_4.java</font>
|
||||
<br><font color="#FF6666"> x_setIndexVal_String_int_5.java</font>
|
||||
<br><font color="#FF6666"> x_x_String_0.java</font>
|
||||
<br><font color="#FF6666"> x_x_String_1.java</font>
|
||||
<br><font color="#FF6666"> x.txt</font><font color="#FF6666"></font>
|
||||
<p>
|
||||
<hr NOSHADE WIDTH="100%">
|
||||
<p><u><font color="#993399"><font size=+1>NOTE</font></font></u>
|
||||
<p>Right now the author name in each of those generated files is left
|
||||
empty. Future version will reflect the same from configuration files.
|
||||
</body>
|
||||
</html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user