Compare commits

..

67 Commits

Author SHA1 Message Date
edburns%acm.org
f8b026e017 Un-commented out the line that puts the DOMViewer in the UI.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@89685 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-15 23:22:49 +00:00
edburns%acm.org
09e40a2ebb Modified Ashu's fix to bug 70656 so that it doesn't leak memory, and
Initialize is called in both cases, whether or not the multiple profile
code is executed.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@89352 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-12 19:46:12 +00:00
edburns%acm.org
75bc9eafe7 Changed reference to install_unix.js back to install_win32.js
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@89146 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-09 21:07:49 +00:00
edburns%acm.org
88d380dc4c Any ActionEvent that calls java must be posted synchronously.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@89144 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-09 20:07:17 +00:00
edburns%acm.org
8be8b1d7ac Remove the dependency on PERL for the commercial example script
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@89078 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-09 04:24:18 +00:00
edburns%acm.org
95d23bf54c Remove dependency on PERL for running webclient
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@88864 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-08 00:57:08 +00:00
edburns%acm.org
ce23f67d01 Incorporate Bryan Hunter's changes to use $MOZILLA_FIVE_HOME instead of relative paths.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@88846 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-07 23:21:43 +00:00
edburns%acm.org
3f7563181b removed_non_existing_methods_from_being_loaded_in_NativeLoaderStub
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@88465 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-03 02:53:26 +00:00
edburns%acm.org
d3714afb61 clobber_all_rule
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@88463 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-03 02:44:10 +00:00
edburns%acm.org
8ad13e7efe This checkin allows the building of an xpi module for webclient on
linux.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@88460 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-03 02:30:13 +00:00
edburns%acm.org
322deac6f6 Make it so the JNI generated headers are removed in make clobber_all
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@88459 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-03 02:29:30 +00:00
edburns%acm.org
e88efacaa6 Workaround for multiple profiles bug.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@88413 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-02 23:15:40 +00:00
edburns%acm.org
d186cf20f9 comments
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@88410 18797224-902f-48f8-a5cc-f745e15eee43
2001-03-02 23:05:01 +00:00
edburns%acm.org
dc27d735e6 This checkin fixes both bugs 66430 and 48348.
author=ashuk, edburns
r=edburns

Files relating to 66430

M dom/jni/makefile.win
M dom/src/makefile.win
M webclient/classes_spec/Makefile.win
A webclient/src_moz/install_win32.js
M webclient/src_moz/Makefile.win

Files relating to 48348

M webclient/classes_spec/org/mozilla/webclient/CurrentPage.java
M webclient/classes_spec/org/mozilla/webclient/test/EMWindow.java
M webclient/classes_spec/org/mozilla/webclient/test/EmbeddedMozilla.java
M webclient/classes_spec/org/mozilla/webclient/wrapper_native/CurrentPageImpl.java
M webclient/src_moz/CurrentPageActionEvents.cpp
M webclient/src_moz/CurrentPageActionEvents.h
M webclient/src_moz/CurrentPageImpl.cpp

68430:

This fix enables the user to produce a .xpi file containing all the
necessary binary elements to run webclient.

48348

This fix provides a pure java implementation of View Source.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@87685 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-22 21:43:06 +00:00
ashuk%eng.sun.com
45b3a63725 Bug=48348
author=ashuk
ra=edburns

This Fix comments the Native code for implementing GetSourceBytes. The
new implementation of these functions is in Java.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@87175 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-16 03:07:29 +00:00
ashuk%eng.sun.com
14ee066c52 Bug=48348
author=ashuk
ra=edburns

Implements GetSource and GetSourceBytes in Java


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@87174 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-16 03:05:22 +00:00
edburns%acm.org
69c14a16d3 Some methods for bookmarks were not present
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@87159 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-16 00:47:14 +00:00
edburns%acm.org
fb87456485 NativeEventThread.cpp:
Install our own X error handler.  GDK's error handler
can exit in some cases, and this isn't the right behavior
for Java caused X errors.

WindowControlImpl.cpp:

Put in comments on how to debug on unix

runem.pl:

-classic doesn't work on Unix


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@87150 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-15 23:56:09 +00:00
ashuk%eng.sun.com
19af21ef93 Bug=68729
author=ashuk
ra=edburns

