From 068674408bc6d820186036996cd418059c033250 Mon Sep 17 00:00:00 2001 From: angryziber Date: Tue, 28 Aug 2007 18:17:21 +0000 Subject: [PATCH] MAC build is now done manually - no more jarbundler task git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/trunk@206 375186e5-ef17-0410-b0b6-91563547dcda --- build.xml | 24 +- .../Angry IP Scanner.app/Contents/Info.plist | 57 + .../Angry IP Scanner.app/Contents/PkgInfo | 1 + ext/mac-jarbundler/LICENSE | 280 ---- ext/mac-jarbundler/README | 1 - ext/mac-jarbundler/build.xml | 127 -- ext/mac-jarbundler/ipscan | 0 ext/mac-jarbundler/jarbundler.jar | Bin 17480 -> 0 bytes .../jarbundler/AppBundleProperties.java | 337 ---- .../sourceforge/jarbundler/DocumentType.java | 215 --- .../net/sourceforge/jarbundler/HelpBook.java | 71 - .../sourceforge/jarbundler/JarBundler.java | 1480 ----------------- .../sourceforge/jarbundler/JavaProperty.java | 64 - .../jarbundler/PropertyListWriter.java | 430 ----- .../net/sourceforge/jarbundler/Service.java | 204 --- 15 files changed, 74 insertions(+), 3217 deletions(-) create mode 100644 ext/mac-bundle/Angry IP Scanner.app/Contents/Info.plist create mode 100644 ext/mac-bundle/Angry IP Scanner.app/Contents/PkgInfo delete mode 100644 ext/mac-jarbundler/LICENSE delete mode 100644 ext/mac-jarbundler/README delete mode 100644 ext/mac-jarbundler/build.xml delete mode 100644 ext/mac-jarbundler/ipscan delete mode 100644 ext/mac-jarbundler/jarbundler.jar delete mode 100644 ext/mac-jarbundler/src/net/sourceforge/jarbundler/AppBundleProperties.java delete mode 100644 ext/mac-jarbundler/src/net/sourceforge/jarbundler/DocumentType.java delete mode 100644 ext/mac-jarbundler/src/net/sourceforge/jarbundler/HelpBook.java delete mode 100644 ext/mac-jarbundler/src/net/sourceforge/jarbundler/JarBundler.java delete mode 100644 ext/mac-jarbundler/src/net/sourceforge/jarbundler/JavaProperty.java delete mode 100644 ext/mac-jarbundler/src/net/sourceforge/jarbundler/PropertyListWriter.java delete mode 100644 ext/mac-jarbundler/src/net/sourceforge/jarbundler/Service.java diff --git a/build.xml b/build.xml index bdbf93b4..88d13e61 100755 --- a/build.xml +++ b/build.xml @@ -23,14 +23,13 @@ - - + @@ -236,16 +235,25 @@ - - + + + + + + + + + + + + + + + diff --git a/ext/mac-bundle/Angry IP Scanner.app/Contents/Info.plist b/ext/mac-bundle/Angry IP Scanner.app/Contents/Info.plist new file mode 100644 index 00000000..4876447b --- /dev/null +++ b/ext/mac-bundle/Angry IP Scanner.app/Contents/Info.plist @@ -0,0 +1,57 @@ + + + + CFBundleName + APPNAME + + CFBundleShortVersionString + VERSION + + CFBundleGetInfoString + VERSION + + CFBundleAllowMixedLocalizations + false + + CFBundleInfoDictionaryVersion + 6.0 + + CFBundleExecutable + ipscan + + CFBundleDevelopmentRegion + English + + CFBundlePackageType + APPL + + CFBundleSignature + ???? + + CFBundleVersion + BUILD + + CFBundleIdentifier + net.azib.ipscan + + Java + + MainClass + MAINCLASS + + JVMVersion + 1.5+ + + ClassPath + + $JAVAROOT/JARFILE + + + StartOnMainThread + + + VMOptions + -XstartOnFirstThread + + + diff --git a/ext/mac-bundle/Angry IP Scanner.app/Contents/PkgInfo b/ext/mac-bundle/Angry IP Scanner.app/Contents/PkgInfo new file mode 100644 index 00000000..6f749b0f --- /dev/null +++ b/ext/mac-bundle/Angry IP Scanner.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL???? diff --git a/ext/mac-jarbundler/LICENSE b/ext/mac-jarbundler/LICENSE deleted file mode 100644 index 960fe746..00000000 --- a/ext/mac-jarbundler/LICENSE +++ /dev/null @@ -1,280 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS diff --git a/ext/mac-jarbundler/README b/ext/mac-jarbundler/README deleted file mode 100644 index 5a6b0130..00000000 --- a/ext/mac-jarbundler/README +++ /dev/null @@ -1 +0,0 @@ -This is a copy of jarbundler-1.9, modified to remove direct dependency on Xerces. diff --git a/ext/mac-jarbundler/build.xml b/ext/mac-jarbundler/build.xml deleted file mode 100644 index c1653255..00000000 --- a/ext/mac-jarbundler/build.xml +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/mac-jarbundler/ipscan b/ext/mac-jarbundler/ipscan deleted file mode 100644 index e69de29b..00000000 diff --git a/ext/mac-jarbundler/jarbundler.jar b/ext/mac-jarbundler/jarbundler.jar deleted file mode 100644 index 73b09a4b4d2e17dec3105f4a6eafc4a99b0775cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17480 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 diff --git a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/AppBundleProperties.java b/ext/mac-jarbundler/src/net/sourceforge/jarbundler/AppBundleProperties.java deleted file mode 100644 index 9df1216c..00000000 --- a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/AppBundleProperties.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * A Mac OS X Jar Bundler Ant Task. - * - * Copyright (c) 2003, Seth J. Morabito All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307, USA. - */ - - -package net.sourceforge.jarbundler; - -// Java Utility -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.List; -import java.util.LinkedList; - -// Java language imports -import java.lang.String; - -public class AppBundleProperties { - - // Required - private String mApplicationName; - private String mMainClass; - - // Application short name - private String mCFBundleName = null; - - // Finder version, with default - private String mCFBundleShortVersionString = "1.0"; - - // Get Info string, optional - private String mCFBundleGetInfoString = null; - - // Build number, optional - private String mCFBundleVersion = null; - - // Help Book folder, optional - private String mCFHelpBookFolder = null; - - // Help Book name, optional - private String mCFHelpBookName = null; - - // Explicit default: false - private boolean mCFBundleAllowMixedLocalizations = false; - - // Explicit default: JavaApplicationStub - private String mCFBundleExecutable = "JavaApplicationStub"; - - // Explicit default: English - private String mCFBundleDevelopmentRegion = "English"; - - // Explicit default: APPL - private final String mCFBundlePackageType = "APPL"; - - // Explicit default: ???? - private String mCFBundleSignature = "????"; - - // Explicit default: 1.3+ - private String mJVMVersion = "1.3+"; - - // Explicit default: 6.0 - private final String mCFBundleInfoDictionaryVersion = "6.0"; - - // Optional keys, with no defaults. - - private String mCFBundleIconFile = null; - private String mCFBundleIdentifier = null; - private String mVMOptions = null; // Java VM options - private String mWorkingDirectory = null; // Java Working Dir - private String mArguments = null; // Java command line arguments - - // Class path and extra class path elements - private List mClassPath = new ArrayList(); - private List mExtraClassPath = new ArrayList(); - - // Java properties - private Hashtable mJavaProperties = new Hashtable(); - - // Document types - private List mDocumentTypes = new LinkedList(); - - // Services - private List mServices = new LinkedList(); - - // ================================================================================ - - /** - * Add a Java runtime property to the properties hashtable. - */ - - public void addJavaProperty(String prop, String val) { - mJavaProperties.put(prop, val); - } - - public Hashtable getJavaProperties() { - return mJavaProperties; - } - - public void addToClassPath(String s) { - mClassPath.add("$JAVAROOT/" + s); - } - - public void addToExtraClassPath(String s) { - mExtraClassPath.add(s); - } - - public List getExtraClassPath() { - return mExtraClassPath; - } - - public DocumentType createDocumentType() { - return new DocumentType(); - } - - public List getDocumentTypes() { - return mDocumentTypes; - } - - /** - * Add a document type to the document type list. - */ - public void addDocumentType(DocumentType documentType) { - mDocumentTypes.add(documentType); - } - - public Service createService() { - return new Service(); - } - - public List getServices() { - return mServices; - } - - /** - * Add a service to the services list. - */ - public void addService(Service service) { - mServices.add(service); - } - - // ================================================================================ - - public void setApplicationName(String s) { - mApplicationName = s; - } - - public String getApplicationName() { - return mApplicationName; - } - - // ================================================================================ - // - // Bundle setters and getters - // - - public void setCFBundleName(String s) { - - if (s.length() > 16) - System.err - .println("WARNING: 'shortname' is recommeded to be no more than 16 " - + "charaters long. See usage notes."); - mCFBundleName = s; - } - - public String getCFBundleName() { - if (mCFBundleName == null) - return getApplicationName(); - - return mCFBundleName; - } - - public void setCFBundleVersion(String s) { - mCFBundleVersion = s; - } - - public String getCFBundleVersion() { - return mCFBundleVersion; - } - - public void setCFBundleInfoDictionaryVersion(String s) { - // mCFBundleInfoDictionaryVersion = s; - } - - public String getCFBundleInfoDictionaryVersion() { - return mCFBundleInfoDictionaryVersion; - } - - public void setCFBundleIdentifier(String s) { - mCFBundleIdentifier = s; - } - - public String getCFBundleIdentifier() { - return mCFBundleIdentifier; - } - - public void setCFBundleGetInfoString(String s) { - mCFBundleGetInfoString = s; - } - - public String getCFBundleGetInfoString() { - if (mCFBundleGetInfoString == null) - return getCFBundleShortVersionString(); - - return mCFBundleGetInfoString; - } - - public void setCFBundleShortVersionString(String s) { - mCFBundleShortVersionString = s; - } - - public String getCFBundleShortVersionString() { - return mCFBundleShortVersionString; - } - - public void setCFBundleIconFile(String s) { - mCFBundleIconFile = s; - } - - public String getCFBundleIconFile() { - return mCFBundleIconFile; - } - - public void setCFBundleAllowMixedLocalizations(boolean b) { - mCFBundleAllowMixedLocalizations = b; - } - - public boolean getCFBundleAllowMixedLocalizations() { - return mCFBundleAllowMixedLocalizations; - } - - public void setCFBundleExecutable(String s) { - mCFBundleExecutable = s; - } - - public String getCFBundleExecutable() { - return mCFBundleExecutable; - } - - public void setCFBundleDevelopmentRegion(String s) { - mCFBundleDevelopmentRegion = s; - } - - public String getCFBundleDevelopmentRegion() { - return mCFBundleDevelopmentRegion; - } - - public void setCFBundlePackageType(String s) { - // mCFBundlePackageType = s; - } - - public String getCFBundlePackageType() { - return mCFBundlePackageType; - } - - public void setCFBundleSignature(String s) { - mCFBundleSignature = s; - } - - public String getCFBundleSignature() { - return mCFBundleSignature; - } - - public void setCFBundleHelpBookFolder(String s) { - mCFHelpBookFolder = s; - } - - public String getCFBundleHelpBookFolder() { - return mCFHelpBookFolder; - } - - public void setCFBundleHelpBookName(String s) { - mCFHelpBookName = s; - } - - public String getCFBundleHelpBookName() { - return mCFHelpBookName; - } - - public void setMainClass(String s) { - mMainClass = s; - } - - public String getMainClass() { - return mMainClass; - } - - public void setJVMVersion(String s) { - mJVMVersion = s; - } - - public String getJVMVersion() { - return mJVMVersion; - } - - public void setVMOptions(String s) { - mVMOptions = s; - } - - public String getVMOptions() { - return mVMOptions; - } - - public void setWorkingDirectory(String s) { - mWorkingDirectory = s; - } - - public String getWorkingDirectory() { - return mWorkingDirectory; - } - - public void setArguments(String s) { - mArguments = s; - } - - public String getArguments() { - return mArguments; - } - - public List getClassPath() { - return mClassPath; - } - -} diff --git a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/DocumentType.java b/ext/mac-jarbundler/src/net/sourceforge/jarbundler/DocumentType.java deleted file mode 100644 index 241b59e1..00000000 --- a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/DocumentType.java +++ /dev/null @@ -1,215 +0,0 @@ -package net.sourceforge.jarbundler; - -import java.lang.String; - -import java.io.File; - -import java.util.List; -import java.util.Arrays; -import java.util.ArrayList; - -/** - * Represents an Info.plist DocumentType used for associating a document with - * the application - * - * The Document Types allows you to specify which documents your finished - * product can handle. You should list the application's primary document type - * first because the document controller uses that type by default when the user - * requests a new document. - * - * Name - The name of the document type. - * - * UTI - A list of Uniform Type Identifier (UTI) strings for the document. UTIs - * are strings that uniquely identify abstract types. They can be used to - * describe a file format or data type but can also be used to describe type - * information for other sorts of entities, such as directories, volumes, or - * packages. For more information on UTIs, see the header file UTType.h, - * available as part of LaunchServices.framework in Mac OS X v10.3 and later. - * - * - * Extensions - A list of the filename extensions for this document type. Don't - * include the period in the extension. - * - * - * OS Types - A list of four-letter codes for the document. These codes are - * stored in the document's resources or information property list files. - * - * - * MIME Types - A list of the Multipurpose Internet Mail Extensions (MIME) types - * for the document. MIME types identify content types for Internet - * applications. - * - * - * Icon File - The name of the file that contains the document type's icon. - * - * - * Role - A description of how the application uses the documents of this type. - * - * Editor - The application can display, edit, and save documents of this type. - * - * Viewer - The application can display, but not edit, documents of this type. - * - * Shell - The application provides runtime services for other processes for - * example, a Java applet viewer. - * - * None - The application can neither display nor edit documents of this type - * but instead uses them in some other way. For example, Sketch uses this role - * to declare types it can export but not read. - * - * - * Bundle - Specifies whether the document is a single file or a file bundle, - * that is, a directory that is treated as a single document by certain - * applications, such as the Finder. - * - * - * name="Scan Project" extensions="scansort scanproj" - * ostypes="fold disk fdrp" iconfile="document.icns" mimetypes="text/html - * image/jpeg" role="editor" bundle="true" /> - * - */ - - -public class DocumentType { - - private static final List EMPTYLIST = new ArrayList(0); - - /** Name. The name of the document type. */ - public String name = null; - - /** - * Extensions. A list of the filename extensions for this document type. - * Don't include the period in the extension. - */ - - public String[] extensions = null; - /** - * OS Types. A list of four-letter codes for the document. These codes are - * stored in the document's resources or information property list files. - */ - - public String[] osTypes = null; - /** - * MIME Types. A list of the Multipurpose Internet Mail Extensions (MIME) - * types for the document. MIME types identify content types for Internet - * applications. - */ - - public String[] mimeTypes = null; - - /** - * UTI. A list of Uniform Type Identifier (UTI) strings for the document. - * UTIs are strings that uniquely identify abstract types. They can be used - * to describe a file format or data type but can also be used to describe - * type information for other sorts of entities, such as directories, - * volumes, or packages. For more information on UTIs, see the header file - * UTType.h, available as part of LaunchServices.framework in Mac OS X v10.3 - * and later. - */ - public String[] UTIs = null; - - /** - * Icon File. The name of the file that contains the document types icon. - */ - - public File iconFile = null; - /** - * Role. A description of how the application uses the documents of this - * type. You can choose from four values: - *

