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 73b09a4b..00000000 Binary files a/ext/mac-jarbundler/jarbundler.jar and /dev/null differ 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; - } -}