This fix tries to remove any deadlock conditions that could exist
because of code in Synchronized java blocks calling other functions
in synchronized blocks that are synchronized on the same object.

Changes are in the Interfaces Navigation, History and WindowControl

In the JNI code ::util_PostSynchronousEvent calls were replaced by
::util_PostEvent calls.


_Ashu


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@87047 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-14 23:57:50 +00:00
edburns%acm.org
25061f6ced bug=68729
r=ashuk

This bug fix avoids some thread safety assertions by moving the bulk of
the activity into the action events.

The following files are in this iteration of this bugfix.

M CurrentPageActionEvents.cpp
M CurrentPageActionEvents.h
M CurrentPageImpl.cpp

CurrentPageActionEvents.cpp  CurrentPageActionEvents.h  CurrentPageImpl.cpp


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@86999 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-14 18:27:16 +00:00
edburns%acm.org
fb9eb2800c bug=49797
r=ashuk

The following files are in the fix for this bug:

M CBrowserContainer.cpp
M CurrentPageImpl.cpp
M HistoryImpl.cpp
M NavigationImpl.cpp

Here is the reason for the bug:

User presses "Refresh" button.  This causes the following code to be executed:

public void refresh(long loadFlags)
{
    ParameterCheck.noLessThan(loadFlags, 0);
    myFactory.throwExceptionIfNotInitialized();
    Assert.assert(-1 != nativeWebShell);

    synchronized(myBrowserControl) {
        nativeRefresh(nativeWebShell, loadFlags);
    }
}

In the process of refresh, on another thread, the user's
eventDispatched() method is called, which calls history.canBack():

public boolean canBack()
{
    myFactory.throwExceptionIfNotInitialized();
    Assert.assert(-1 != nativeWebShell);
    boolean result = false;

    synchronized(myBrowserControl) {
        result = nativeCanBack(nativeWebShell);
    }
    return result;
}

This call blocks on trying to acquire the lock for myBrowserControl, and
the load can't proceed until canBack() returns.  DEADLOCK.

-------------

The fix is to use PostEvent instead of PostSynchronous event.  This
causes the call to nativeRefresh to return immediately.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@86938 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-13 22:19:12 +00:00
edburns%acm.org
063fc9c66f Included NativeEventThreadActionEvents.cpp
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@86643 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-09 00:58:25 +00:00
ashuk%eng.sun.com
f1536ae287 Bug=44327
author=ashuk
r=a=edburns

This Fix enables multiple windows in Webclient on Win32. The fix modifies
the following files:

M mozilla/java/webclient/classes_spec/org/mozilla/webclient/wrapper_native/NativeEventThread.java
M mozilla/java/webclient/classes_spec/org/mozilla/webclient/test/EmbeddedMozilla.java
M mozilla/java/webclient/src_moz/Makefile.win
M mozilla/java/webclient/src_moz/NativeEventThread.cpp
M mozilla/java/webclient/src_moz/NavigationActionEvents.cpp
M mozilla/java/webclient/src_moz/WindowControlActionEvents.cpp
M mozilla/java/webclient/src_moz/WindowControlImpl.cpp
M mozilla/java/webclient/src_moz/ns_util.cpp
M mozilla/java/webclient/src_moz/ns_util.h
? mozilla/java/webclient/src_moz/NativeEventThreadActionEvents.h
? mozilla/java/webclient/src_moz/NativeEventThreadActionEvents.cpp

Pls refer http://bugzilla.mozilla.org/show_bug.cgi?id=44327 for more
info on this Bug and this Fix


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@86638 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-08 23:55:05 +00:00
edburns%acm.org
6278163343 In the zeal for converting to action events,
this GetSessionHistory call was missed.
bug=67872
r=ashuk
author=edburns


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@86387 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-07 00:08:44 +00:00
edburns%acm.org
6f3edb2ec2 Removed erroneous trailing \.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@86264 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-06 00:40:37 +00:00
edburns%acm.org
1a0eda9d5f // PENDING(edburns): HACK workaround for bug 59530. This
// workaround forces the nsBookmarksService to leak so that it
        // never gets destructed, thus the timer never gets canceled and
        // thus the fact that the static nsCOMPtr instance has gone away
        // doesn't matter.