- * Editor. The application can display, edit, and save documents of this - * type. - *

- * Viewer. The application can display, but not edit, documents of this - * type. - *

- * Shell. The application provides runtime services for other processesfor - * example, a Java applet viewer. - *

- * None. The application can neither display nor edit documents of this type - * but instead uses them in some other way. For example, Sketch uses this - * role to declare types it can export but not read. - */ - - public String role = null; - - /** - * Bundle. Specifies whether the document is a single file document or a - * document bundle, that is, a directory that is treated as a single - * document by certain applications, such as the Finder. - */ - - public boolean isBundle = false; - - // Document type name - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - // Extensions - public void setExtensions(String extensions) { - this.extensions = extensions.split("[\\s,]"); - } - - public List getExtensions() { - return (extensions == null) ? EMPTYLIST : Arrays.asList(extensions); - } - - // OS Types - public void setOSTypes(String osTypes) { - this.osTypes = osTypes.split("[\\s,]"); - } - - public List getOSTypes() { - return (osTypes == null) ? EMPTYLIST : Arrays.asList(osTypes); - } - - // mime-types - public void setMimeTypes(String mimeTypes) { - this.mimeTypes = mimeTypes.split("[\\s,]"); - } - - public List getMimeTypes() { - return (mimeTypes == null) ? EMPTYLIST : Arrays.asList(this.mimeTypes); - } - - // Uniform Type Identifiers - public void setUTIs(String UTIs) { - this.UTIs = UTIs.split("[\\s,]"); - } - - public List getUTIs() { - return this.UTIs == null ? EMPTYLIST : Arrays.asList(this.UTIs); - } - - // Document icon file - public void setIconFile(File iconFile) { - this.iconFile = iconFile; - } - - public File getIconFile() { - return iconFile; - } - - // Document role - public void setRole(String role) { - this.role = role; - } - - public String getRole() { - return role; - } - - // Is this document represented as a bundle - public void setBundle(boolean isBundle) { - this.isBundle = isBundle; - } - - public boolean isBundle() { - return isBundle; - } - -} diff --git a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/HelpBook.java b/ext/mac-jarbundler/src/net/sourceforge/jarbundler/HelpBook.java deleted file mode 100644 index 6a35018d..00000000 --- a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/HelpBook.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.sourceforge.jarbundler; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.tools.ant.taskdefs.MatchingTask; -import org.apache.tools.ant.types.FileList; -import org.apache.tools.ant.types.FileSet; - -import java.lang.String; - - - -public class HelpBook extends MatchingTask { - - private String folderName = null; - private String name = null; - private String locale = null; - - private final List fileLists = new ArrayList(); - private final List fileSets = new ArrayList(); - - - // Help Book name - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - - // Help Book folder name - public void setFolderName(String folderName) { - this.folderName = folderName; - } - - public String getFolderName() { - return folderName; - } - - - // Help Book locale - public void setLocale(String locale) { - this.locale = locale; - } - - public String getLocale() { - return locale; - } - - // Help Book files as a ANT FileList - public void addFileList(FileList fileList) { - fileLists.add(fileList); - } - - public List getFileLists() { - return fileLists; - } - - // Help Book files as a ANT FileSet - public void addFileSet(FileSet fileSet) { - fileSets.add(fileSet); - } - - public List getFileSets() { - return fileSets; - } - -} diff --git a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/JarBundler.java b/ext/mac-jarbundler/src/net/sourceforge/jarbundler/JarBundler.java deleted file mode 100644 index 56081a7c..00000000 --- a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/JarBundler.java +++ /dev/null @@ -1,1480 +0,0 @@ -/* - * A Mac OS X Jar Bundler Ant Task. - * - * Copyright (c) 2003, Seth J. Morabito All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -package net.sourceforge.jarbundler; - -// This package's imports -import net.sourceforge.jarbundler.AppBundleProperties; -import net.sourceforge.jarbundler.DocumentType; -import net.sourceforge.jarbundler.JavaProperty; -import net.sourceforge.jarbundler.PropertyListWriter; - -// Java I/O -import java.io.BufferedWriter; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileWriter; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintWriter; - -// Java Utility -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -// Apache Jakarta -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.FileScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; - -import org.apache.tools.ant.types.FileList; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.PatternSet; - -import org.apache.tools.ant.taskdefs.MatchingTask; -import org.apache.tools.ant.taskdefs.Chmod; -import org.apache.tools.ant.taskdefs.Delete; - -import org.apache.tools.ant.util.FileUtils; - - -// Java language imports -import java.lang.Boolean; -import java.lang.Process; -import java.lang.Runtime; -import java.lang.String; -import java.lang.System; - -/** - *