The following files are in this fix:

M src_moz/CBrowserContainer.cpp
M src_moz/CBrowserContainer.h
M src_moz/WindowControlActionEvents.cpp
M src_moz/rdf_util.cpp
M src_moz/wcIBrowserContainer.h
author=edburns
r=ashuk


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@86242 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-05 19:04:05 +00:00
edburns%acm.org
cb23e73389 This fix is a necessary pre-condition to the fix for 64332. In addition, this fix
contains a workaround to this bug: disable hotspot and disable JIT.

This fix removes the JNIEnv * parameter from util_InitStringConstants().


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@86126 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-02 23:57:24 +00:00
edburns%acm.org
5f0e435699 bug=64988
r=ashuk
a=edburns
author=edburns

Files in this fix:

NativeEventThread.java

This fix makes it so much less than 100% of the CPU is used
when webclient is in idle state.

It does this by inserting Thread.sleep(1) in the
NativeEventThread.run() method's main event loop.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@84773 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-11 02:42:36 +00:00
rpallath%eng.sun.com
24415ca940 test.xml ==> ( changed to XHTML)
autorun.sh                ==>  (reflected test.xml file)
BWTestClass.lst.html.ORIG ==>  (removed namespaces related  test case entires)
BWTestClass.lst.xml.ORIG  ==>  (added Namespace related test case entries)


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@84653 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-09 16:23:51 +00:00
rpallath%eng.sun.com
e0cf8ef4e9 Modified all XML namespaces related test cases, to refelct correct URI and qualified and local names
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@84652 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-09 16:21:04 +00:00
edburns%acm.org
0e64ca3709 bug 64445
author edburns
r=ashuk
a=edburns

This checkin corrects an earlier omission of the proper policy of having
all maor actions take place using nsActionEvents.  This is necessary to
avoid thread safety assertions.

The following files are in this fix:

M classes_spec/org/mozilla/webclient/wrapper_native/PreferencesImpl.java
M src_moz/Makefile.in
M src_moz/Makefile.win
A src_moz/PreferencesActionEvents.cpp
A src_moz/PreferencesActionEvents.h
M src_moz/PreferencesImpl.cpp
M src_moz/motif/NativeLoaderStub.cpp


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@84623 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-09 00:59:58 +00:00
(no author)
28e7132c6d This commit was manufactured by cvs2svn to create branch
'JAVADEV_RTM_20001102'.

git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@84613 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-08 23:24:12 +00:00
edburns%acm.org
bf24f1b3d6 Test cases
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@84587 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-08 20:51:57 +00:00
edburns%acm.org
05ddc0641c bug=62853
r=ashuk

This fix implements getPrefs() and adds a new method,

  public void registerPrefChangedCallback(PrefChangedCallback cb,
                                          String prefName, Object closure);

to preferences.

The following files are in this fix:

A classes_spec/org/mozilla/webclient/PrefChangedCallback.java
M classes_spec/org/mozilla/webclient/Preferences.java
M classes_spec/org/mozilla/webclient/test/EMWindow.java
M classes_spec/org/mozilla/webclient/wrapper_native/PreferencesImpl.java
M src_moz/CBrowserContainer.cpp
M src_moz/PreferencesImpl.cpp
M src_moz/ns_util.h
M src_moz/motif/NativeLoaderStub.cpp


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83664 18797224-902f-48f8-a5cc-f745e15eee43
2000-12-14 22:47:43 +00:00
ashuk%eng.sun.com
51d3895531 author=ashuk
Bug=62436
changes in NativeLoaderStub.cpp for Prefs to work on Solaris


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83558 18797224-902f-48f8-a5cc-f745e15eee43
2000-12-12 22:59:59 +00:00
edburns%acm.org
57633551c5 r=ashuk
a=edburns
bug=62436

Add the ability to set string, int, and bool prefs.  Needs more
functionality.

The following files are in this bug:

A classes_spec/org/mozilla/webclient/Preferences.java
A classes_spec/org/mozilla/webclient/wrapper_native/PreferencesImpl.java
A src_moz/PreferencesImpl.cpp
M classes_spec/org/mozilla/webclient/BrowserControlImpl.java
M classes_spec/org/mozilla/webclient/test/EMWindow.java
M classes_spec/org/mozilla/webclient/wrapper_native/WrapperFactoryImpl.java
M src_moz/Makefile.in
M src_moz/Makefile.win
M src_moz/WrapperFactoryImpl.cpp
M src_moz/motif/NativeLoaderStub.cpp
M src_share/Makefile.in
M src_share/Makefile.win


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83546 18797224-902f-48f8-a5cc-f745e15eee43
2000-12-12 20:50:05 +00:00
edburns%acm.org
23de81565f Forgot to check these in for 62436.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83517 18797224-902f-48f8-a5cc-f745e15eee43
2000-12-12 02:31:35 +00:00
edburns%acm.org
179a3a4d78 Part 2
How to test this bug.

1. Remove your .mozilla directory, or equivalent

1.5 Set up the proxy preferences so you can get to bugzilla.mozilla.org.

2. Start mozilla and go to Edit-Preferences->Advanced->Cookies.

3. Remove all Cookies

4. Accept all cookies, and warn me before accepting cookes

5. Stop mozilla.

Start webclient and visit
<http://bugzilla.mozilla.org/enter_bug.cgi?product=Browser>, then enter
your bugzilla userid and password.  A Confirm dialog should come up.
Make sure that the dialog does the right thing, that is, if you accept
the cookie, exit webclient, start up mozilla, and use the cookie viewer
to see that the cookie is there.  Please note that you see the Enter a
bug page whether you accept the cookie or not.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83508 18797224-902f-48f8-a5cc-f745e15eee43
2000-12-12 01:11:22 +00:00
edburns%acm.org
b0bb9b0ac7 This fix enables the adding of bookmarks and bookmark folders.
* Due to the vagaries of the mozilla RDF implementation, folders and
 * bookmark entries are handled differently.  For Folders, we don't
 * create a nativeRDFNode at the outset.  Rather, we just create the
 * properties table and stock it with the known keys, then wait for the
 * nativeRDFNode to be created en addBookmark.

 * The adding of bookmark folders is done through the RDF DoCommand
 * interface.  The DoCommand interface creates the nsIRDFResource on
 * your behalf.  We use an nsIRDFObserver to obtain the created resource
 * as the DoCommand executes.

The following files are in this fix.

A src_moz/wsRDFObserver.cpp
A src_moz/wsRDFObserver.h
M classes_spec/org/mozilla/webclient/BookmarkEntry.java
M classes_spec/org/mozilla/webclient/test/EMWindow.java
M classes_spec/org/mozilla/webclient/wrapper_native/BookmarkEntryImpl.java
M classes_spec/org/mozilla/webclient/wrapper_native/BookmarksImpl.java
M classes_spec/org/mozilla/webclient/wrapper_native/RDFTreeNode.java
M src_moz/Makefile.win
M src_moz/Makefile.in
M src_moz/RDFActionEvents.cpp
M src_moz/RDFActionEvents.h
M src_moz/RDFTreeNode.cpp
M src_moz/rdf_util.cpp
M src_moz/rdf_util.h
M src_moz/motif/NativeLoaderStub.cpp
M src_share/jni_util.cpp
M src_share/jni_util.h


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83504 18797224-902f-48f8-a5cc-f745e15eee43
2000-12-12 00:00:15 +00:00
ashuk%eng.sun.com
514083cc5e author=ashuk
Bug=54129

ashuk@versailles[43]>mozcvs diff -u Makefile.in
Index: Makefile.in
===================================================================
RCS file: /cvsroot/mozilla/java/Makefile.in,v
retrieving revision 1.6.2.2
diff -u -r1.6.2.2 Makefile.in
--- Makefile.in 2000/11/28 19:38:24     1.6.2.2
+++ Makefile.in 2000/12/10 20:37:26
@@ -27,13 +27,14 @@

 DIRS=   util           \
        external        \
-       dom             \
-       webclient
+       dom

 ifeq ($(BUILD_WEBCLIENT_ONLY),)
 DIRS += xpcom \
         plugins
 endif
+
+DIRS += webclient

 include $(topsrcdir)/config/rules.mk


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83477 18797224-902f-48f8-a5cc-f745e15eee43
2000-12-10 20:40:10 +00:00
edburns%acm.org
a014aefe38 This fix adds basic authentication capability to webclient.
public interface Prompt

 * The custom app must implement this interface in order to supply the
 * underlying browser with basic authentication behavior.  The custom
 * app must tell webclient about its Prompt implementation by calling
 * Navigation.setPrompt().  This must be done FOR EACH BrowserControl
 * instance!

public void setPrompt(Prompt yourPrompt);

 * Gives this Navigation instance the ability to call back the custom
 * app when a site with basic authentication is encountered.  The custom
 * app can choose to put up appropriate modal UI.

Please note that due to bug
http://bugzilla.mozilla.org/show_bug.cgi?id=61669 you must disable the
cache to have this work.  Put these lines in your prefs file:

user_pref("browser.cache.disk_cache_size", 0);
user_pref("browser.cache.enabled", false);

The following files are in this fix:

M classes_spec/org/mozilla/webclient/Navigation.java
M classes_spec/org/mozilla/webclient/test/EMWindow.java
A classes_spec/org/mozilla/webclient/test/PasswordDialog.java
M classes_spec/org/mozilla/webclient/wrapper_native/NavigationImpl.java
M src_moz/CBrowserContainer.cpp
M src_moz/CBrowserContainer.h
M src_moz/NavigationImpl.cpp
M src_moz/wcIBrowserContainer.h
M src_moz/motif/NativeLoaderStub.cpp
M src_share/jni_util.cpp
M src_share/jni_util.h
M src_share/jni_util_export.cpp
M src_share/jni_util_export.h
A classes_spec/org/mozilla/webclient/Prompt.java


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83172 18797224-902f-48f8-a5cc-f745e15eee43
2000-12-01 01:33:52 +00:00
idk%eng.sun.com
3901e08768 *Not part of tbox builds*
fix for 61442


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@83100 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-30 00:56:18 +00:00
edburns%acm.org
226fedca23 If the env var BUILD_WEBCLIENT_ONLY is defined, only webclient and supporting
modules are built.  Otherwise, all of Blackwood is built.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82975 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-28 19:38:24 +00:00
ashuk%eng.sun.com
d2f3803d84 author=ashuk
Bug=58971


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82953 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-28 02:01:47 +00:00
ashuk%eng.sun.com
cbfdf17b04 author=ashuk
Bug=58971


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82948 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-28 01:36:59 +00:00
ashuk%eng.sun.com
6c09a59e62 author=ashuk
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82947 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-28 01:35:55 +00:00
edburns%acm.org
6001c37dc8 bug=60016
r=idk
a=idk
This checkin makes it possible to compile blackwood on linux.  You must have
Lesstif installed in /usr/X11R6 for pluglets to successfully compile.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82927 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-27 23:18:05 +00:00
ashuk%eng.sun.com
a29f24e90a author=ashuk
removed NativeEventThreadActionEvent.cpp from Makefile.in
Feature not yet checked in.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82907 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-27 17:08:53 +00:00
margaret.chan%sun.com
8cdab069f8 *not part of tbox builds*
fixed typo.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82871 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-23 00:09:08 +00:00
idk%eng.sun.com
d63c44ca18 * not part of tbox build *
removed ^M from Makefile.in


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82858 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-22 18:17:28 +00:00
idk%eng.sun.com
27686eb422 *not part of tbox builds*
58971 .  Added clobber_all to pluglets makefiles


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82835 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-21 22:09:08 +00:00
ashuk%eng.sun.com
ce3f3336c3 author=ashuk
Bug=54129
r=idk