- * An ant task which creates a Mac OS X Application Bundle for a Java - * application. - *

- * - *
- *
dir
- *
The directory into which to put the new application bundle.
- *
name
- *
The name of the application bundle. Note that the maximum length of this - * name is 16 characters, and it will be silently cropped if it is longer than - * this.
- *
mainclass
- *
The main Java class to call when running the application.
- *
- * - *

- * One of the following three MUST be used: - * - *

    - *
  1. jars Space or comma-separated list of JAR files to include.; OR
  2. - *
  3. One or more nested <jarfileset>s. These are normal ANT FileSets; - * OR
  4. - *
  5. One or more nested <jarfilelist>s. These are standard ANT - * FileLists.
  6. - *
- * - *

- * Optional attributes: - * - *

- * The following attributes are not required, but you can use them to override - * default behavior. - * - *

- *
verbose - *
If true, show more verbose output while running the task - * - *
version - *
Version information about your application (e.g., "1.0") - * - *
infostring - *
String to show in the "Get Info" dialog - *
- * - * These attributes control the fine-tuning of the "Mac OS X" look and feel. - * - *
- *
arguments - *
Command line arguments. (no default) - * - *
smalltabs - *
Use small tabs. (default "false") Deprecated under JVM 1.4.1 - * - *
antialiasedgraphics - *
Use anti-aliased graphics (default "false") - * - *
antialiasedtext - *
Use anti-aliased text (default "false") - * - *
bundleid - *
Unique identifier for this bundle, in the form of a Java package. No - * default. - * - *
buildnumber - *
Unique identifier for this build - * - *
developmentregion - *
Development Region. Default "English". - * - *
execs - *
Files to be copied into "Resources/MacOS" and made executable - * - *
liveresize - *
Use "Live resizing" (default "false") Deprecated under JVM 1.4.1 - * - * - *
growbox - *
Show growbox (default "true") - * - *
growboxintrudes - *
Intruding growbox (default "false") Deprecated under JVM 1.4.1 - * - *
screenmenu - *
Put swing menu into Mac OS X menu bar. - * - *
type - *
Bundle type (default "APPL") - * - *
signature - *
Bundle Signature (default "????") - * - *
stubfile - *
The Java Application Stub file to copy for your application (default - * MacOS system stub file) - *
- * - *

- * Rarely used optional attributes. - *

- *
chmod - *
Full path to the chmod command. This almost certainly does NOT need to - * be set. - *
- * - *

- * The task also supports nested <execfileset> and/or <execfilelist> - * elements, and <resourcefileset> and/or <resourcefilelist> - * elements, which are standard Ant FileSet and FileList elements. In the first - * case, the referenced files are copied to the Contents/MacOS - * directory and made executable, and in the second they are copied to the - * Contents/Resources directory and not made executable. If you - * winrces, note that in fact the files are installed in locations which have - * the same relation to the Contents/Resources directory as the - * files in the FileSet or FileList have to the 'dir' attribute. Thus in the - * case: - * - *

- *   <resourcefileset dir="builddir/architectures"
- *                       includes="ppc/*.jnilib"/>
- * 
- * - *

- * the *.jnilib files will be installed in - * Contents/Resources/ppc. - * - *

- * The task supports a nested <javaproperty> element, which allows you to - * specify further properties which are set for the JVM when the application is - * launched. This takes a required key attribute, giving the - * property key, plus an attribute giving the property value, which may be one - * of value, giving the string value of the property, - * file, setting the value of the property to be the absolute - * path of the given file, or path, which sets the value to the - * given path. If you are setting paths here, recall that, within the bundle, - * $APP_PACKAGE is set to the root directory of the bundle (ie, - * the path to the foo.app directory), and $JAVAROOT - * to the directory Contents/Resources/Java. - * - *

- * Minimum example: - * - *

- *  
- *    <jarbundler dir="release" name="Bar Project" mainclass="org.bar.Main"
- *        jars="bin/Bar.jar" />
- * 
- * - *

- * Using Filesets - * - *

- *    <jarbundler dir="release" name="Bar Project" mainclass="org.bar.Main">
- *      <jarfileset dir="bin">
- *        <include name="*.jar" />
- *        <exclude name="test.jar" />
- *      </jarfileset>
- *      <execfileset dir="execs">
- *        <include name="**" />
- *      </execfileset>
- *    </jarbundler>
- * 
- * - *

- * Much Longer example: - *