Integrating Blackconnect


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82829 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-21 17:44:04 +00:00
ashuk%eng.sun.com
803200a166 author=ashuk
Bug=58971
r=edburns


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82828 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-21 17:35:07 +00:00
edburns%acm.org
589e84b4c6 Didn't compile on win32. Needed jobject cast.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82783 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-20 03:44:23 +00:00
idk%eng.sun.com
a15ca2cfc5 *not part of tbix build*
included mozilla/java/xpcom/java/xpidl to build


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82780 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-18 19:50:09 +00:00
idk%eng.sun.com
730d1ad82a Merged trunk to JAVADEV_RTM_20001102 (blackConnect)
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82726 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-17 04:39:18 +00:00
ashuk%eng.sun.com
fabac9731e author=ashuk
Bug=59521
r=a=edburns


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82682 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-16 18:29:11 +00:00
edburns%acm.org
7efb8ae377 Purely cosmetic change. Move the LoadFromStream exercising
functionality to the menubar.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82556 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-11 19:43:22 +00:00
edburns%acm.org
0f963ee782 bug 59851
a=edburns
This change is mostly cosmetic.  It adds a history menu that exercises the History
API.

The non-cosmetic change is in wsGoToEvent().  This was commented out since
M15, now it works.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82555 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-11 19:32:31 +00:00
edburns%acm.org
d00a452f0d Cosmetic change. Use a blank label instead of a button below
the text field.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82514 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-10 00:02:13 +00:00
edburns%acm.org
acc72ac9a6 bug 47464
a=edburns
r=ashuk

This fix removes gHistory, and makes it so History.getURLForIndex()
works, thanks to sva@sparc.spb.su (Vladimir Strigun).

M HistoryImpl.cpp
M NativeEventThread.cpp
M WindowControlActionEvents.cpp
M WindowControlImpl.cpp
M WrapperFactoryImpl.cpp
M ns_util.h


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82466 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-09 18:32:17 +00:00
edburns%acm.org
2d71a48609 Cosmetic change. Use two rows of buttons.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82432 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-08 20:27:43 +00:00
edburns%acm.org
232b27e5c3 Files in this fix:
M BookmarksImpl.cpp
A CurrentPageActionEvents.cpp
A CurrentPageActionEvents.h
M CurrentPageImpl.cpp
A HistoryActionEvents.cpp
A HistoryActionEvents.h
M HistoryImpl.cpp
M Makefile.in
M Makefile.win
A NavigationActionEvents.cpp
A NavigationActionEvents.h
M NavigationImpl.cpp
A RDFActionEvents.cpp
A RDFActionEvents.h
M RDFEnumeration.cpp
M RDFTreeNode.cpp
A WindowControlActionEvents.cpp
A WindowControlActionEvents.h
M WindowControlImpl.cpp
M nsActions.cpp
M nsActions.h

This fix breaks nsActions into separate files per usage.

The criterion I use is: if the event class gets instantiated in file
Blah.cpp, then the implementation should be in BlahActionEvents.{h,cpp}.
The only exception so far is Bookmarks, which uses RDFActionEvents since
all the bookmarks stuff is really RDF.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82429 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-08 19:38:14 +00:00
edburns%acm.org
3806d7211c Fixed Syntax Error.
git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82390 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-07 21:14:31 +00:00
edburns%acm.org
3b74bcabd7 bug 59079
a=edburns
r=ashuk

This checkin adds a method to Navigation: loadFromStream().

This method enables the custom app to give mozilla a java.io.InputStream to load.


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82369 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-07 02:40:45 +00:00
ashuk%eng.sun.com
244b53998c author=ashuk
Bug=52239
r=a=edburns


git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82352 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-06 22:42:28 +00:00
(no author)
24784f84c3 This commit was manufactured by cvs2svn to create branch
'JAVADEV_RTM_20001102'.

git-svn-id: svn://10.0.0.236/branches/JAVADEV_RTM_20001102@82263 18797224-902f-48f8-a5cc-f745e15eee43
2000-11-03 03:16:56 +00:00
2542 changed files with 189038 additions and 8833 deletions

View File