- * - *
- *    <jarbundler dir="release"
- *                name="Foo Project"
- *                mainclass="org.bar.Main"
- *                version="1.0 b 1"
- *                infostring="Foo Project (c) 2002" 
- *                type="APPL"
- *                jars="bin/foo.jar bin/bar.jar"
- *                execs="exec/foobar"
- *                signature="????"
- *                workingdirectory="temp"
- *                icon="resources/foo.icns"
- *                jvmversion="1.4.1+"
- *                vmoptions="-Xmx256m"/>
- * 
- * - * http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/ - */ -public class JarBundler extends MatchingTask { - - private static final String DEFAULT_STUB = "/System/Library/Frameworks/JavaVM.framework/Versions/Current/Resources/MacOS/JavaApplicationStub"; - - private static final String ABOUTMENU_KEY = "com.apple.mrj.application.apple.menu.about.name"; - private static final Set menuItems = new HashSet(); - private File mAppIcon; - - private File mRootDir; - - private final List mJavaFileLists = new ArrayList(); - private final List mJarFileSets = new ArrayList(); - - private final List mExecFileLists = new ArrayList(); - private final List mExecFileSets = new ArrayList(); - - private final List mResourceFileLists = new ArrayList(); - private final List mResourceFileSets = new ArrayList(); - - private final List mJarFileLists = new ArrayList(); - private final List mJavaFileSets = new ArrayList(); - - private final List mExtraClassPathFileLists = new ArrayList(); - private final List mExtraClassPathFileSets = new ArrayList(); - - private final List mJarAttrs = new ArrayList(); - - private final List mExecAttrs = new ArrayList(); - - private final List mExtraClassPathAttrs = new ArrayList(); - - private final List mHelpBooks = new ArrayList(); - - private boolean mVerbose = false; - private boolean mShowPlist = false; - - // Java properties used by Mac OS X Java applications - - private File mStubFile = new File(DEFAULT_STUB); - - private Boolean mAntiAliasedGraphics = null; - - private Boolean mAntiAliasedText = null; - - private Boolean mLiveResize = null; - - private Boolean mScreenMenuBar = null; - - private Boolean mGrowbox = null; - - private Boolean mGrowboxIntrudes = null; - - // The root of the application bundle - private File bundleDir; - - // "Contents" directory - private File mContentsDir; - - // "Contents/MacOS" directory - private File mMacOsDir; - - // "Contents/Resources" directory - private File mResourcesDir; - - // "Contents/Resources/Java" directory - private File mJavaDir; - - // Full path to the 'chmod' command. Can be overridden - // with the 'chmod' attribute. Won't cause any harm if - // not set, or if this executable doesn't exist. - - - private AppBundleProperties bundleProperties = new AppBundleProperties(); - - // Ant file utilities - - private FileUtils mFileUtils = FileUtils.getFileUtils(); - - /*************************************************************************** - * Retreive task attributes - **************************************************************************/ - - /** - * Arguments to the - * - * @param s - * The arguments to pass to the application being launched. - */ - public void setArguments(String s) { - bundleProperties.setArguments(s); - } - - /** - * Override the stub file path to build on non-MacOS platforms - * - * @param file - * the path to the stub file - */ - public void setStubFile(File file) { - mStubFile = (file.exists()) ? file : new File(DEFAULT_STUB); - bundleProperties.setCFBundleExecutable(file.getName()); - } - - /** - * Setter for the "dir" attribute (required) - */ - public void setDir(File f) { - mRootDir = f; - } - - /** - * Setter for the "name" attribute (required) This attribute names the - * output application bundle and asks as the CFBundleName if 'bundlename' is - * not specified - */ - public void setName(String s) { - bundleProperties.setApplicationName(s); - } - - /** - * Setter for the "shortname" attribute (optional) This key identifies the - * short name of the bundle. This name should be less than 16 characters - * long and be suitable for displaying in the menu and the About box. The - * name is (silently) cropped to this if necessary. - */ - public void setShortName(String s) { - bundleProperties.setCFBundleName(s); - } - - /** - * Setter for the "mainclass" attribute (required) - */ - public void setMainClass(String s) { - bundleProperties.setMainClass(s); - } - - /** - * Setter for the "WorkingDirectory" attribute (optional) - */ - public void setWorkingDirectory(String s) { - bundleProperties.setWorkingDirectory(s); - } - - /** - * Setter for the "icon" attribute (optional) - */ - - public void setIcon(File f) { - mAppIcon = f; - bundleProperties.setCFBundleIconFile(f.getName()); - } - - /** - * Setter for the "bundleid" attribute (optional) This key specifies a - * unique identifier string for the bundle. This identifier should be in the - * form of a Java-style package name, for example com.mycompany.myapp. The - * bundle identifier can be used to locate the bundle at runtime. The - * preferences system uses this string to identify applications uniquely. - * - * No default. - */ - public void setBundleid(String s) { - bundleProperties.setCFBundleIdentifier(s); - } - - /** - * Setter for the "developmentregion" attribute(optional) Default "English". - */ - public void setDevelopmentregion(String s) { - bundleProperties.setCFBundleDevelopmentRegion(s); - } - - /** - * Setter for the "aboutmenuname" attribute (optional) - */ - public void setAboutmenuname(String s) { - bundleProperties.setCFBundleName(s); - } - - /** - * Setter for the "smalltabs" attribute (optional) - */ - public void setSmallTabs(boolean b) { - bundleProperties.addJavaProperty("com.apple.smallTabs", new Boolean(b) - .toString()); - } - - /** - * Setter for the "vmoptions" attribute (optional) - */ - public void setVmoptions(String s) { - bundleProperties.setVMOptions(s); - } - - /** - * Setter for the "antialiasedgraphics" attribute (optional) - */ - public void setAntialiasedgraphics(boolean b) { - mAntiAliasedGraphics = new Boolean(b); - } - - /** - * Setter for the "antialiasedtext" attribute (optional) - */ - public void setAntialiasedtext(boolean b) { - mAntiAliasedText = new Boolean(b); - } - - /** - * Setter for the "screenmenu" attribute (optional) - */ - public void setScreenmenu(boolean b) { - mScreenMenuBar = new Boolean(b); - } - - /** - * Setter for the "growbox" attribute (optional) - */ - public void setGrowbox(boolean b) { - mGrowbox = new Boolean(b); - } - - /** - * Setter for the "growboxintrudes" attribute (optional) - */ - public void setGrowboxintrudes(boolean b) { - mGrowboxIntrudes = new Boolean(b); - } - - /** - * Setter for the "liveresize" attribute (optional) - */ - public void setLiveresize(boolean b) { - mLiveResize = new Boolean(b); - } - - /** - * Setter for the "type" attribute (optional) - */ - public void setType(String s) { - bundleProperties.setCFBundlePackageType(s); - } - - /** - * Setter for the "signature" attribute (optional) - */ - public void setSignature(String s) { - bundleProperties.setCFBundleSignature(s); - } - - /** - * Setter for the "jvmversion" attribute (optional) - */ - public void setJvmversion(String s) { - bundleProperties.setJVMVersion(s); - } - - /** - * Setter for the "infostring" attribute (optional) This key identifies a - * human-readable plain text string displaying the copyright information for - * the bundle. The Finder displays this information in the Info window of - * the bundle. (This string was also known as the long version string in Mac - * OS 9). The format of the key should be of the following format: "© - * Great Software, Inc, 1999". You can localize this string by including it - * in the InfoPlist.strings file of the appropriate .lproj directory. - */ - - public void setInfoString(String s) { - bundleProperties.setCFBundleGetInfoString(s); - } - - /** - * Setter for the "shortinfostring" attribute (optional) This key identifies - * the marketing version of the bundle. The marketing version is a string - * that usually displays the major and minor version of the bundle. This - * string is usually of the form n.n.n where n is a number. The first number - * is the major version number of the bundle. The second and third numbers - * are minor revision numbers. You may omit minor revision numbers as - * appropriate. The value of this key is displayed in the default About box - * for Cocoa applications. - * - * The value for this key differs from the value for "CFBundleVersion", - * which identifies a specific build number. The CFBundleShortVersionString - * value represents a more formal version that does not change with every - * build. - */ - public void setShortInfoString(String s) { - setVersion(s); - } - - /** - * Setter for the "verbose" attribute (optional) - */ - public void setVerbose(boolean verbose) { - this.mVerbose = verbose; - } - public void setShowPlist(boolean showPlist) { - this.mShowPlist = showPlist; - } - - - - - /** - * Setter for the "buildnumber" attribute (optional) This key specifies the - * exact build version of the bundle. This string is usually of the form - * nn.n.nxnnn where n is a digit and x is a character from the set [abdf]. - * The first number is the major version number of the bundle and can - * contain one or two digits to represent a number in the range 0-99. The - * second and third numbers are minor revision numbers and must be a single - * numeric digit. The fourth set of digits is the specific build number for - * the release. - * - * You may omit minor revision and build number information as appropriate. - * You may also omit major and minor revision information and specify only a - * build number. For example, valid version numbers include: 1.0.1, - * 1.2.1b10, 1.2d200, d125, 101, and 1.0. - * - * The value of this key typically changes between builds and is displayed - * in the Cocoa About panel in parenthesis. To specify the version - * information of a released bundle, use the CFBundleShortVersionString key. - */ - public void setBuild(String s) { - bundleProperties.setCFBundleVersion(s); - } - - /** - * Setter for the version attribute (optional). It is this property, not - * CFBundleVersion, which should receive the `short' version string. See for - * example - * - */ - public void setVersion(String s) { - bundleProperties.setCFBundleShortVersionString(s); - } - - public void setHelpBookFolder(String s) { - bundleProperties.setCFBundleHelpBookFolder(s); - } - - public void setHelpBookName(String s) { - bundleProperties.setCFBundleHelpBookName(s); - } - - /** - * Setter for the "jars" attribute (required if no "jarfileset" is present) - */ - public void setJars(String s) { - PatternSet patset = new PatternSet(); - patset.setIncludes(s); - - String[] jarNames = patset.getIncludePatterns(getProject()); - - for (int i = 0; i < jarNames.length; i++) - mJarAttrs.add(getProject().resolveFile(jarNames[i])); - } - - /** - * Setter for the "jar" attribute (required if no "jarfileset" is present) - */ - public void setJar(File s) { - mJarAttrs.add(s); - } - - /** - * Setter for the "execs" attribute (optional) - */ - public void setExecs(String s) { - PatternSet patset = new PatternSet(); - patset.setIncludes(s); - - String[] execNames = patset.getIncludePatterns(getProject()); - - for (int i = 0; i < execNames.length; i++) { - File f = new File(execNames[i]); - mExecAttrs.add(f); - } - } - - /** - * Setter for the "extraclasspath" attribute (optional) - */ - public void setExtraclasspath(String s) { - PatternSet patset = new PatternSet(); - patset.setIncludes(s); - - String[] cpNames = patset.getIncludePatterns(getProject()); - - for (int i = 0; i < cpNames.length; i++) { - File f = new File(cpNames[i]); - mExtraClassPathAttrs.add(f); - } - } - - /** - * Set the 'chmod' executable. - */ - public void setChmod(String s) { - log("The \"chmod\" attribute has deprecaited, using the ANT Chmod task internally"); - } - - /*************************************************************************** - * Nested tasks - derived from FileList and FileSet - **************************************************************************/ - - public void addJarfileset(FileSet fs) { - mJarFileSets.add(fs); - } - - public void addJarfilelist(FileList fl) { - mJarFileLists.add(fl); - } - - public void addExecfileset(FileSet fs) { - mExecFileSets.add(fs); - } - - public void addExecfilelist(FileList fl) { - mExecFileLists.add(fl); - } - - public void addResourcefileset(FileSet fs) { - mResourceFileSets.add(fs); - } - - public void addResourcefilelist(FileList fl) { - mResourceFileLists.add(fl); - } - - public void addJavafileset(FileSet fs) { - mJavaFileSets.add(fs); - } - - public void addJavafilelist(FileList fl) { - mJavaFileLists.add(fl); - } - - public void addExtraclasspathfileset(FileSet fs) { - mExtraClassPathFileSets.add(fs); - } - - public void addExtraclasspathfilelist(FileList fl) { - mExtraClassPathFileLists.add(fl); - } - - - /*************************************************************************** - * Nested tasks - new tasks with custom attributes - **************************************************************************/ - - - public void addConfiguredJavaProperty(JavaProperty javaProperty) - throws BuildException { - - String name = javaProperty.getName(); - String value = javaProperty.getValue(); - - if ((name == null) || (value == null)) - throw new BuildException( - "'' must have both 'name' and 'value' attibutes"); - - bundleProperties.addJavaProperty(name, value); - } - - public void addConfiguredDocumentType(DocumentType documentType) throws BuildException { - - String name = documentType.getName(); - String role = documentType.getRole(); - List osTypes = documentType.getOSTypes(); - List extensions = documentType.getExtensions(); - List mimeTypes = documentType.getMimeTypes(); - - if ((name == null) || (role == null)) - throw new BuildException( - "'' must have both a 'name' and a 'role' attibute"); - - if ((osTypes.isEmpty()) && (extensions.isEmpty()) && (mimeTypes.isEmpty())) - throw new BuildException( - "'' of \"" - + name - + "\" must have 'osTypes' or 'extensions' or 'mimeTypes'"); - - bundleProperties.addDocumentType(documentType); - } - - public void addConfiguredService(Service service) { - - //if (service.getPortName() == null) - // throw new BuildException("\"\" must have a \"portName\" attribute"); - - if (service.getMessage() == null) - throw new BuildException("\"\" must have a \"message\" attribute"); - - String menuItem = service.getMenuItem(); - if (menuItem == null) - throw new BuildException("\"\" must have a \"menuItem\" attribute"); - if (!menuItems.add(menuItem)) - throw new BuildException("\"\" \"menuItem\" value must be unique"); - - if (service.getSendTypes().isEmpty() && service.getReturnTypes().isEmpty()) - throw new BuildException("\"\" must have either a \"sendTypes\" attribute, a \"returnTypes\" attribute or both"); - - String keyEquivalent = service.getKeyEquivalent(); - if ((keyEquivalent != null) && (1 != keyEquivalent.length())) - throw new BuildException("\"\" \"keyEquivalent\" must be one character if present"); - - String timeoutString = service.getTimeout(); - if (timeoutString != null) { - long timeout = -1; - try { - timeout = Long.parseLong(timeoutString); - } catch (NumberFormatException nfe) { - throw new BuildException("\"\" \"timeout\" must be a positive integral number"); - } - if (timeout < 0) - throw new BuildException("\"\" \"timeout\" must not be negative"); - } - - bundleProperties.addService(service); - } - - public void addConfiguredHelpBook(HelpBook helpBook) { - - // Validity check on 'foldername' - if (helpBook.getFolderName() == null) { - if (bundleProperties.getCFBundleHelpBookFolder() == null) - throw new BuildException("Either the '' attribute 'foldername' or the '' attribute 'helpbookfolder' must be defined"); - helpBook.setFolderName(bundleProperties.getCFBundleHelpBookFolder()); - } - - // Validity check on 'title' - if (helpBook.getName() == null) { - if (bundleProperties.getCFBundleHelpBookName() == null) - throw new BuildException("Either the '' attribute 'name' or the '' attribute 'helpbookname' must be defined"); - helpBook.setName(bundleProperties.getCFBundleHelpBookName()); - } - - // Make sure some file were selected... - List fileLists = helpBook.getFileLists(); - List fileSets = helpBook.getFileSets(); - - if ( fileLists.isEmpty() && fileSets.isEmpty() ) - throw new BuildException("The '' task must have either " + - "'' or '' nested tags"); - - - mHelpBooks.add(helpBook); - } - - - - /*************************************************************************** - * Execute the task - **************************************************************************/ - - /** - * The method executing the task - */ - - public void execute() throws BuildException { - - // Delete any existing Application bundle directory structure - - bundleDir = new File(mRootDir, bundleProperties.getApplicationName() + ".app"); - - if (bundleDir.exists()) { - Delete deleteTask = new Delete(); - deleteTask.setProject(getProject()); - deleteTask.setDir(bundleDir); - deleteTask.execute(); - } - - // Validate - look for required attributes - // /////////////////////////////////////////// - - if (mRootDir == null) - throw new BuildException("Required attribute \"dir\" is not set."); - - if (mJarAttrs.isEmpty() && mJarFileSets.isEmpty() - && mJarFileLists.isEmpty()) - throw new BuildException("Either the attribute \"jar\" must " - + "be set, or one or more jarfilelists or " - + "jarfilesets must be added."); - - if (!mJarAttrs.isEmpty() - && (!mJarFileSets.isEmpty() || !mJarFileLists.isEmpty())) - throw new BuildException( - "Cannot set both the attribute " - + "\"jars\" and use jar filesets/filelists. Use only one or the other."); - - if (bundleProperties.getApplicationName() == null) - throw new BuildException("Required attribute \"name\" is not set."); - - if (bundleProperties.getMainClass() == null) - throw new BuildException( - "Required attribute \"mainclass\" is not set."); - - // ///////////////////////////////////////////////////////////////////////////////////// - - // Set up some Java properties - - // About Menu, deprecated under 1.4+ - if (useOldPropertyNames()) - bundleProperties.addJavaProperty(ABOUTMENU_KEY, bundleProperties - .getCFBundleName()); - - // Anti Aliased Graphics, renamed in 1.4+ - String antiAliasedProperty = useOldPropertyNames() - ? "com.apple.macosx.AntiAliasedGraphicsOn" - : "apple.awt.antialiasing"; - - if (mAntiAliasedGraphics != null) - bundleProperties.addJavaProperty(antiAliasedProperty, - mAntiAliasedGraphics.toString()); - - // Anti Aliased Text, renamed in 1.4+ - String antiAliasedTextProperty = useOldPropertyNames() - ? "com.apple.macosx.AntiAliasedTextOn" - : "apple.awt.textantialiasing"; - - if (mAntiAliasedText != null) - bundleProperties.addJavaProperty(antiAliasedTextProperty, - mAntiAliasedText.toString()); - - // Live Resize, deprecated under 1.4+ - if (useOldPropertyNames() && (mLiveResize != null)) - bundleProperties.addJavaProperty( - "com.apple.mrj.application.live-resize", mLiveResize - .toString()); - - // Screen Menu Bar, renamed in 1.4+ - String screenMenuBarProperty = useOldPropertyNames() - ? "com.apple.macos.useScreenMenuBar" - : "apple.laf.useScreenMenuBar"; - - if (mScreenMenuBar != null) - bundleProperties.addJavaProperty(screenMenuBarProperty, - mScreenMenuBar.toString()); - - // Growbox, added with 1.4+ - if ((useOldPropertyNames() == false) && (mGrowbox != null)) - bundleProperties.addJavaProperty("apple.awt.showGrowBox", mGrowbox - .toString()); - - // Growbox Intrudes, deprecated under 1.4+ - if (useOldPropertyNames() && (mGrowboxIntrudes != null)) - bundleProperties.addJavaProperty( - "com.apple.mrj.application.growbox.intrudes", - mGrowboxIntrudes.toString()); - - if (!mRootDir.exists() - || (mRootDir.exists() && !mRootDir.isDirectory())) - throw new BuildException( - "Destination directory specified by \"dir\" " - + "attribute must already exist."); - - if (bundleDir.exists()) - throw new BuildException("The directory/bundle \"" - + bundleDir.getName() - + "\" already exists, cannot continue."); - - // Status message - log("Creating application bundle: " + bundleDir); - - if (!bundleDir.mkdir()) - throw new BuildException("Unable to create bundle: " + bundleDir); - - // Make the Contents directory - mContentsDir = new File(bundleDir, "Contents"); - - if (!mContentsDir.mkdir()) - throw new BuildException("Unable to create directory " - + mContentsDir); - - // Make the "MacOS" directory - mMacOsDir = new File(mContentsDir, "MacOS"); - - if (!mMacOsDir.mkdir()) - throw new BuildException("Unable to create directory " + mMacOsDir); - - // Make the Resources directory - mResourcesDir = new File(mContentsDir, "Resources"); - - if (!mResourcesDir.mkdir()) - throw new BuildException("Unable to create directory " - + mResourcesDir); - - // Make the Resources/Java directory - mJavaDir = new File(mResourcesDir, "Java"); - - if (!mJavaDir.mkdir()) - throw new BuildException("Unable to create directory " + mJavaDir); - - // Copy icon file to resource dir. If no icon parameter - // is supplied, the default icon will be used. - - if (mAppIcon != null) { - - - try { - File dest = new File(mResourcesDir, mAppIcon.getName()); - - if(mVerbose) - log("Copying application icon file to \"" + bundlePath(dest) + "\""); - - mFileUtils.copyFile(mAppIcon, dest); - } catch (IOException ex) { - throw new BuildException("Cannot copy icon file: " + ex); - } - } - - // Copy document type icons, if any, to the resource dir - try { - Iterator itor = bundleProperties.getDocumentTypes().iterator(); - - while (itor.hasNext()) { - DocumentType documentType = (DocumentType) itor.next(); - File iconFile = documentType.getIconFile(); - if (iconFile != null) { - File dest = new File(mResourcesDir, iconFile.getName()); - if(mVerbose) - log("Copying document icon file to \"" + bundlePath(dest) + "\""); - mFileUtils.copyFile(iconFile, dest); - } - } - } catch (IOException ex) { - throw new BuildException("Cannot copy document icon file: " + ex); - } - - // Copy application jar(s) from the "jars" attribute (if any) - processJarAttrs(); - - // Copy application jar(s) from the nested jarfileset element(s) - processJarFileSets(); - - // Copy application jar(s) from the nested jarfilelist element(s) - processJarFileLists(); - - // Copy executable(s) from the "execs" attribute (if any) - processExecAttrs(); - - // Copy executable(s) from the nested execfileset element(s) - processExecFileSets(); - - // Copy executable(s) from the nested execfilelist element(s) - processExecFileLists(); - - // Copy resource(s) from the nested resourcefileset element(s) - processResourceFileSets(); - - // Copy resource(s) from the nested javafileset element(s) - processJavaFileSets(); - - // Copy resource(s) from the nested resourcefilelist element(s) - processResourceFileLists(); - - // Copy resource(s) from the nested javafilelist element(s) - processJavaFileLists(); - - // Add external classpath references from the extraclasspath attributes - processExtraClassPathAttrs(); - - // Add external classpath references from the nested - // extraclasspathfileset element(s) - processExtraClassPathFileSets(); - - // Add external classpath references from the nested - // extraclasspathfilelist attributes - processExtraClassPathFileLists(); - - // Copy HelpBooks into place - copyHelpBooks(); - - // Copy the JavaApplicationStub file from the Java system directory to - // the MacOS directory - copyApplicationStub(); - - // Create the Info.plist file - writeInfoPlist(); - - // Create the PkgInfo file - writePkgInfo(); - - // Done! - } - - /*************************************************************************** - * Private utility methods. - **************************************************************************/ - - private void setExecutable(File f) { - - Chmod chmodTask = new Chmod(); - chmodTask.setProject(getProject()); - chmodTask.setFile(f); - chmodTask.setPerm("ugo+rx"); - - if (mVerbose) - log("Setting \"" + bundlePath(f) + "\" to executable"); - - chmodTask.execute(); - - } - - /** - * Utility method to determine whether this app bundle is targeting a 1.3 or - * 1.4 VM. The Mac OS X 1.3 VM uses different Java property names from the - * 1.4 VM to hint at native Mac OS X look and feel options. For example, on - * 1.3 the Java property to tell the VM to display Swing menu bars as screen - * menus is "com.apple.macos.useScreenMenuBar". Under 1.4, it becomes - * "apple.laf.useScreenMenuBar". Such is the price of progress, I suppose. - * - * Obviously, this logic may need refactoring in the future. - */ - - private boolean useOldPropertyNames() { - return (bundleProperties.getJVMVersion().startsWith("1.3")); - } - - private void processJarAttrs() throws BuildException { - - try { - - for (Iterator jarIter = mJarAttrs.iterator(); jarIter.hasNext();) { - File src = (File) jarIter.next(); - File dest = new File(mJavaDir, src.getName()); - - if (mVerbose) - log("Copying JAR file to \"" + bundlePath(dest) + "\""); - - - mFileUtils.copyFile(src, dest); - bundleProperties.addToClassPath(dest.getName()); - } - } catch (IOException ex) { - throw new BuildException("Cannot copy jar file: " + ex); - } - } - - private void processJarFileSets() throws BuildException { - - for (Iterator jarIter = mJarFileSets.iterator(); jarIter.hasNext();) { - - FileSet fs = (FileSet) jarIter.next(); - - Project p = fs.getProject(); - File srcDir = fs.getDir(p); - FileScanner ds = fs.getDirectoryScanner(p); - fs.setupDirectoryScanner(ds, p); - ds.scan(); - - String[] files = ds.getIncludedFiles(); - - try { - - for (int i = 0; i < files.length; i++) { - String fileName = files[i]; - File src = new File(srcDir, fileName); - File dest = new File(mJavaDir, fileName); - - if (mVerbose) - log("Copying JAR file to \"" + bundlePath(dest) + "\""); - - mFileUtils.copyFile(src, dest); - bundleProperties.addToClassPath(fileName); - } - - } catch (IOException ex) { - throw new BuildException("Cannot copy jar file: " + ex); - } - } - } - - private void processJarFileLists() throws BuildException { - - for (Iterator jarIter = mJarFileLists.iterator(); jarIter.hasNext();) { - FileList fl = (FileList) jarIter.next(); - Project p = fl.getProject(); - File srcDir = fl.getDir(p); - String[] files = fl.getFiles(p); - - try { - - for (int i = 0; i < files.length; i++) { - String fileName = files[i]; - File src = new File(srcDir, fileName); - File dest = new File(mJavaDir, fileName); - - if (mVerbose) - log("Copying JAR file to \"" + bundlePath(dest) + "\""); - - - mFileUtils.copyFile(src, dest); - bundleProperties.addToClassPath(fileName); - } - } catch (IOException ex) { - throw new BuildException("Cannot copy jar file: " + ex); - } - } - } - - private void processExtraClassPathAttrs() throws BuildException { - - for (Iterator jarIter = mExtraClassPathAttrs.iterator(); jarIter - .hasNext();) { - File src = (File) jarIter.next(); - bundleProperties.addToExtraClassPath(src.getPath()); - } - } - - private void processExtraClassPathFileSets() throws BuildException { - - for (Iterator jarIter = mExtraClassPathFileSets.iterator(); jarIter - .hasNext();) { - FileSet fs = (FileSet) jarIter.next(); - Project p = fs.getProject(); - File srcDir = fs.getDir(p); - FileScanner ds = fs.getDirectoryScanner(p); - fs.setupDirectoryScanner(ds, p); - ds.scan(); - - String[] files = ds.getIncludedFiles(); - - for (int i = 0; i < files.length; i++) { - File f = new File(srcDir, files[i]); - bundleProperties.addToExtraClassPath(f.getPath()); - } - } - } - - private void processExtraClassPathFileLists() throws BuildException { - - for (Iterator jarIter = mExtraClassPathFileLists.iterator(); jarIter - .hasNext();) { - FileList fl = (FileList) jarIter.next(); - Project p = fl.getProject(); - File srcDir = fl.getDir(p); - String[] files = fl.getFiles(p); - - for (int i = 0; i < files.length; i++) { - File f = new File(srcDir, files[i]); - bundleProperties.addToExtraClassPath(f.getPath()); - } - } - } - - private void processExecAttrs() throws BuildException { - - try { - - for (Iterator execIter = mExecAttrs.iterator(); execIter.hasNext();) { - File src = (File) execIter.next(); - File dest = new File(mMacOsDir, src.getName()); - - if (mVerbose) - log("Copying exec file to \"" + bundlePath(dest) + "\""); - - - mFileUtils.copyFile(src, dest); - setExecutable(dest); - } - } catch (IOException ex) { - throw new BuildException("Cannot copy exec file: " + ex); - } - } - - // Methods for copying FileSets into the application bundle /////////////////////////////// - - // Files for the Contents/MacOS directory - private void processExecFileSets() { - processCopyingFileSets(mExecFileSets, mMacOsDir, true); - } - - // Files for the Contents/Resources directory - private void processResourceFileSets() { - processCopyingFileSets(mResourceFileSets, mResourcesDir, false); - } - - // Files for the Contents/Resources/Java directory - private void processJavaFileSets() { - processCopyingFileSets(mJavaFileSets, mJavaDir, false); - } - - private void processCopyingFileSets(List fileSets, File targetdir, boolean setExec) { - - for (Iterator execIter = fileSets.iterator(); execIter.hasNext();) { - FileSet fs = (FileSet) execIter.next(); - Project p = fs.getProject(); - File srcDir = fs.getDir(p); - FileScanner ds = fs.getDirectoryScanner(p); - fs.setupDirectoryScanner(ds, p); - ds.scan(); - - String[] files = ds.getIncludedFiles(); - - if (files.length == 0) { - // this is probably an error -- warn about it - System.err - .println("WARNING: fileset for copying from directory " - + srcDir + ": no files found"); - } else { - try { - for (int i = 0; i < files.length; i++) { - String fileName = files[i]; - File src = new File(srcDir, fileName); - File dest = new File(targetdir, fileName); - - if (mVerbose) - log("Copying " - + (setExec ? "exec" : "resource") - + " file to \"" + bundlePath(dest) +"\""); - - mFileUtils.copyFile(src, dest); - if (setExec) - setExecutable(dest); - } - } catch (IOException ex) { - throw new BuildException("Cannot copy file: " + ex); - } - } - } - } - - // Methods for copying FileLists into the application bundle ///////////////////////////// - - // Files for the Contents/MacOS directory - private void processExecFileLists() throws BuildException { - processCopyingFileLists(mExecFileLists, mMacOsDir, true); - } - - // Files for the Contents/Resources directory - private void processResourceFileLists() throws BuildException { - processCopyingFileLists(mResourceFileLists, mResourcesDir, false); - } - - // Files for the Contents/Resources/Java directory - private void processJavaFileLists() throws BuildException { - processCopyingFileLists(mJavaFileLists, mJavaDir, false); - } - - private void processCopyingFileLists(List fileLists, File targetDir, boolean setExec) throws BuildException { - - for (Iterator execIter = fileLists.iterator(); execIter.hasNext();) { - - FileList fl = (FileList) execIter.next(); - Project p = fl.getProject(); - File srcDir = fl.getDir(p); - String[] files = fl.getFiles(p); - - if (files.length == 0) { - // this is probably an error -- warn about it - System.err.println("WARNING: filelist for copying from directory " - + srcDir + ": no files found"); - } else { - try { - for (int i = 0; i < files.length; i++) { - String fileName = files[i]; - File src = new File(srcDir, fileName); - File dest = new File(targetDir, fileName); - - if (mVerbose) - log("Copying " - + (setExec ? "exec" : "resource") - + " file to \"" + bundlePath(dest) +"\""); - - mFileUtils.copyFile(src, dest); - if (setExec) - setExecutable(dest); - } - } catch (IOException ex) { - throw new BuildException("Cannot copy jar file: " + ex); - } - } - } - } - - - - private void copyHelpBooks() { - - for (Iterator itor = mHelpBooks.iterator(); itor.hasNext();) { - - HelpBook helpBook = (HelpBook)itor.next(); - - String folderName = helpBook.getFolderName(); - String name = helpBook.getName(); - String locale = helpBook.getLocale(); - - List fileLists = helpBook.getFileLists(); - List fileSets = helpBook.getFileSets(); - - - File helpBookDir = null; - - if (locale == null) { - - // Set the Bundle entries for a nonlocalized Help Book - if (folderName != null) - bundleProperties.setCFBundleHelpBookFolder(folderName); - - if (name != null) - bundleProperties.setCFBundleHelpBookName(name); - - // The non-localized Help Book is top level "/Resources" - helpBookDir = new File(mResourcesDir, folderName); - helpBookDir.mkdir(); - - if(mVerbose) - log("Creating Help Book at \"" + - bundlePath(helpBookDir) + "\""); - - - } else { - - // The localized Help Book is "/Resources/locale.lproj" - - File lproj = new File(mResourcesDir, locale + ".lproj"); - lproj.mkdir(); - helpBookDir = new File(lproj, folderName); - helpBookDir.mkdir(); - - if(mVerbose) - log("Creating Help Book for \"" + locale + - "\" at \"" + bundlePath(helpBookDir) + "\""); - - // Create a local file to override the Bundle settings - File infoPList = new File(lproj, "InfoPlist.strings"); - PrintWriter writer = null; - try { - writer = new PrintWriter(new FileWriter(infoPList)); - writer.println("CFBundleHelpBookFolder = \"" + folderName + "\";"); - writer.println("CFBundleHelpBookName = \"" + name + "\";"); - writer.println("CFBundleName = \"" + bundleProperties.getCFBundleName() + "\";"); - } catch (IOException ioe) { - throw new BuildException("IOException in writing Help Book locale: " + locale); - } finally { - mFileUtils.close(writer); - } - } - - // Write the Help Book source files into the bundle - - processCopyingFileSets(fileSets, helpBookDir, false); - processCopyingFileLists(fileLists, helpBookDir, false); - - } - } - - - - - // Copy the application stub into the bundle - // ///////////////////////////////////////////// - - private void copyApplicationStub() throws BuildException { - - File newStubFile = new File(mMacOsDir, bundleProperties.getCFBundleExecutable()); - - if (mVerbose) - log("Copying Java application stub to \"" + bundlePath(newStubFile) + "\""); - - try { - mFileUtils.copyFile(mStubFile, newStubFile); - } catch (IOException ex) { - throw new BuildException("Cannot copy Java Application Stub: " + ex); - } - - // Set the permissions on the stub file to executable - - setExecutable(newStubFile); - } - - private void writeInfoPlist() throws BuildException { - PropertyListWriter listWriter = new PropertyListWriter(bundleProperties); - File infoPlist = new File(mContentsDir, "Info.plist"); - - listWriter.writeFile(infoPlist); - - if (mVerbose) - log("Creating \"" + bundlePath(infoPlist) + "\" file"); - - - if (mShowPlist) { - try { - BufferedReader in = new BufferedReader(new FileReader(infoPlist)); - String str; - while ((str = in.readLine()) != null) - log(str); - in.close(); - } catch (IOException e) { - throw new BuildException(e); - } - } - } - - - // - // Write the PkgInfo file into the application bundle - // - - private void writePkgInfo() throws BuildException { - File pkgInfo = new File(mContentsDir, "PkgInfo"); - PrintWriter writer = null; - - try { - writer = new PrintWriter(new BufferedWriter(new FileWriter(pkgInfo))); - writer.print(bundleProperties.getCFBundlePackageType()); - writer.println(bundleProperties.getCFBundleSignature()); - writer.flush(); - } catch (IOException ex) { - throw new BuildException("Cannot create PkgInfo file: " + ex); - } finally { - mFileUtils.close(writer); - } - } - - private String bundlePath(File bundleFile) { - - String rootPath = bundleDir.getAbsolutePath(); - String thisPath = bundleFile.getAbsolutePath(); - - return thisPath.substring(rootPath.length()); - - } -} diff --git a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/JavaProperty.java b/ext/mac-jarbundler/src/net/sourceforge/jarbundler/JavaProperty.java deleted file mode 100644 index 7f8481dd..00000000 --- a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/JavaProperty.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.sourceforge.jarbundler; - -public class JavaProperty { - - /** The JavaProperties' name and value */ - - private String name = null; - private String value = null; - - /** - * Construct an empty JavaProperty - */ - - public JavaProperty() { - } - - /** - * Set the JavaProperties's name; required - * - * @param name - * the JavaProperties' name - */ - public void setName(String name) { - this.name = name; - } - - /** - * Get the JavaProperties' name - * - * @return the JavaProperties' name. - */ - public String getName() { - - if (this.name == null) - return null; - - return this.name.trim(); - } - - /** - * Set the JavaProperties' value; required - * - * @param value - * the JavaProperties' value - */ - - public void setValue(String value) { - this.value = value; - } - - /** - * Get the JavaProperties' value. - * - * @return the JavaProperties' value. - */ - public String getValue() { - - if (this.value == null) - return null; - - return this.value.trim(); - } - -} diff --git a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/PropertyListWriter.java b/ext/mac-jarbundler/src/net/sourceforge/jarbundler/PropertyListWriter.java deleted file mode 100644 index 75df14ab..00000000 --- a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/PropertyListWriter.java +++ /dev/null @@ -1,430 +0,0 @@ -/* - * Write the application bundle file: Info.plist - * - * Copyright (c) 2006, William A. Gilbert All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -package net.sourceforge.jarbundler; - -// This package's imports -import net.sourceforge.jarbundler.AppBundleProperties; - -// Java I/O -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; - -// Java Utility -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; - -// Java language imports -import java.lang.Boolean; -import java.lang.ClassCastException; -import java.lang.Double; -import java.lang.String; -import java.lang.System; - -// Apache Ant -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.util.FileUtils; - -// Java XML DOM creation -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -// W3C DOM -import org.w3c.dom.Document; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Node; -import org.w3c.dom.Element; -import org.w3c.dom.Attr; - -/** - * Write out a Java application bundle property list file. For descriptions of - * the property list keys, see Apple docs. - */ -public class PropertyListWriter { - - - // Our application bundle properties - private AppBundleProperties bundleProperties; - - private double version = 1.3; - - // DOM version of Info.plist file - private Document document = null; - - - private FileUtils fileUtils = FileUtils.getFileUtils(); - - /** - * Create a new Property List writer. - */ - public PropertyListWriter(AppBundleProperties bundleProperties) { - this.bundleProperties = bundleProperties; - setJavaVersion(bundleProperties.getJVMVersion()); - } - - private void setJavaVersion(String version) { - - if (version == null) - return; - - this.version = Double.valueOf(version.substring(0, 3)).doubleValue(); - } - - - public void writeFile(File fileName) throws BuildException { - - Writer writer = null; - - try { - - this.document = createDOM(); - buildDOM(); - - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.setOutputProperty(OutputKeys.METHOD, "xml"); - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.transform(new DOMSource(this.document), new StreamResult(fileName)); - - } catch (Exception pce) { - throw new BuildException(pce); - } - } - - private Document createDOM() throws ParserConfigurationException { - - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = factory.newDocumentBuilder(); - DOMImplementation domImpl = documentBuilder.getDOMImplementation(); - - // We needed to reference using the full class name here because we already have - // a class named "DocumentType" - - org.w3c.dom.DocumentType doctype = domImpl.createDocumentType( - "plist", - "-//Apple Computer//DTD PLIST 1.0//EN", - "http://www.apple.com/DTDs/PropertyList-1.0.dtd"); - - return domImpl.createDocument(null, "plist", doctype); - } - - - private void buildDOM() { - - Element plist = this.document.getDocumentElement(); - plist.setAttribute("version","1.0"); - - // Open the top level dictionary, - - Node dict = createNode("dict", plist); - - // Application short name i.e. About menu name - writeKeyStringPair("CFBundleName", bundleProperties.getCFBundleName(), dict); - - // Finder 'Version' label, defaults to "1.0" - writeKeyStringPair("CFBundleShortVersionString", bundleProperties.getCFBundleShortVersionString(), dict); - - // Finder 'Get Info' - writeKeyStringPair("CFBundleGetInfoString", bundleProperties.getCFBundleGetInfoString(), dict); - - // Mac OS X required key, defaults to "false" - writeKeyStringPair("CFBundleAllowMixedLocalizations", - (bundleProperties.getCFBundleAllowMixedLocalizations() ? "true" : "false"), - dict); - - // Mac OS X required, defaults to "6.0" - writeKeyStringPair("CFBundleInfoDictionaryVersion", - bundleProperties.getCFBundleInfoDictionaryVersion(), dict); - - // Bundle Executable name, required, defaults to "JavaApplicationStub" - writeKeyStringPair("CFBundleExecutable", bundleProperties.getCFBundleExecutable(), dict); - - // Bundle Development Region, required, defaults to "English" - writeKeyStringPair("CFBundleDevelopmentRegion", bundleProperties.getCFBundleDevelopmentRegion(), dict); - - // Bundle Package Type, required, defaults tp "APPL" - writeKeyStringPair("CFBundlePackageType", bundleProperties.getCFBundlePackageType(), dict); - - // Bundle Signature, required, defaults tp "????" - writeKeyStringPair("CFBundleSignature", bundleProperties.getCFBundleSignature(), dict); - - // Application build number, optional - if (bundleProperties.getCFBundleVersion() != null) - writeKeyStringPair("CFBundleVersion", bundleProperties.getCFBundleVersion(), dict); - - // Application Icon file, optional - if (bundleProperties.getCFBundleIconFile() != null) - writeKeyStringPair("CFBundleIconFile", bundleProperties.getCFBundleIconFile(), dict); - - // Bundle Identifier, optional - if (bundleProperties.getCFBundleIdentifier() != null) - writeKeyStringPair("CFBundleIdentifier", bundleProperties.getCFBundleIdentifier(), dict); - - // Help Book Folder, optional - if (bundleProperties.getCFBundleHelpBookFolder() != null) - writeKeyStringPair("CFBundleHelpBookFolder", bundleProperties.getCFBundleHelpBookFolder(), dict); - - // Help Book Name, optional - if (bundleProperties.getCFBundleHelpBookName() != null) - writeKeyStringPair("CFBundleHelpBookName", bundleProperties.getCFBundleHelpBookName(), dict); - - // Document Types, optional - List documentTypes = bundleProperties.getDocumentTypes(); - - if (documentTypes.size() > 0) - writeDocumentTypes(documentTypes, dict); - - // Java entry in the plist dictionary - writeKey("Java", dict); - Node javaDict = createNode("dict", dict); - - // Main class, required - writeKeyStringPair("MainClass", bundleProperties.getMainClass(), javaDict); - - // Target JVM version, optional but recommended - if (bundleProperties.getJVMVersion() != null) - writeKeyStringPair("JVMVersion", bundleProperties.getJVMVersion(), javaDict); - - - // Classpath is composed of two types, required - // 1: Jars bundled into the JAVA_ROOT of the application - // 2: External directories or files with an absolute path - - List classPath = bundleProperties.getClassPath(); - List extraClassPath = bundleProperties.getExtraClassPath(); - - if ((classPath.size() > 0) || (extraClassPath.size() > 0)) - writeClasspath(classPath, extraClassPath, javaDict); - - - // JVM options, optional - if (bundleProperties.getVMOptions() != null) - writeKeyStringPair("VMOptions", bundleProperties.getVMOptions(), javaDict); - - // Working directory, optional - if (bundleProperties.getWorkingDirectory() != null) - writeKeyStringPair("WorkingDirectory", bundleProperties.getWorkingDirectory(), javaDict); - - // Main class arguments, optional - if (bundleProperties.getArguments() != null) - writeKeyStringPair("Arguments", bundleProperties.getArguments(), javaDict); - - // Java properties, optional - Hashtable javaProperties = bundleProperties.getJavaProperties(); - - if (javaProperties.isEmpty() == false) - writeJavaProperties(javaProperties, javaDict); - - - // Services, optional - List services = bundleProperties.getServices(); - if (services.size() > 0) - writeServices(services,dict); - - } - - - private void writeDocumentTypes(List documentTypes, Node appendTo) { - - writeKey("CFBundleDocumentTypes", appendTo); - - Node array = createNode("array", appendTo); - - Iterator itor = documentTypes.iterator(); - - while (itor.hasNext()) { - - DocumentType documentType = (DocumentType) itor.next(); - - Node documentDict = createNode("dict", array); - - writeKeyStringPair("CFBundleTypeName", documentType.getName(), documentDict); - writeKeyStringPair("CFBundleTypeRole", documentType.getRole(), documentDict); - - File iconFile = documentType.getIconFile(); - - if (iconFile != null) - writeKeyStringPair("CFBundleTypeIconFile", iconFile.getName(), documentDict); - - - List extensions = documentType.getExtensions(); - - if (extensions.isEmpty() == false) { - writeKey("CFBundleTypeExtensions", documentDict); - writeArray(extensions, documentDict); - } - - List osTypes = documentType.getOSTypes(); - - if (osTypes.isEmpty() == false) { - writeKey("CFBundleTypeOSTypes", documentDict); - writeArray(osTypes, documentDict); - } - - - List mimeTypes = documentType.getMimeTypes(); - - if (mimeTypes.isEmpty() == false) { - writeKey("CFBundleTypeMIMETypes", documentDict); - writeArray(mimeTypes, documentDict); - } - - List UTIs = documentType.getUTIs(); - - if (UTIs.isEmpty() == false) { - writeKey("LSItemContentTypes", documentDict); - writeArray(UTIs, documentDict); - } - - // Only write this key if true - if (documentType.isBundle()) - writeKeyStringPair("LSTypeIsPackage", "true", documentDict); - } - } - - private void writeServices(List services, Node appendTo) { - - writeKey("NSServices",appendTo); - Node array = createNode("array",appendTo); - Iterator itor = services.iterator(); - - while (itor.hasNext()) { - Service service = (Service)itor.next(); - Node serviceDict = createNode("dict",array); - - String portName = service.getPortName(); - if (portName == null) - portName = bundleProperties.getCFBundleName(); - - writeKeyStringPair("NSPortName", portName, serviceDict); - writeKeyStringPair("NSMessage",service.getMessage(),serviceDict); - - List sendTypes = service.getSendTypes(); - if (!sendTypes.isEmpty()) { - writeKey("NSSendTypes",serviceDict); - writeArray(sendTypes,serviceDict); - } - - List returnTypes = service.getReturnTypes(); - if (!returnTypes.isEmpty()) { - writeKey("NSReturnTypes",serviceDict); - writeArray(returnTypes,serviceDict); - } - - writeKey("NSMenuItem",serviceDict); - Node menuItemDict = createNode("dict",serviceDict); - writeKeyStringPair("default",service.getMenuItem(),menuItemDict); - - String keyEquivalent = service.getKeyEquivalent(); - if (null != keyEquivalent) { - writeKey("NSKeyEquivalent",serviceDict); - Node keyEquivalentDict = createNode("dict",serviceDict); - writeKeyStringPair("default",keyEquivalent,keyEquivalentDict); - } - - String userData = service.getUserData(); - if (null != userData) - writeKeyStringPair("NSUserData", userData, serviceDict); - - String timeout = service.getTimeout(); - if (null != timeout) - writeKeyStringPair("NSTimeout",timeout,serviceDict); - } - } - - private void writeClasspath(List classpath, List extraClasspath, Node appendTo) { - writeKey("ClassPath", appendTo); - classpath.addAll(extraClasspath); - writeArray(classpath, appendTo); - } - - - private void writeJavaProperties(Hashtable javaProperties, Node appendTo) { - - writeKey("Properties", appendTo); - - Node propertiesDict = createNode("dict", appendTo); - - for (Iterator i = javaProperties.keySet().iterator(); i.hasNext();) { - String key = (String) i.next(); - - if (key.startsWith("com.apple.") && (version >= 1.4)) { - System.out.println("Deprecated as of 1.4: " + key); - continue; - } - - writeKeyStringPair(key, (String)javaProperties.get(key), propertiesDict); - } - } - - private Node createNode(String tag, Node appendTo) { - Node node = this.document.createElement(tag); - appendTo.appendChild(node); - return node; - } - - - private void writeKeyStringPair(String key, String string, Node appendTo) { - - if (string == null) - return; - - writeKey(key, appendTo); - writeString(string, appendTo); - } - - - private void writeKey(String key, Node appendTo) { - Element keyNode = this.document.createElement("key"); - appendTo.appendChild(keyNode); - keyNode.appendChild(this.document.createTextNode(key)); - } - - - private void writeString(String string, Node appendTo) { - Element stringNode = this.document.createElement("string"); - stringNode.appendChild(this.document.createTextNode(string)); - appendTo.appendChild(stringNode); - } - - private void writeArray(List stringList, Node appendTo) { - - Node arrayNode = createNode("array", appendTo); - - for (Iterator it = stringList.iterator(); it.hasNext();) - writeString((String)it.next(), arrayNode); - - } - -} diff --git a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/Service.java b/ext/mac-jarbundler/src/net/sourceforge/jarbundler/Service.java deleted file mode 100644 index 531eb657..00000000 --- a/ext/mac-jarbundler/src/net/sourceforge/jarbundler/Service.java +++ /dev/null @@ -1,204 +0,0 @@ -package net.sourceforge.jarbundler; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - - - -/** - * Represents an Info.plist Service specifying a service provided by the application. - * - * Port Name - The name of the port the application monitors for incoming service requests. - * - - * Message - The name of the instance method to invoke for the service. - * In Objective-C, the instance method must be of the form messageName:userData:error:. - * In Java, the instance method must be of the form messageName(NSPasteBoard,String). - * - * - * Menu Item - The text to add to the Services menu. The value must be unique. - * You can use a slash character "/" to specify a submenu. For example, Mail/Send - * would appear in the Services Menu as a menu named Mail with an item named Send. - * - * - * Send Types - A list of the data type names that can be read by the service. - * The NSPasteboard class description lists several common data types. - * - * - * Return Types - A list of the data type names that can be returned by the service. - * The NSPasteboard class description lists several common data types. - * You must specify either Return Types, Send Types or both. - * - * You must specify either Send Types, Return Types or both. - * - * - * Key Equivalent - This attribute is optional. The keyboard equivalent used to invoke - * the service menu command. The value has to be a single character. Users invoke this - * keyboard equivalent by pressing the Command and Shift key modifiers along with the character. - * - * - * User Data - This attribute is optional. The value is free choosable and is passed - * to the method as second parameter. - * - * - * Timeout - This attribute is optional. It indicates the number of milliseconds - * Services should wait for a response from the application providing - * a service when a respond is required. - * - * - * - */ -public class Service { - private static final List EMPTYLIST = new ArrayList(0); - - - /** The name of the port the application monitors for incoming service requests. */ - private String portName = null; - - - /** - - * The name of the instance method to invoke for the service. - * In Objective-C, the instance method must be of the form messageName:userData:error:. - - * In Java, the instance method must be of the form messageName(NSPasteBoard,String). - */ - private String message = null; - - - /** - - * The text to add to the Services menu. The value must be unique. - - * You can use a slash character "/" to specify a submenu. For example, Mail/Send - - * would appear in the Services Menu as a menu named Mail with an item named Send. - */ - private String menuItem = null; - - /** - * A list of the data type names that can be read by the service. - - * The NSPasteboard class description lists several common data types. - - * You must specify either Send Types, Return Types or both. - */ - private String[] sendTypes = null; - - - /** - * A list of the data type names that can be returned by the service. - - * The NSPasteboard class description lists several common data types. - - * You must specify either Return Types, Send Types or both. - */ - private String[] returnTypes = null; - - - /** - * This attribute is optional. The keyboard equivalent used to invoke - - * the service menu command. The value has to be a single character. Users invoke this - - * keyboard equivalent by pressing the Command and Shift key modifiers along with the character. - - */ - private String keyEquivalent = null; - - - /** - - * This attribute is optional. The value is free choosable and is passed - - * to the method as second parameter. - - */ - private String userData = null; - - - /** - - * This attribute is optional. It indicates the number of milliseconds - - * Services should wait for a response from the application providing - - * a service when a respond is required. - - */ - private String timeout = null; - - - public void setPortName(String portName) { - this.portName = portName; - } - - public String getPortName() { - return portName; - } - - public void setMessage(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } - - public void setMenuItem(String menuItem) { - this.menuItem = menuItem; - - } - - public String getMenuItem() { - return menuItem; - } - - public void setSendTypes(String sendTypes) { - this.sendTypes = sendTypes.split("[\\s,]"); - } - - public List getSendTypes() { - return (sendTypes == null) ? EMPTYLIST : Arrays.asList(sendTypes); - } - - public void setReturnTypes(String returnTypes) { - this.returnTypes = returnTypes.split("[\\s,]"); - } - - public List getReturnTypes() { - return (returnTypes == null) ? EMPTYLIST : Arrays.asList(returnTypes); - } - - public void setKeyEquivalent(String keyEquivalent) { - this.keyEquivalent = keyEquivalent; - } - - public String getKeyEquivalent() { - return keyEquivalent; - } - - public void setUserData(String userData) { - this.userData = userData; - } - - public String getUserData() { - return userData; - } - - public void setTimeout(String timeout) { - this.timeout = timeout; - } - - public String getTimeout() { - return timeout; - } -}