@@ -1,132 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/*
This file overrides all option settings in the IDE. It is an attempt to allow all builds
to have the same options.
Note: We can't use ConditionalMacros.h in this file because it will conflict with
the PowerPlant precompiled headers.
*/
/* warning pragmas */
#pragma warn_hidevirtual on
#pragma warn_emptydecl on
#pragma warn_unusedvar on
#pragma warn_extracomma on
#pragma warn_illpragma on
#pragma warn_possunwant on
#pragma warn_unusedarg off /* turned off to reduce warnings */
#pragma check_header_flags on
/* Language features that must be the same across libraries... */
#pragma enumsalwaysint on
#pragma unsigned_char off
#pragma exceptions on
#pragma bool on
#pragma wchar_type on
#pragma RTTI on
/* Save as much space as possible with strings... */
#pragma pool_strings on
#pragma dont_reuse_strings off
#pragma options align=native
#pragma sym on /* Takes no memory. OK in non-debug. */
#ifdef powerc /* ...generating PowerPC */
#pragma toc_data on
#pragma fp_contract on
#pragma readonly_strings on
#ifdef DEBUG
#pragma profile off /* Turn this on to profile the application. */
/* Look for more details about profiling in nsMacMessagePump.cpp. */
#pragma traceback on
#pragma global_optimizer off
#pragma scheduling off
#pragma peephole off
#pragma optimize_for_size off
#else
#if TARGET_CARBON
#pragma traceback on /* should always be ON for Carbon builds */
#else
#pragma traceback off /* leave on until the final release, so MacsBug logs are interpretable */
#endif
#pragma global_optimizer on
#pragma optimization_level 4
#pragma scheduling 603
#pragma peephole on
#pragma optimize_for_size on
#pragma opt_strength_reduction on
#pragma opt_propagation on
#pragma opt_loop_invariants on
#pragma opt_lifetimes on
#pragma opt_dead_code on
#pragma opt_dead_assignments on
#pragma opt_common_subs on
#endif
#else /* ...generating 68k */
#pragma code68020 on
#pragma code68881 off
/* Far everything... */
#pragma far_code
#pragma far_data on
#pragma far_strings on
#pragma far_vtables on
#pragma fourbyteints on /* 4-byte ints */
#pragma IEEEdoubles on /* 8-byte doubles (as required by Java and NSPR) */
#ifdef DEBUG
#pragma macsbug on
#pragma oldstyle_symbols off
#else
#pragma macsbug off
#endif
#endif

View File

@@ -1,5 +0,0 @@
#
# This is a list of local files which get copied to the mozilla:dist directory
#
IDE_Options.h

View File

@@ -1,59 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#error "DonÕt use me!"
#define OLDROUTINELOCATIONS 0
#define XP_MAC 1
#define NSPR20 1
#define _NO_FAST_STRING_INLINES_ 1
#define HAVE_BOOLEAN 1
#define NETSCAPE 1
#define OTUNIXERRORS 1 /* We want OpenTransport error codes */
#define OJI 1
/*
This compiles in heap dumping utilities and other good stuff
for developers -- maybe we only want it in for a special SDK
nspr/java runtime(?):
*/
#define DEVELOPER_DEBUG 1
#define MAX(_a,_b) ((_a) < (_b) ? (_b) : (_a))
#define MIN(_a,_b) ((_a) < (_b) ? (_a) : (_b))

Binary file not shown.

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -1,576 +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;
if (index($manifest_subdir, "-unix") == -1 && index($manifest_subdir, "-win") == -1) {
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;

View File

@@ -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__

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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_02_RELEASE
mozilla/security/nss, NETSCAPE_7_02_RELEASE
mozilla/security/manager, NETSCAPE_7_02_RELEASE
mozilla/accessible, NETSCAPE_7_02_RELEASE
mozilla/directory/c-sdk, NETSCAPE_7_02_RELEASE
mozilla/lib/mac/Instrumentation, NETSCAPE_7_02_RELEASE
mozilla/gfx2, NETSCAPE_7_02_RELEASE
mozilla/modules/libpr0n, NETSCAPE_7_02_RELEASE
SeaMonkeyAll, NETSCAPE_7_02_RELEASE
## 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

View File

@@ -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);

View File

@@ -1,4 +0,0 @@
This directory is merely here to test the project editor server. It will go away after
it is validated. For more information, see http://camelot.
Testing watchers.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +0,0 @@
// test1.cpp

View File

@@ -1 +0,0 @@
// test2.cpp

Binary file not shown.

View File

@@ -1 +0,0 @@
// test2.cpp

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +0,0 @@
// test2.cpp
as
dfasdf

View File

@@ -1,12 +0,0 @@
#include <stdio.h>
#include <ConditionalMacros.h>
int main(int argc, char* argv[])
{
FILE* file = fopen("BuildSystemInfo.pm", "w");
if (file != NULL) {
fprintf(file, "$UNIVERSAL_INTERFACES_VERSION=0x%04X;\n", UNIVERSAL_INTERFACES_VERSION);
fclose(file);
}
}

View File

@@ -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_02_RELEASE
NSPR_CO_TAG = NETSCAPE_7_02_RELEASE
PSM_CO_TAG = NETSCAPE_7_02_RELEASE
NSS_CO_TAG = NETSCAPE_7_02_RELEASE
LDAPCSDK_CO_TAG = NETSCAPE_7_02_RELEASE
ACCESSIBLE_CO_TAG = NETSCAPE_7_02_RELEASE
GFX2_CO_TAG = NETSCAPE_7_02_RELEASE
IMGLIB2_CO_TAG = NETSCAPE_7_02_RELEASE
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

40
mozilla/java/Makefile.in Normal file
View File

@@ -0,0 +1,40 @@
#!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= util \
external \
dom
ifeq ($(BUILD_WEBCLIENT_ONLY),)
DIRS += xpcom \
plugins
endif
DIRS += webclient
include $(topsrcdir)/config/rules.mk

43
mozilla/java/Makefile.win Normal file
View 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
View 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.

View File

@@ -0,0 +1,104 @@
******************** 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"
- Navigate to the url file:///opt/SUNWns6/res/javadev/pluglets/test.html
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
View 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.

View 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

View 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)

View 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 $_;
}
}

View 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
View 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

View 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
View 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
View 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+]

View File

@@ -0,0 +1,49 @@
#!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)
rm_java:
ifeq ($(PACKAGE_BUILD),)
rm -Rf $(topsrcdir)/dist/classes/org/mozilla/dom
endif # PACKAGE_BUILD
clobber_all::rm_java

View File

@@ -0,0 +1,52 @@
#!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)
rm_java:
ifeq ($(PACKAGE_BUILD),)
rm -Rf $(topsrcdir)/dist/classes/org/mozilla/dom
endif # PACKAGE_BUILD
clobber_all::rm_java
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)

View 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>

View 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();
}

View File

@@ -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() {}
}

View File

@@ -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);
}

View 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() {}
}

View 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();
}
}

View 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):
*/
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);
}
}

View File

@@ -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);
}

View File

@@ -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() {}
}

View 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();
}
}

View File

@@ -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);
}

View File

@@ -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();
}

View 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);
}

View 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();
}

View 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.EntityReference;
public class EntityReferenceImpl extends NodeImpl implements EntityReference {
// instantiated from JNI or Document.createEntityReference()
private EntityReferenceImpl() {}
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View 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();
};
}

View 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();
}

View 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();
}

View 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.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);
}

View 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);
}

View 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();
}

View File

@@ -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);
}

View File

@@ -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();
}
}

View File

@@ -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);
}

View 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("&amp;");
break;
case '<':
out.append("&lt;");
break;
case '>':
out.append("&gt;");
break;
case '\u00A0':
out.append("&nbsp;");
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);
}
}
}

View File

@@ -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));
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -0,0 +1,86 @@
# 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_all:: clobber
clobber::
rm -f org_*.h

View File

@@ -0,0 +1,86 @@
# 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_all:: clobber
clobber::
rm -f org_*.h

View 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;
}

View 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__ */

View 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;
}

View 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__ */

130
mozilla/java/dom/jni/makefile.win Executable file
View File

@@ -0,0 +1,130 @@
#!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_all:: clobber
clobber::
rm -f $(DIST)\bin\$(DLLNAME).dll
rm -f $(DIST)\lib\$(DLLNAME).lib
rm -f org_*.h

View 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;
}

View 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

View 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);
}

View 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;
}

View 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);
}
}

View 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);
}

View 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);
}

View 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;
}

View 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;
}

View 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;
}

View 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);
}

File diff suppressed because it is too large Load Diff

View 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);
}

View 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;
}

View File

@@ -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;
}
}

View 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;
}

View 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;
}

Some files were not shown because too many files have changed in this diff Show More